El circuito integrado STCN75 posee un sensor de temperatura de tecnología CMOS de alta precisión, e incorpora en su interior un convertidor que transforma la temperatura leída en una información digital compatible con el estándar I2C. Con una resolución de 0,5°C y una exactitud de +/- 2°C, en el rango de -25° a 100°C, se convierte en un interesante dispositivo a ensayar. De la mano de Protón+, retomemos los proyectos prácticos con microcontroladores. Anímate, entra y descubre lo sencillo que es construir un instrumento de suma utilidad en cualquier ámbito.
A partir de un simple reloj que permite controlar y medir el tiempo, el hombre siempre se ha interesado por cuantificar las magnitudes de los fenómenos climáticos que lo rodean: medir la temperatura, la humedad, la radiación UV, la presión atmosférica y todo aquello que tenga que ver con mediciones básicas que, combinadas de forma apropiada entre sí, dan el sustento informativo a la meteorología.
El objetivo propuesto
El diseño que hoy te presentamos consta de un termómetro digital capaz de ser conectado a través de una sencilla línea bifilar (como puede ser un par telefónico) a distancias superiores a un kilómetro. Dicho diseño te permite supervisar temperaturas remotas y activar sistemas calefactores o refrigerantes en función de la conveniencia, sin la necesidad de presencia física en el lugar y a través de una aplicación en el ordenador.
El sensor elegido
Los medidores de temperatura más elementales se basan en sistemas que utilizan resistencias especiales que varían con la temperatura (NTC o PTC). También es común el uso de diodos discretos y adecuadamente polarizados que aprovechan la linealidad de alguna de sus propiedades para transformar una circulación de corriente en una referencia de temperatura a la que es expuesto el encapsulado de dicho diodo. Avanzando un poco más en la complejidad de los sensores empleados en la medición, nos encontramos con los clásicos y altamente utilizados LM35 y LM335 que proveen a los microcontroladores de tensiones analógicas equivalentes a la temperatura que se está analizando.
Todos los sistemas mencionados hasta aquí poseen un problema que suele ser muy difícil de controlar: la estabilidad y precisión de la tensión de alimentación a los mencionados circuitos analógicos. Cualquier variación en el suministro energético puede significar errores de varios grados en la lectura del instrumento, o puede devolver en la presentación de la información drásticas variaciones que impiden una lectura apropiada de la magnitud que se quiere obtener.
Para aliviarte de todos los problemas que causarían el diseño y la construcción de complejos sistemas estabilizados y compensados, hemos decidido ayudarte a construir el termómetro de esta nota con un circuito integrado puramente digital. De esta forma, se evitan circuitos analógicos que puedan inducir errores en la medición. A través de la conexión SDA y SCL de un bus I2C hacia el microcontrolador, y al entregar la información útil en una palabra de 16 bits (es decir, de manera digital), este sencillo dispositivo te resuelve los problemas de ruidos, las variaciones de alimentación, y te permite manejar programaciones más complejas con sólo ajustar apropiadamente los registros internos del STCN75.
La configuración de cada uno de estos registros te permitirá utilizar el circuito integrado como un termostato común. Además, podrás programar alarmas de temperatura y pasar a modo de bajo consumo cuando no se requiera de su utilización. También podrás programar una “ventana” de temperaturas de utilización en la que, por debajo de la mínima o por encima de la máxima programada, se active la salida OS/INT energizando una alarma o sistema de aviso. En el datasheet del STCN75 se explica de manera clara la programación de cada registro para obtener el funcionamiento que deseas. No dejes de leerlo para entender claramente lo que aquí está desarrollado.
En el instante de inicialización o power-up del dispositivo, las condiciones del dispositivo te permiten leer la temperatura sin necesidad de escribir previamente ningún registro, situación que facilita de manera enorme la programación del microcontrolador a utilizar. Sólo debes leer la dirección número cero de los registros, que es donde se almacena la palabra de 16 bits que equivale a la temperatura, y luego debes presentarla en el display LCD que decidas agregar al microcontrolador. Es decir, al dar la instrucción de leer el bus I2C, apuntarás a la dirección 0 de los registros del sensor para leer la información allí almacenada. Una y otra vez, el sistema continuará leyendo cíclicamente la temperatura del ámbito donde esté instalado el STCN75. En cuanto a las dimensiones y al package, puedes apreciar que el encapsulado SO8 es una buena opción para aplicaciones en placas pequeñas. Tú sabes soldar SMD, ya lo hemos aprendido también aquí.
El Microcontrolador
El dispositivo seleccionado es el PIC 16F628A del que ya se ha hablado bastante en la revista. Aquí encontrarás un entrenador, y hasta un quemador (nombre popular con el que se conoce a un hardware programador), para poder continuar las prácticas con él cuando decidas avanzar hacia otros desarrollos. Particularmente en mi caso utilizo un GTP-USB+ (me ha funcionado siempre de maravillas) pero tú podrás utilizar sin inconvenientes el dispositivo mencionado anteriormente para dar tus primeros pasos en este apasionante mundo.
El circuito inicial
En el circuito se observa (en la parte más destacada) la conexión del 16F628A al LCD. Luego puedes encontrar más abajo el relé que utilizarás para programar un encendido y apagado de algún sistema de calefacción (o refrigeración). También ubicarás la conexión del sensor de temperatura y la aplicación de resistores pull-up a ambas señales del bus I2C. Y arriba del microcontrolador, encontrarás el cristal externo de 20Mhz que brindará la referencia de clock al sistema.
Podríamos haber utilizado cómodamente el oscilador interno que posee el 16F628A, que es de 4Mhz, pero como en futuras ediciones queremos que utilices este mismo circuito en una conexión RS485 a 34800 bps, necesitarás para ello un cristal de alta frecuencia. Por otra parte, el software que utilices para realizar el programa que hará funcionar al PIC sólo admite, en su versión gratuita, cristales de 4 o 20 Mhz.
A la izquierda, ingresando por el pin 4, puedes ver el arreglo de componentes que permite obtener el RESET del microcontrolador, al inicializar su conexión. Allí puedes agregar, si deseas, un pulsador a GND (desde el pin 4) para permitir un reset sin necesidad de desconexión del sistema. Luego, a la izquierda, encontrarás el conector ICSP (In Circuit Serial Programer), a través de cual puedes programar el microcontrolador PIC una y otra vez sin necesidad de retirarlo de la placa donde lo hayas instalado, práctica que te recomendamos para ahorrar tiempo y la integridad física de los microcontroladores y zócalos que utilices en tus diseños. Estos últimos se deterioran muy fácilmente al colocar y quitar reiteradamente el IC. Por último se encuentra la fuente de 5 Volts, que también has aprendido a construir gracias a la revista. Notarás que el transformador es de 2 X 7,5 Volts para asegurar un funcionamiento del regulador 7805 en baja temperatura. Recuerda que el backlight del LCD se conecta a los 5 Volts de alimentación, al igual que un LED, pero en este caso lo hace a través de una resistencia de 47 Ohms (no figura en el circuito).
El firmware dentro del microcontrolador PIC
Rara vez se encontrarán dos personas que opinen lo mismo acerca de cuál es el mejor software para realizar el programa que correrá dentro del microcontrolador PIC. Muchos dirán MPLAB, otros se inclinarán por el C, y otros optarán por el BASIC. Los tres son correctos. Mientras el programa deseado y cargado dentro del microcontrolador PIC cumpla la misión imaginada por el desarrollador, da lo mismo que haya sido escrito en cualquier programa. Funciona y posee todas las prestaciones imaginadas: eso es lo que verdaderamente vale.
El programa que utilizaremos es el Protón+ en su versión LITE, el cual posee ciertas limitaciones de uso en su versión de demostración, que tú puedes ver en el sitio de descarga del mismo. Queremos contarte que estamos trabajando duro para conseguir la versión completa del programa y poder comenzar cuanto antes a desarrollar trabajos con conectividad USB que posean interfaces al ordenador donde podamos desplegar instrumental, dataloggers, y todo lo que tenga que ver con la interacción entre el diseño y el ordenador. Afortunadamente, para este proyecto inicial, nuestro programa (firmware) alcanzará y no tendrá problemas de ser compilado y preparado para ser introducido en el microcontrolador PIC. Podremos crear sin inconvenientes el archivo .HEX que se requiere gracias a Protón+ LITE. Pero si aspiramos a lograr conectividad USB (nuestro objetivo) necesitaremos obligatoriamente la versión completa del programa. ¿Ustedes qué opinan?
¿Cómo se arma un programa para cargar dentro del PIC?
Protón+ posee una facilidad de uso admirable para todo el que se inicia y comienza a transitar el mundo de los microcontroladores. Pero como todo lenguaje de programación, requiere de un armado estructurado en la secuencia de las líneas del programa para que pueda ser interpretado y compilado correctamente. Lo primero que deberás determinar dentro del listado del programa es el dispositivo a utilizar y la frecuencia del cristal que usará tu diseño.
Observa que todo lo que se inicie con un apóstrofo será considerado por el programa como un comentario y no será tenido en cuenta al momento de compilar el archivo, ni al contabilizar las líneas permitidas por la versión LITE de Protón+. Es decir, a pesar de haber llegado a la línea 11, el programa sólo contabilizará dos líneas.
Una vez elegido el modelo permitido del microcontrolador y el valor de frecuencia del cristal (20 Mhz), puedes seguir planteándole al programa los parámetros de definición de los periféricos que vas a utilizar en torno al microcontrolador. Luego viene la configuración del registro que maneja los comparadores internos mediante el nombre CMCON; se le adjudica a éste el valor que indica el datasheet para su desconexión. En la siguiente línea, debes aclarar que trabajarás en modo totalmente digital ALL_DIGITAL = TRUE. Inmediatamente después definirás la conexión del LCD donde DTPIN te indica a qué pin del microcontrolador irá conectado el Terminal DT del LCD, y lo mismo para los terminales RS y EN. Por último, en la definición del LCD encontrarás la línea que indica que usarás la conexión de 4 bits (INTERFACE), la cantidad de renglones que utilizará el LCD (LINES) y el tipo de display a utilizar, adjudicando un 0 para alfanuméricos y un 1 para gráficos.
El próximo paso es indicarle al microcontrolador los pines que utilizarás como SDA y SCL (las líneas que forman el bus I2C). Inmediatamente después adjudicarás a la etiqueta (label) “LEER” el valor que deberá “llamar” al STCN75. El número cargado en esta etiqueta le indicará que es a él a quien el microcontrolador está llamando dentro del bus. Esto se realiza de esta manera ya que pueden existir otros dispositivos I2C conectados al mismo bus. Recordemos que este protocolo admite muchos dispositivos conectados en paralelo, que pueden comunicarse con el microcontrolador cuando éste lo desee. En el caso del STCN75, la dirección viene dada por el numero binario %10010001. Dicho de otro modo, el microcontrolador le dirá al dispositivo seleccionado “a ti te estoy llamando”. Esta acción de cargar la dirección en la etiqueta LEER la realiza la instrucción SYMBOL.
Por último, y antes de empezar a definir el trabajo del microcontrolador, le indicarás al sistema los nombres y los tamaños de las variables donde el firmware irá cargando sus datos en la medida en que los necesite, solicite y utilice. Por supuesto que todo esto está explicado en el HELP del programa. Un ejemplo es la variable WORD que puede desdoblarse en dos variables BYTE (LOW y HIGH), a las que reasignaremos nuevos nombres para su manipulación dentro del firmware.
Es común dar un pequeño retardo (DELAYMS) de 100 milisegundos para estabilizar el funcionamiento del sistema; luego debes iniciar el trabajo con la pantalla limpia (CLS). El paso siguiente será cargar con valores específicos algunas variables para asegurar un inicio válido y no al azar.
El bucle principal del firmware
Aquí dentro se desarrolla la acción: el trabajo de interacción entre el microcontrolador y el mundo exterior, en este caso, a través del sensor de temperatura y el relé RL1.
En la etiqueta INICIO comienza el lazo principal del programa que te permitirá leer la temperatura ambiente. Según los datos que hayas programado de mínima y máxima, harás actuar o desactivarás el relé RL 1 que, en este caso en particular, conecta un sistema de calefacción. El primer paso es “abrir” el bus mediante la instrucción BSTART. Luego, mediante la instrucción BUSIN, debes iniciar la comunicación con el dispositivo I2C que se encuentre en la dirección LEER (que en este caso es el sensor de temperatura) y debes indicarle que lo que exista en el registro 0 lo cargue dentro de la variable B, mediante la instrucción BUSIN LEER, 0, [B]. Una vez que esto sucedió, el microcontrolador cerrará el contacto I2C con la instrucción BSTOP.
Más atrás en el texto, cuando se designaron las variables a utilizar, adjudicaste el nombre B a una variable WORD, es decir, a una variable que se puede considerar “doble BYTE”, a la que ahora Protón+ ha dividido en C = B.HIGHBYTE y D = B.LOWBYTE. Las características de los valores obtenidos de esta separación están claramente explicados en el datasheet del STCN75 y en los comentarios del listado del programa, aunque pueden resumirse de la siguiente manera: lo cargado en la variable C determina el valor de la temperatura en números enteros (positivos o negativos, según el número obtenido), mientras que lo almacenado en la variable D indica si la medición es en grados enteros o con 5 décimas por encima, tal como es la resolución del sensor.
Las siguientes instrucciones imprimen en el LCD los valores obtenidos: en el primer renglón puedes colocar la palabra TEMPERATURA, tratando de centrarla en la pantalla, mientras que en el segundo renglón, luego de dejar cinco espacios, escribirás la variable A, que a temperaturas sobre cero es un carácter vacío. Si la temperatura leída está debajo de los cero grados centígrados aparecerá un signo menos. Inmediatamente después llega el valor de C expresado en numeración decimal y que equivale, como dijimos antes, al valor entero del número a mostrar. A este número le sigue la coma y termina el número con F representando al decimal del valor mostrado. 158 es el símbolo “°”, en código ASCII. Termina la línea con la inclusión de la letra C para expresar el resultado en grados centígrados.
La última parte del programa incluye las comparativas de los valores obtenidos con números constantes que sirven de referencia para activar o desactivar el relé. Puedes ver claramente que la expresión indica que si C es menor a 20, se debe activar el relé poniendo la salida correspondiente en un estado lógico alto, y que si es mayor a 26 se debe colocar en estado bajo. Esto genera una ventana lógica que indica que si la temperatura desciende de los 20 grados se encenderá la calefacción, mientras que si supera los 26 grados el sistema ordenará su apagado.
Con los arreglos que ya estarás analizando, también puedes cambiar los valores de programación para encender el aire acondicionado del coche o del dormitorio, y hasta tal vez, para mantener estable la temperatura de tu terrario activando un calefactor que mantenga siempre estable la temperatura ambiente. Por último el programa finaliza en la instrucción END.
Conclusiones finales
Por supuesto que no incluimos aquí el listado del programa, a pesar de ser pequeño, pero sí te dejamos las imágenes para que tú lo escribas y, de esta forma, analices lo que haces y por qué lo haces para captar mejor el conocimiento. Nada de “copy-paste”. Nos despedimos diciéndote que en la próxima entrega agregaremos a este diseño la posibilidad de conectarse a un bus RS485 que te permitirá trabajar al termómetro en forma remota para seguir la evolución del funcionamiento a cientos de metros, a través de tu ordenador.
En el mercado encontrarás mucha variedad de circuitos integrados que funcionan como termómetros vía bus I2C y que tal vez sean de mayor exactitud al utilizado en este artículo. Un ejemplo claro es el LM92, de National Semiconductor. La implementación del STCN75 ha sido a modo de ejemplo y para orientarte sobre algunas de las posibilidades y facilidades de uso que brinda el protocolo I2C en los microcontroladores.
Trabajo de los Lectores: Aquí pueden ver el trabajo desarrollado por el lector y amigo Yesbond, que generosamente ha realizado un video donde nos muestra su trabajo con un sensor de temperatura TMP100. Este sensor también trabaja por bus I2C como el STCN75 empleado en el artículo. ¡Felicitaciones Yesbond!,¡GRACIAS por mostrarnos tu trabajo!