<img src="https://queue.simpleanalyticscdn.com/noscript.gif?collect-dnt=true" alt="" referrerpolicy="-when-downgrade"> Microcontroladores: Termómetro I2C
NeoTeo
Mario

Microcontroladores: Termómetro I2C

Microcontroladores: Termómetro I2C

Descubre cómo el STCN75, con su innovadora tecnología I2C y precisión digital, transforma la medición de temperaturas. ¡Sumérgete en este proyecto apasionante y prepárate para ver la electrónica como nunca antes lo imaginaste!

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.

Microcontroladores: Termómetro I2C
Partes que componen el proyecto

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.

Microcontroladores: Termómetro I2C
Esquema de conexiones del STCN75

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.

Microcontroladores: Termómetro I2C
Diagrama en bloques 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 mismo te permiten leer la temperatura sin necesidad de escribir previamente ningún registro, situación que facilita enormemente 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. 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í.

Microcontroladores: Termómetro I2C
Comparativa de dimensiones y vista del IC listo para ser soldado en la placa

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 ite, en su versión gratuita, cristales de 4 o 20 Mhz.

Microcontroladores: Termómetro I2C
Diagrama esquemático del circuito inicial

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 Programmer). A través de este conector 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 preservar la integridad de los componentes. 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 óptimo 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 PIC cumpla la misión imaginada por el desarrollador, da lo mismo que haya sido escrito en cualquier lenguaje. Funciona y posee todas las prestaciones imaginadas: eso es lo que verdaderamente vale.

Microcontroladores: Termómetro I2C
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 en su versión de demostración, que puedes ver en el sitio de descarga del mismo. Estamos trabajando para conseguir la versión completa del programa y poder desarrollar trabajos con conectividad USB que integren instrumentos, dataloggers y toda la interacción entre diseño y ordenador. Por ahora, el firmware se compilará sin inconvenientes gracias a Protón+ LITE, aunque para USB será necesaria la versión completa. ¿Ustedes qué opinan?

¿Cómo se arma un programa para cargar dentro del PIC?

Protón+ posee una facilidad de uso irable para quienes se inician en el mundo de los microcontroladores. Sin embargo, como todo lenguaje de programación, requiere de una estructura secuencial adecuada para ser interpretado y compilado correctamente. Lo primero que deberás determinar es el dispositivo a utilizar y la frecuencia del cristal que usará tu diseño.

Microcontroladores: Termómetro I2C
Encabezado y elección del microcontrolador a utilizar

Observa que todo lo que se inicie con un apóstrofo será tratado como comentario en el programa y no se contabilizará al compilar, afectando así el número de líneas permitidas en la versión LITE de Protón+.

Una vez elegido el modelo del microcontrolador y el valor de frecuencia del cristal (20 Mhz), continúa definiendo los parámetros de los periféricos a utilizar. Luego, configura el registro que maneja los comparadores internos mediante el nombre CMCON; se le asigna el valor indicado en el datasheet para su desconexión. Inmediatamente después, indicarás que trabajarás en modo totalmente digital (ALL_DIGITAL = TRUE). Seguidamente, definirás la conexión del LCD mediante la indicación del pin del microcontrolador al que irá conectado el terminal DT, y lo mismo para los terminales RS y EN. Finalmente, en la configuración del LCD se especifica que se usará la interfaz de 4 bits, la cantidad de renglones a utilizar (LINES) y el tipo de display (0 para alfanumérico y 1 para gráfico).

Microcontroladores: Termómetro I2C
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, asignarás a la etiqueta “LEER” el valor que deberá llamar al STCN75. El número asignado en esta etiqueta le indicará al microcontrolador a qué dispositivo llamar en el bus, ya que pueden coexistir varios dispositivos I2C conectados en paralelo.

Por último, antes de definir el trabajo del microcontrolador, le indicarás al sistema los nombres y tamaños de las variables en las que el firmware irá depositando sus datos conforme los necesite. Esto queda explicado en el HELP del programa. Por ejemplo, la variable WORD se puede desdoblar en dos variables BYTE (LOW y HIGH), a las cuales se les reasignarán 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 se inicia el trabajo con la pantalla limpia (CLS). A continuación, se cargan valores específicos en algunas variables para asegurar un inicio válido.

El bucle principal del firmware

Aquí se desarrolla la acción: la interacción entre el microcontrolador y el mundo exterior, en este caso a través del sensor de temperatura y el relé RL1.

Microcontroladores: Termómetro I2C
Lazo principal del programa

En la etiqueta INICIO comienza el lazo principal del programa que te permitirá leer la temperatura ambiente. Según los parámetros programados para temperaturas mínimas y máximas, se activará o desactivará el relé RL1, que en este caso conecta un sistema de calefacción. El proceso inicia abriendo el bus con la instrucción BSTART, y tras la comunicación mediante BUSIN para leer el registro 0 del sensor, se cierra el o I2C con la instrucción BSTOP.

Más atrás en el texto, cuando se definieron las variables, asignaste a la variable B el valor leído, que se subdivide en C = B.HIGHBYTE y D = B.LOWBYTE. Lo cargado en C determina el valor entero de la temperatura, y D indica si la medición incluye 5 décimas adicionales, según la resolución del sensor.

Las siguientes instrucciones imprimen en el LCD los valores obtenidos: en el primer renglón se coloca la palabra TEMPERATURA centrada, y en el segundo, tras dejar cinco espacios, se muestra la variable A (que en temperaturas sobre cero es un carácter vacío, o un signo menos si la temperatura es negativa), seguida del valor de C, una coma, el carácter F y el símbolo 158 (que representa el signo “°”) para indicar grados centígrados.

La última parte del programa incluye comparativas con valores constantes que determinan la activación o desactivación del relé. Si C es menor a 20, se activa la calefacción; si es mayor a 26, se apaga. Esto crea una ventana lógica que garantiza el encendido de la calefacción si la temperatura desciende de 20°C, y su apagado al superarse los 26°C.

Con estos ajustes, incluso puedes modificar los valores para encender un aire acondicionado o mantener estable la temperatura de un terrario, activando un calefactor. Finalmente, el programa termina con la instrucción END.

Microcontroladores: Termómetro I2C
Termómetro en pleno funcionamiento

Conclusiones finales

Por supuesto que no incluimos aquí el listado del programa, a pesar de ser pequeño, pero te dejamos las imágenes para que lo escribas y analices lo que haces y por qué lo haces, favoreciendo un aprendizaje profundo y práctico. Nada de ‘copy-paste’.

En el mercado encontrarás una gran variedad de circuitos integrados que funcionan como termómetros vía bus I2C y que podrían ofrecer mayor exactitud que el utilizado en este artículo. Un ejemplo claro es el LM92, de National Semiconductor. La implementación del STCN75 ha servido como ejemplo para orientarte sobre las posibilidades y facilidades del protocolo I2C en microcontroladores.

Microcontroladores: Termómetro I2C
Diseño de impreso utilizado para el sensor

Trabajo de los Lectores: Aquí pueden ver el trabajo desarrollado por el lector y amigo Yesbond, que generosamente ha realizado un video en el que muestra su experiencia trabajando con un sensor de temperatura TMP100. Este sensor, al igual que el STCN75, opera por bus I2C. ¡Felicitaciones Yesbond!, ¡GRACIAS por mostrarnos tu trabajo!

Etiquetas

#Tutoriales
avatar

Excelente nota, te sobraste la verdad.
Aunque prefiero programar en assembler, en el mismisimo MPlab, es más eficiente; aunque si no tienes idea y no quieres darte dolores de cabeza mientras aprendes pues programar en PIC-C o programas parecidos pues se vale.

Anteriormente en la universidad tocó hacer el sensado de la velocidad de un motor y visualización en la PC (usamos Visual C para ello), pero fue con RS-232, ¿podrías explicar la diferencia con el RS-485 que mencionas aquí?

Gracias

Y felicitaciones por excelente página a todo el grupo de NeoTeo

avatar
avatar

si supiera algo mas del tema... podria atreverme a ensamblar uno. Me encanta todo esto, sobre todo lo de la comparativa de domensiones con una moneda de cincuenta centavos jajaja que grande!

saludos!

avatar
avatar

Muy interesante, adoro estos tutoriales, pero quisiera saber un par de cosas :
1_ Que temperatura soporta el IC
2_ cual es el precio del IC y del circuito en general (en pesos argentinos si es posible )

avatar
avatar

Hace tiempo que no encuentro un sensor o algo parecido para medir saturacion de Monoxido de carbono o algo similar, como para saber si hay algun escape de gas en la casa.

avatar
avatar

Cada quien tiene su lenguaje de programacion en la hora de usar, PIC a mi me enseñaron en la universidad el ensamblador mediante MPLAB.
PERO prefiero el PIC-C de ccs, sobre el articulo es muy bueno yo creía que I²C era solo entre PIC pero ya aprendí algo muy interesante hoy gracias señor editor ^_^

avatar
avatar

Hola!

Excelente como siempre.

A todo esto se me plantea una pregunta... cómo se cortan las placas de cobre para hacer el circuito integrado? Porque si se hace con sierra y tal debe hacer mucho polvillo y ese polvillo no debe ser muy bueno para los pulmones no?

avatar
avatar

no te hagas problema por el polvillo es inofensivo :P , la mejor forma de hacerlo es marcar donde quieres cortar y con una regla pasar un cutter por ambos lados del pcb (a la misma altura por supuesto) luego lo alineas con un borde y haces presión para quebrarlo.
queda perfecto saludos!

avatar
avatar

Buen Dia Mario:
Exclente el articulo, aparte de la gran cantidad de aplicaciones que puede tener este proyecto, sino porque muestras avances que en ocasiones son dificiles de saber; soy de colombia, y aca todavia usamos el pic16f84A, pero con este articulos nos das a conocer nuevas cosas, ademas del programador Proton+, que es un hit, la verdad veo que el codigo es muy sencillo, yo habia hecho un proyecto igual, pero el programa en asembler lo hice en MPlab pero es muy complicado y extenso y cualquier error es dificil de encontrar, asi que te agradezco mucho por estos articulos tan buenos, y pues estoy ansioso del proyecto de comunicacion 485 y de muchos mas proyectos.
Un saludo y felicitaciones.

avatar
avatar

HOLA ALGUIEN PUEDE AYUDARME A PROGRAMAR PIC EN BASIC

avatar
avatar

Muy buen articulo aca aprendo de todo grasias.
Tengo una pregunta fuera del tema ¿NEOTEO de que pais es?

avatar
avatar

eso me dije la primera vez que visite este maravilloso sitio, y si deve ser de España por los acentos que utilizan en los textos, el del video no lo noto tanto.

avatar
avatar

hola y felises fiestas
si me podrian ayudar para hacer un termometro de baja temperaturas de 70k

avatar
avatar

hola , yo uso proton y es muy potente, pero en este ejemplo ocupas el 16f628a pero por los archivos que tiene proton no esta el 628a como bootloader si lo tienes tu lo podrias pasar
[email protected]

avatar
avatar

Muy buen artículo.

Mantegan ese excelente trabajo!

avatar
avatar

Estos son los artículos más completos que encuentro aquí

avatar
avatar

ke ta Mario.
Me encanto este proyecto y la verdad es ke casi tengo todo para armarlo, solo que me es imposible adquirir el sensor STCN75, pues ya lo busque por todos lados y nada de nada, me encantaria ke existiece un sensor similar, yo cuento con lm35 y DS18B20 de Dallas el cual te otorga una salida digital, kisiera saber si me podrias ayudar?

Excelente pagina, y lo mejor de todo son estos tutoriales.
Saludos desde Mexico.

avatar
avatar

Hola, donde se consigue el sensor aqui en Buenos Aires, Argentina?
Gracias

avatar
avatar

Una pagina interesante y muy bien explicada, espero que puedan crecer mas y conseguir el programa completo, yo estoy empezando con todo esto y particularmente me cuesta mucho pasar de ensamblador a c, pero sigo intentando, este articulo estuvo muy completo, gracias.

avatar

Debes iniciar sesión para publicar un comentario.