
LM92 es un sensor de temperatura digital que posee conectividad I2C, una exactitud de hasta 0,33°C en la medición y 12 bits de resolución. Esto representa variaciones de temperatura de tan solo 0,0625°C. Estas cualidades lo transforman en un termómetro ideal para sistemas de alta precisión donde la temperatura es un factor crítico a monitorear. Junto a un sistema de “ventana” de comparación térmica, posee alarmas por baja temperatura, alta y hasta por temperatura crítica. Los ajustes de estos valores son programables de manera muy sencilla y creemos que ya no podemos seguir contándote las bondades de este dispositivo; es momento de que ingreses al artículo y te asombres con este montaje didáctico, sencillo y profesional.
Un medidor de temperatura sencillo puede itir errores de acuerdo al ámbito donde se utilice y según las necesidades que la aplicación requiera. No será lo mismo un sensor de temperatura para un termómetro domiciliario que para un equipo médico, por ejemplo, una incubadora de bebés. Tampoco será igual el empleado en el letrero luminoso de una esquina de la ciudad que el utilizado en un invernadero, es decir, para cada aplicación las exigencias pueden cambiar de manera radical. National Semiconductor nos ofrece, en el LM92, un producto de la más alta calidad para desarrollos donde las exigencias sean rigurosas, donde los rangos de temperaturas a medir tengan una extensión considerable (-55°C a +150°C) y cuando debamos obtener un desempeño destacado. Muchas características te hemos adelantado en el encabezado del artículo, pero en el desarrollo de este texto podrás comprobar lo sencillo que es acceder a un sistema de control térmico de calidad profesional.
El LM92, como comentamos antes, brinda la posibilidad de trabajar con lo que se llama una “ventana térmica”. El circuito integrado posee un registro (programable) que almacena un valor mínimo de temperatura por debajo del cual, una alarma se activa. Es decir, podemos programar el registro mencionado para que haga sonar una alarma si la temperatura del criadero de aves descendió de una determinada temperatura y los animales corren riesgo. Así, el sistema avisará con un alerta que la temperatura ha descendido por debajo de un nivel prefijado. A este registro se lo conoce como T_LOW y por supuesto, también existe otro registro similar que ofrecerá un aviso al superar un nivel alto de temperatura: el registro T_HIGH. De este modo, por debajo de un valor térmico programable y por encima de otro, las alarmas se activan. Eso es la “ventana térmica”: los valores que quedan comprendidos entre T_LOW y T_HIGH. Asociado a estos niveles existe un tercero que es la lógica histéresis que debe tener la activación o no de las alarmas para evitar situaciones confusas o disparos intermitentes.
Las salidas de estas alarmas se presentan al en un mismo pin (5) con el nombre INT. Esto es lógico debido a que la alarma avisará cuando la temperatura esté fuera de los valores de “ventana”. La salida es Open Drain y en consecuencia su habilitación producirá un estado lógico bajo en el mencionado pin del dispositivo. Recordemos que Open Drain es la analogía al Open Colector (Colector Abierto) pero realizado con transistores MOSFET tal como se puede ver en el diagrama superior. Allí se puede observar también que existe un cuarto registro que activa una alarma cuando ya las lecturas térmicas superan un valor crítico.
Los valores que adopta el dispositivo al iniciar su trabajo cada vez que se le aplica energía es el siguiente:
- Histéresis de temperatura (T_HYST) = 2°C
- Temperatura Baja (T_LOW) = 10°C
- Temperatura Alta (T_HIGH) = 64°C
- Temperatura Crítica (T_CRIT) = 80°C
Luego, estos valores pueden ser cambiados al inicializar el funcionamiento mediante el programa del microcontrolador. De este modo, el LM92 ahorra muchas líneas de código al programador evitando tener que utilizar pines del microcontrolador para las alarmas o para organizar la secuencia de trabajo de la ventana térmica, la temperatura crítica y la histéresis de activación/desactivación.

Gracias a que el LM92 permite una alimentación que puede ser de 3,3 Volts o de 5 Volts (2,7V a 5,5V) aprovecharemos la misma alimentación que el PIC para realizar el trabajo. Las líneas SDA y SCL utilizan resistencias “pull-up” de 1K y las salidas de las alarmas se conectan de manera muy sencilla con un LED y una resistencia limitadora a la línea de tensión de 3,3 Volts. El LED amarillo que se observa en el diagrama está colocado para ayudarnos en el trabajo de programación.
Como todo dispositivo I2C, el LM92 posee un protocolo de comunicaciones que, mediante una estructura determinada, se comunica con el PIC intercambiando todos los datos necesarios para un funcionamiento apropiado. En este caso, la estructura está explicada en la hoja de datos del LM92 (Pág. 13, Fig.6) y haremos un pequeño repaso de cómo es el funcionamiento que hemos utilizado para ayudarte a que comprendas de manera más rápida los pasos a seguir y no pierdas el tiempo valioso que puedes emplear en el desarrollo del resto de la aplicación. Comenzamos entonces con “abrir” el bus I2C mediante la instrucción HBSTART. En Amicus, este formato de instrucción indica que utilizaremos el módulo MSSP del PIC para realizar la comunicación. Dicho de otro modo, usaremos los pines dedicados por hardware para facilitar el trabajo del PIC.
Luego, escribimos el valor adecuado con el siguiente formato: {HBUSOUT Address Byte, N° de Registro, [Dato a escribir]}. De este modo, y como puedes ver en la imagen superior, se modifican los registros internos del LM92. Al descargar y leer el listado que forma el programa observarás que donde dice “Escribo” en la imagen superior significa que el programa está indicando la dirección del LM92 dentro del Bus con el último bit (R/W) en cero para indicar escritura. Luego, cuando realicemos una lectura este bit cambiará a uno lógico y la etiqueta cambiará de nombre. Por último, cuando todos los registros sean escritos, según nuestro criterio, cerraremos la comunicación I2C mediante la instrucción HBSTOP.
Veamos ahora cómo se organizan los dos bytes de datos y cómo haremos para extraer la información de temperatura o, en el proceso inverso, cómo hacemos para escribir un valor útil en cualquiera de los registros. Los datos vienen organizados en una palabra de dos bytes que vistos en forma lineal se presentan de la siguiente manera:
En cualquiera de los registros encontramos que el bit de la posición D15 nos indicará el signo de la temperatura observada. Es decir, si es sobre cero D15 tendrá un valor bajo y si es bajo cero el LM92 nos devolverá en esa posición un uno lógico. Por otro lado, las posiciones D0, D1 y D2 nos devuelven el estado (Status) de las alarmas al momento de la lectura mientras que no intervienen al momento de la escritura de los demás registros. Luego de utilizar y descartar estos tres bits iniciales observamos que los bits útiles quedan comprendidos entre D3 (Bit 0) y D14 (Bit 11), y de esta manera queda alojada en 12 bits la información de temperatura. Dentro de esta estructura, los cuatro bits de menos peso (LSB) se procesan de manera separada obteniendo de ellos los decimales de la medición. Recordemos que el LM92 ofrece “pasos” de 0,0625°C y por este motivo 15 pasos (4 bits) significarán 0,9375°C. Esto te permite apreciar la calidad de medición que nos ofrece el LM92. Finalmente, sobreviven las posiciones D7-D14, las que se tratan como un byte convencional y su valor expresado en decimal será el valor entero de la temperatura. Combinando la parte decimal con la entera, llegamos al resultado final que se muestra en el LCD.
Los términos TEMP, T6, T3, T1, T4 y T5 son las variables usadas para cargar los valores que el programa necesita y se declaran al inicio del mismo. Observando la imagen, se evidencia que existe un condicional IF que se encarga de determinar el valor que toma D15 (el bit del signo). Por su peso, D15 equivale a un decimal igual a 256; por lo tanto, si la variable supera el valor 255, será indicación de que el LM92 está registrando temperaturas bajo cero. Recuerda: si D15 adopta un valor igual a uno, la temperatura es bajo cero. A partir de esto, la presentación se transforma a lo que se conoce como “complemento a dos”. Por ejemplo, si el byte 11100111 está expresado en complemento a dos, debemos invertirlo (00011000) y sumarle una unidad, obteniendo el número 00011001. En BASIC, esto es muy sencillo de realizar con una única instrucción (T6 = ~T6 + 1). De este modo, el LM92 nos ofrece los valores de temperatura bajo cero.
Esta es la manera en que podemos escribir y leer los registros en el LM92. Sólo debemos comprender y aprovechar el uso de las herramientas que nos ofrece el lenguaje de programación, para sacar el mejor provecho del sistema. La última aclaración que vale indicar, y que es importante a la hora de realizar un proyecto con este dispositivo, es saber que, mientras el microcontrolador lee el registro de temperatura, los indicadores de alarma dejan de funcionar. Por más rápido que sea el bus I2C o el lenguaje compilador utilizado, existe un vacío de indicación durante la adquisición del dato de temperatura. Para evidenciar este fenómeno, en nuestro programa de ejemplo, asignamos al LED amarillo una duración de encendido/apagado que permite notar la diferencia en la indicación de las alarmas del LM92. No te lo pierdas:
Existen muchos circuitos integrados en el mercado que ofrecen la posibilidad de funcionar como medidores de temperatura, pero muy pocos ofrecen tantas funciones en un mismo encapsulado como lo hace el LM92. Un dispositivo muy útil para infinitas aplicaciones donde la precisión, exactitud y el control estricto de la temperatura son factores fundamentales del diseño.
Como siempre componentes que no se consiguen, esta muy bueno todo lo guardare para cuando pueda conseguirlos.
Saludos y felicidades gente de NEOTEO por seguir siempre con material tan interesante.
Les quiero pedir un gran favor- He buscado ya un buen rato un video que pusieron aquí hace mas de un año o dos y no lo encuentro, parece que en las recomendaciones semanales.
Trata sobre un robot que esta en una plaza comercial creo, sentado al lado de una máquina de refrescos pidiendo limosna, nadie le da y se levanta para disparar a un edificio que tiene el logo de apple o micorsoft no me acuerdo. No se como buscarlo en youtube. Y aqui ya le perdí la pista. Si me indicaran el camino se los agradecería
Hola Mario, muy bueno el articulo, con respecto a la precisión sera mas eficiente leer la información del censor por medio de I2C o por conversión A/D? obviamente si el censor lo permite como el clasico LM35.
¿Como se podrian montar varios sobre el mismo bus?
Saludos Mario y demas amigos.
Hola...
Muchas gracias Mario...
Muy interesante y directo a favoritos. Está muy bien este chip, y muy a tener en cuenta, pero le veo un problema que ya viene siendo habitual, el encapsulado. Si hubiera variante en PDip, mucho mejor. Probablemente se ha dicho antes, pero , si no te lo has hecho tú, ¿me puedes repetir algún sitio donde se pueda conseguir la plaquita conversora de Sop a Pdip?
Muchas Gracias
Gracias Mario y de nuevo un saludo.
Antonio.
Excelente como siempre :D yo todavía tengo todo los articulo de I2c guardado probe con proteus y PIC-C ccs pero no lo he dominado del todo. Con respecto a los componentes es cierto alguno lugares no llegan las muestras gratis y si no es difícil conseguir es caro, de todo modo es para ponerse bravo o nervioso, lo importante es el conocimiento que el maestro mario no da en los articulo ejemplo el proyecto usando lo cabezales de un VHS, no hice ese proyecto pero entendí el principio de los cabezales y ese día quede muy contento como que había aprendido algo ese día =D
muy buenos los tutoriales!!!
cordial saludo, tienes el codigo .asm porque no lo vi,, gracias
Muy buen articulo. ¿Cuantos metros como máximo de cable creis que podrian separar el sensor del microcontrolador?
el codigo asm que esta para descargar fue el que utilizaron para este proyecto ya que cuando lo compilo en mplab me envia demaciados errores T_T ayudaaaa
Debes iniciar sesión para publicar un comentario.