Story Transcript
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