A discussion group for the PICMicro microcontroller. Also called the Microchip PIC, this list is dedicated to the use and abuse of this fine, simple, microcontroller. Close to topic posts are welcome, ie. general electronics.
So far in May, you have voted 0 times ou of a total of 22 votes by the community.
Please help us clean the archives from unuseful discussion threads by using the voting system! Details here.
Is this thread worth a thumbs up?
|
Hy, anyone have C-code for read i-button? this device have one Pin and ground. thanks Mario |
|
|
|
Here you have.... ENJOY void Write_Dallas(unsigned char bit_1) { // Pone un CERO a la salida // (pulso de comienzo). Dallas_Pin = 0; DelayUs(10); Dallas_Tris = 0; // Pone el puerto como salida. DelayUs(17); // Espera 15us min if(bit_1) { // si llega aqui debe transmitir un UNO Dallas_Tris = 1; // Configura puerto como entrada para que // suba en tensión automáticamente. DelayUs(50); // Espera 50us (este tiempo debe completar // los 60us como mínimo). } else { DelayUs(100); // Espera el tiempo que es como máximo 120us Dallas_Tris = 1; // Pone el puerto como entrada. } DelayUs(10); // Espera 1us (tREC) en el return } //Transmite un Byte al dispositivo void WriteByte_Dallas(unsigned char Data) { unsigned char n; for(n=0; n<8; n++) { if (Data & 0x01) { // Pone un CERO a la salida // (pulso de comienzo). Dallas_Pin = 0; DelayUs(10); Dallas_Tris = 0; // Pone un cero a la salida DelayUs(10); Dallas_Tris = 1; // Pone un cero a la salida DelayUs(103); // Espera 103us (este tiempo debe completar // los 120us como mínimo). } else { Dallas_Pin = 0; // Pone un CERO a la salida DelayUs(10); Dallas_Tris = 0; // Pone el puerto como salida. DelayUs(100); // Espera 100us Dallas_Tris = 1; // Configura puerto como entrada para que DelayUs(10); // suba en tensión automáticamente. } Data >>= 1; } } // Lee un bit de la memoria Dallas. unsigned char ReadBit_Dallas(void) { unsigned char Lectura; // Pone un CERO a la salida // (pulso de comienzo). Dallas_Pin = 0; DelayUs(2); Dallas_Tris = 0; DelayUs(2); Dallas_Tris = 1; DelayUs(5); // Espera para leer Lectura = 0; DelayUs(2); if(Dallas_Pin) Lectura = 1; DelayUs(42); // Espera para completar los 120us max return Lectura; // Lee el pin } // Envia el pulso de Reset al bus 1-Wire, y devuelve // true si recibe el pulso de presencia unsigned char Reset_Dallas(void) { // Pone un CERO a la salida // (pulso de RESET). Dallas_Pin = 0; DelayUs(10); Dallas_Tris = 0; // Pone el puerto en salida. DelayUs(255); // Espero 480us mínimo. DelayUs(225); Dallas_Tris = 1; // Pone el puerto como entrada y // espera a que la DS1990A ponga un cero. DelayUs(75); // Espera un mínimo de 15us+60us. if ( Dallas_Pin ) // Si lee un UNO es que no hay memoria colgada del return 0; // bus. DelayUs(165); // Espera para completar los 480us (peor caso) DelayUs(240); return 1; } // Calcula el CRC8 acumulado unsigned char CRC8_Dallas(unsigned char Data) { unsigned char i, f; for (i = 0; i < 8; i++) { f = 1 & (Data ^ CRC_Dallas); CRC_Dallas >>= 1; Data >>= 1; if (f) CRC_Dallas ^= 0x8c; // b10001100 es la palabra del CRC (x8 + x5 + x4 + 1) // 7..43..0 junto con el 1 aplicado a f. } return CRC_Dallas; } //Chequea el CRC de los datos recibidos unsigned char CheckCRC(void) { unsigned char k; CRC_Dallas = 0; for (k = 0; k < 8; k++) CRC8_Dallas(SN_Dallas[k]); return !CRC_Dallas; } // Lee un byte desde el dispositivo unsigned char ReadByte_Dallas(void) { unsigned char n, Byte_Dallas; for (n=0; n<8; n++) { Byte_Dallas >>= 1; DelayUs(2); if ( ReadBit_Dallas() ) Byte_Dallas |= 0x80; // LSB first! } return Byte_Dallas; } //Lee el código de la memoria y lo guarda en la variable //global SN_Dallas unsigned char ReadSN_Dallas(void) { //Escribe el comando de lectura de ROM (Read ROM = 0x33) WriteByte_Dallas(0x33); // 0x33 - Read ROM DelayUs(2); for(CRC_Dallas = 0; CRC_Dallas < 8; CRC_Dallas++) SN_Dallas[CRC_Dallas] = ReadByte_Dallas(); return CheckCRC(); } // Inicializa todo lo necesario // para manejar las llaves Dallas // (pines, interrupciones) void Init_Dallas( void ) { //Inicializacion del HW del uC. Dallas_Tris = 1; } Mauricio D. Jancic Janso Desarrollos - Microchip Consultant www.janso.com.ar (54) - 11 - 4542 - 3519 Lugones 3238 "B" - C1430ECN Capital Federal Republica Argentina (54) - 11 - 4542 - 3519 MSN: >>-----Original Message----- >>From: bob_lasar [mailto:] >>Sent: Lunes, 22 de Diciembre de 2003 14:45 >>To: >>Subject: [piclist] I-button Dallas >> >>Hy, >>anyone have C-code for read i-button? >>this device have one Pin and ground. >> >>thanks >> >>Mario >> >> >>to unsubscribe, go to http://www.yahoogroups.com and follow >>the instructions >> >> >> >> >> >>-- >>Incoming mail is certified Virus Free. >>Checked by AVG Anti-Virus (http://www.grisoft.com). >>Version: 7.0.209 / Virus Database: 261.5.2 - Release Date: 20/12/2003 >> >> -- Outgoing mail is certified Virus Free. Checked by AVG Anti-Virus (http://www.grisoft.com). Version: 7.0.209 / Virus Database: 261.5.2 - Release Date: 20/12/2003 |