|
|
|
|
|
|
Microcontroladores: Termómetro I2C |
|
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, l. |
|
|
a 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 lameteorologíaEl 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. |
Partes que componen el proyecto |
|
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. |
|
Servomotores |
Esquema de conexiones del STCN75 |
|
LCD
Serial I2C |
Fuente Irrompible |
Monitor de tensión
de línea |
Robot
Siguelíneas |
Aprender a
soldar |
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. |
|
Energía Solar |
Aprendé a
reparar DVD, cambiar su pantalla de inicio, reparar su firmware y a
conocer más de ésta nueva unidad multimedia del hogar |
Diagrama en bloques del STCN75 |
|
Otra maravilla de la tecnología y el
avance en capacidad de almacenamiento de información y calidad de
imagen. |
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 |
|
El
mejor sistema de radiogoniometría para radioaficionados está
a tu alcance. Constrúyelo!
La HDTV llega, no llega, el formato
será japonés, americano, europeo ? La TV digital no termina nunca de
entrar en Argentina |
Comparativa de dimensiones y vista del
IC listo para ser soldado en la placa |
|
|
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. |
|
Diagrama esquemático del circuito
inicial |
|
|
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. |
|
|
|
|
|
Pantalla de instalación de Protón+ Lite |
|
|
El programa que utilizaremos es el Protón+ en su versión LITE, el cual
posee ciertas limitaciones de uso 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. |
|
|
Encabezado y elección del
microcontrolador a utilizar |
|
|
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 |
|
Declaraciones iniciales dentro del
firmware |
|
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. |
|
|
Lazo principal del programa |
|
Con el monitor
cardíaco que te presentamos puedes controlar, escuchar y ver tu ritmo
cardíaco.
|
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. |
|
|
Termómetro en pleno funcionamiento |
|
|
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. |
|
Monitor Cardíaco |
Diseño de impreso utilizado para el sensor
Importante: Si lo que encuentras
aquí te resulta útil, ayúdanos a mantener
este sitio. Cualquier donación es bienvenida. Tu apoyo nos
permitirá acceder a nuevos materiales y a montajes más
interesantes y útiles. Gracias por ayudarnos a hacer
Servisystem cada día mejor. Tu ayuda será muy importante
para nosotros. Gracias. |
|
|
|
Mi primer
receptor: TDA7000 |
ON-OFF de un
toque |
Montajes |
Capacímetro
Digital |
|
|
|
|
Servisystem
|
|
|
|
|
|
|
|