PDA

View Full Version : ibutton ds1990 dallas



davleo
- 17th December 2003, 14:23
Hi,
I would like to know, if somebody know how to read the serial num of ibutton ds1990 dallas, with a 16fxxx . All the information a found was in asm
thx

ogranadino
- 12th May 2005, 23:04
programm...

#include <touch.c>


void main() {
BYTE buffer[8];
BYTE i;

printf("\r\nWaiting for a touch device...\r\n");
while (TRUE) {
while(!touch_present()) ;
delay_ms(200);
if(touch_present()) {
touch_write_byte(0x33);
for(i=0;i<8;++i)
buffer[i]=touch_read_byte();


}
}
}

//you need to use this lib

///////////////////////////////////////////////////////////////////////////
//// Dallas Touch Driver ////
//// ////
//// present = touch_present() Issues a reset and returns TRUE ////
//// if the touch device is there. ////
//// ////
//// data = touch_read_BYTE() Reads one BYTE from a touch device. ////
//// ////
//// ok = touch_write_BYTE(data) Writes one BYTE to a touch device ////
//// and returns TRUE if all went OK. ////
//// A FALSE indicates a collision with ////
//// another device. ////
//// ////
///////////////////////////////////////////////////////////////////////////
//// Derivative programs created using this software in object code ////
//// form are not restricted in any way. ////
///////////////////////////////////////////////////////////////////////////

#ifndef TOUCH_PIN
#define TOUCH_PIN PIN_B0
#if defined(__PCH__)
#bit TOUCH_PIN_BIT = 0xF8A.0
#else
#bit TOUCH_PIN_BIT = 6.0
#endif
#endif


BYTE touch_read_byte() {
BYTE i,data;

for(i=1;i<=8;++i) {
output_low(TOUCH_PIN);
delay_us(14);
output_float(TOUCH_PIN);
delay_us(5);
shift_right(&data,1,input(TOUCH_PIN));
delay_us(100);
}
return(data);
}

BYTE touch_write_byte(BYTE data) {
BYTE i;

for(i=1;i<=8;++i) {
output_low(TOUCH_PIN);
delay_us(10);
if(shift_right(&data,1,0)) {
output_high(TOUCH_PIN);
delay_us(10);
if(!TOUCH_PIN_BIT)
return(0);
} else {
output_low(TOUCH_PIN);
delay_us(10);
if(TOUCH_PIN_BIT)
return(0);
}
delay_us(50);
output_high(TOUCH_PIN);
delay_us(50);
}
return(TRUE);
}

BYTE touch_present() {
BOOLEAN present;

output_low(TOUCH_PIN);
delay_us(500);
output_float(TOUCH_PIN);

delay_us(5);

if(!input(TOUCH_PIN))
return(FALSE);
delay_us(65);
present=!input(TOUCH_PIN);
delay_us(240);
if(present)
return(TRUE);
else
return(FALSE);
}


luck.. touch the ds1990 or ds1991 whit pin RB0(B0), and the other side to ground...

best regards
oscar from chile.

davleo
- 13th May 2005, 13:07
thanks oscar

NL2TTL
- 13th May 2005, 17:39
There is a more easy way (use 1-wire) personal message me if you like more info

NavMicroSystems
- 13th May 2005, 17:51
It is as simple as:



' Read iButton Family Code & Serial Number

TempA var byte[8]
iButton Var PortB.0 ' iButton connected to PortB.0

OWOUT iButton,1,[$33] ' Issue Read ROM command
Pause 100
'Read 64 Bits (8 Bytes) into Array TempA
OWIN iButton,0,[TempA[0],TempA[1],TempA[2],TempA[3],TempA[4],TempA[5],TempA[6],TempA[7]]


For Reference see DS1990 Datasheet (http://pdfserv.maxim-ic.com/en/ds/DS1990A-F3-DS1990A-F5.pdf)

mister_e
- 13th May 2005, 17:52
personal message me if you like more info

why? it is not the place to share our code & knowledge? it's a military secret? ;)

NavMicroSystems
- 13th May 2005, 17:54
why? it is not the place to share our code & knowledge? it's a military secret? ;)

Steve, it's like with binary,
There are only 10 types of people
... those who do share code,
and those who don't

NL2TTL
- 13th May 2005, 17:57
Well, i can share my code, and no problem at all but in the past i see so many poeple place mess of code, and at that moment the one how asked has already fixed it.

Next time i post ie directly :) no hard feelings :P

ogranadino
- 17th May 2005, 00:08
Hi,
I would like to know, if somebody know how to calculate the CRC of ibutton ds1990 dallas, with a 16fxxx . All the information a found was in asm

thanks.

mister_e
- 17th May 2005, 03:21
http://www.picbasic.co.uk/forum/showthread.php?t=1672&highlight=crc%2A

ogranadino
- 18th May 2005, 19:51
thanks steve.