TERMÓMETRO DIGITAL DS1624 Centro CFP/ES COMUNICACIÓN I2C 1
CARACTERÍSTICAS DEL DS1624 El DS1624 tiene una resolución de 13 bits. Como la mayoría, sigue midiendo temperaturas en el rango de 55 C a +125 C, pero ahora lo hace con incrementos de 0.03125 C. Este incremento se debe a que la parte fraccionaria es de 5 bits y ya sabemos que eso da 1/32 = 0.03125. CARACTERÍSTICAS DEL DS1624 Fabricado por Dallas Semiconductors Dispositivo conectable al bus I2C No requiere componentes externos para realizar la medida La temperatura es leida como un valor digital de 2 bytes que incluye el signo Realiza la conversión de temperatura en un tiempo máximo de un segundo Posee 256 bytes de memoria EEPROM para almacenar datos Se puede alimentar entre 2,7 y 5 V 2
CARACTERÍSTICAS DEL DS1624 Tiene dos modos de operación: de Conversiones Continuas y One Shot. En cualquier modo, permanecerá en Standby mientras no se esté convirtiendo una temperatura, esto es, luego de terminada una conversión en One Shot o después de detener las conversiones (con Stop Convert T) en modo de Conversiones Continuas. DIRECCIONAMIENTO COMO ESCLAVO El dispositivo se activa cuando recibe la dirección válida. 1 0 0 1 A2 A1 A0 R/W A2, A1 y A0 se conectar a masa, si solamente hay un dispositivo, la dirección ob10010001 es en lectura y 0b10010000 es escritura. Permitiría conectar hasta 8 dispositivos en el mismo bus. 3
REGISTRO DE CONFIGURACIÓN El registro de Configuración está implementado en EEPROM. Una escritura en él tomará un tiempo típico de 10 ms y máximo de 50 ms. En ese lapso el DS1624 responderá con un NACK a los siguientes datos que reciba. LECTURA DE TEMPERATURA El dispositivo realiza la lectura de la temperatura mediante 2 bytes en complemento a 2. El dato es transmitido por el bus I2C, siendo el primero MSB MSB 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 0 La temperatura es de 25,0625 ºC La temperatura se expresa en grados centígrados con 4 decimales Se almacena en 2 bytes donde el byte superior es la parte entera y el inferior la parte decimal La temperatura se expresa en complemento a 2, por lo que el bit más alto de la parte entera indica el signo, 0 para positivas y 1 para negativas. 4
LECTURA DE TEMPERATURA Los 4 bits más bajos del byte de la parte decimal están siempre a 0 La parte decimal se obtiene sumando el valor posicional de los 4 bits más altos que son: 0,5, 0,25, 0,125 y 0,0625 según donde se encuentre el 1 respectivamente. VEAMOS UN EJEMPLO Qué temperatura leera el dispositivo si tenemos la siguiente secuencia? 0 0 0 1 0 1 1 0 1 0 1 1 0 0 0 0 LECTURA DE TEMPERATURA En la parte entera tenemos: 0b00010110 = 128*0+64*0+32*0+16*1+8*0+4*1+2*1+1*0=+22ºC En la parte decimal tenemos: 0b10110000 = 0,5*1+0.25*0+0.125*1+0.0625*1= 0.6875ºC La temperatura leida es: +22.6875 ºC 5
INSTRUCCIONES INSTRUCCIONES Según la tabla anterior y los datos del fabricante los pasos son los siguientes: 1. Configurar el dispositivo: 1. Llamar al dispositivo: 0b10010000 -> 0x90 2. Acceso al registro de configuración: 0b10101100 -> 0xAC 3. Solo realiza una lectura el 1SHOT del sensor a 1: 0b00000001 -> 0x01 1. Inicializar el dispositivo: 1. Genera el primer byte de control (1001A2A1A0W): 0b10010000 -> 0x90 2. Inicializa la primera conversión de temperatura: 0b11101110-> 0xEE 2. Leer el valor de temperatura: 1. Llamar al dispositivo: 0b10010000 -> 0x90 2. Comienza la lectura de temperatura: 0b10101010 -> 0xAA 3. Genera primer byte de lectura (1001A2A1A0-R), R es por el 1 del 0x91: 0b10010001 -> 0x91 3. Seguidamente hacemos dos lecturas una para la parte baja y otra para la parte alta: 1. Leemos la parte entera del dato: datoh=i2c_read(); 2. Leemos la parte decimal y lo pasamos a 0 para indicar esperando respuesta: datol=i2c_read(0); 6
LIBRERÍA DS1624 void temp_config() //Configura el registro del DS1624 { i2c_start(); i2c_write(0x90); //dirección asignada para la escritura i2c_write(0xac); //Acceso a la configuración i2c_write(0x01); //Solo realiza una única lectura, el 1SHOT del sensor a 1 i2c_stop(); } void init_temp() //Inicializa la primera conversión { temp_config(); //Acceso a la función tem_config descrita más arriba delay_ms(50); //Retardo de 50 ms. i2c_start(); //Comienzo de la comunicación i2c_write(0x90); //Genera el primer Byte, de control (1001A2A1A0W) i2c_write(0xee); //Inicializa la conversión i2c_stop(); // Final de la comunicación } LIBRERÍA TEMP_DS1624 float read_temp() // Retorna el valor en Celsius o Farenheit { int datah,datal; float dval; i2c_start(); i2c_write(0x90); //Genera el primer Byte (1001A2A1A0-W), W es por el 2º 0 del 0x90 i2c_write(0xaa); //Comienza la lectura i2c_start(); //Vuelve a llamar a un start antes de un stop, esto dependerá de la respuesta del esclavo. i2c_write(0x91); //Genera primer Byte (1001A2A1A0-R), R es por el 1 del 0x91 datah=i2c_read(); //Lectura de la parte entera datal=i2c_read(0); //Lectura de la parte decimal, pasando 0 para indicar el NACK. i2c_stop(); 7
MONTAR EL SIGUIENTE CIRCUITO MONTAJE EN PLACAS TRAINER 8
VIDEO DE FUNCIONAMIENTO TERMÓMETRO DIGITAL DS1624 9