Programar sistema horario 12/24 (assembler)

Programación de un reloj LED, para que pueda mostrar la hora en cualquier formato (12h-24h). Esta modificación se realiza en un ‘Reloj-Fecha-Cronómetro-Temperatura‘ con 4 dígitos de 7 segmentos LED, de control serie. El controlador de este reloj está construido a partir del microprocesaror AT89S52, con encapsulado de 44 pines (SMD).

Sistema horario

El sistema horario de 24 horas es una convención de medición del tiempo, en la que el día se contabiliza de medianoche a medianoche. Con formato de 24 horas, las horas se empiezan a contar a partir de la medianoche, y se presenta con los números comprendidos entre el 0 y 23.

Sistema horario de 12/24 horas

El sistema de 24 horas es el más utilizado en la actualidad, y el sistema de 12 horas se utiliza principalmente para la comunicación oral, porque es más intuitivo. A pesar  de que el sistema de 24 horas es el más usado en comunicaciones escritas, en algunos países lo denominan como horario militar o astronómico, y prefieren realizar la presentación de la hora utilizando el sistema tradicional de 12 horas.

Esta actualización se realiza en el Reloj SMD que mostré anteriormente:

Construye un Reloj SMD

Planteamiento al programar el reloj

Cuando se programa el firmware de un reloj, es importante saber si el display de presentación es multiplexado o no, así como el valor de tiempo mínimo a mostrar.

  • Cuando el display es multiplexado, el microprocesador tiene que enviar la información con una cadencia mucho más rápida,  siempre superior a la persistencia del ojo humano. Si se quiere evitar el efecto de parpadeo, la frecuencia de refresco del display debería ser como mínimo de 50 Hz.
  • La cadencia de lectura de la información horaria debe ser igual o superior al valor del tiempo mínimo que se quiera mostrar en el display. Si el reloj muestra décimas de segundos, el microprocesador tendría que leer la información del chip RTC con una cadencia mínima de 1/10 segundos, cada 100 mSeg.

Funcionamiento del reloj

A pesar de que el Reloj SMD no es multiplexado, porque la presentación se realiza enviando los datos en serie (registro de desplazamiento), lo he programado con una frecuencia de refresco muy alta.

CPU: Reloj SERIE

 

Display: Reloj SERIE

Esto lo hice así, porque utilicé la estructura de programa del reloj de esfera rotante FC-209, el cuál si era multiplexado.

Reloj LED con 2 alarmas

Antes de presentar la hora en el display por primera vez, el microprocesador tiene que leer la información del chip RTC (DS1302). Y si el reloj muestra segundos, la lectura se debería hacer que como mínimo una vez por segundo.

Frecuencia de refresco del display

Aprovechando las prestaciones y velocidad del microprocesador que he utilizado, decidí insertar la rutina de lectura del chip DS1302 (RTC) dentro de la rutina de refresco del display. Como se puede ver en la gráfica anterior,  la lectura se está haciendo con una cadencia de 926 veces por segundo.

Actualización del firmware

La nueva actualización del Reloj SMD, la puedes descargar de forma gratuita desde el siguiente enlace:

J_RPM_v2_RELOJ_SERIE.HEX

Con esta actualización es posible configurar el sistema de presentación horaria en el display, pudiendo elegir el sistema de 12/24 horas.  Para incorporar esta función, he utilizado el método más sencillo de hacerlo: Internamente todo funciona en modo 24 horas, y dependiendo del modo en el que se deba mostrar la hora, el programa pasará o no a través de las rutinas de conversión a formato de 12 horas. Y esto lo hará sólo  antes de enviar la hora al display, porque los menús de configuración siempre mostrarán la hora utilizando el formato de 24 horas. Así no será necesario modificar los menús de configuración, ni cambiar el sistema horario del chip DS1302 (RTC). A continuación os muestro el código que he añadido en esta actualización.

Rutinas de programación en assembler

Funcionamiento de la subrutina: ValAB

Funcionamiento de la rutina Val_AB

Menús de configuración

Los menús de configuración de esta versión (v2), no cambian con respecto a la  versión anterior (v1). En esta versión aparece un nuevo menú, y es para configurar el sistema de presentación horaria (12/24) del reloj.

Menús de configuración del reloj

 

Construye un Reloj SMD

Fabricación de un Reloj-Cronómetro-Temperatura, encadenando 4 módulos SMD de 7 segmentos con control serie. El controlador de este reloj está construido a partir del micro controlador AT89S52, con encapsulado TQFP de 44 pines (SMD).

Hora en el display

ESQUEMAS

CPU: Reloj SERIE

 

Display: Reloj SERIE

Módulo RTC: DS1302

Las comunicaciones entre el micro-controlador y el chip de reloj DS1302 se realizan mediante 3 hilos:

  1. Reloj (SCLK)
  2. Entrada/Salida de datos (I/O)
  3. Habilitación (CE)
Módulo RTC: DS1302
Módulo RTC: DS1302

El módulo RTC ya incluye el cristal de cuarzo que necesita el chip DS1302, y una pila de 3V para mantener sus datos cuando falta la alimentación. La conexión entre este módulo y la CPU es de 5 hilos, 2 de la alimentación y 3 de control.

Comunicaciones con DS1302
Comunicaciones con DS1302

Sensor de temperatura: DS18B20

El control de este sensor de temperatura es bidireccional y se realiza mediante un sólo pin, así su encapsulado sólo tiene 3 pines: VCC, GND y Datos.

Sensor: DS18B20
Sensor: DS18B20

El DS18B20 se puede comprar con encapsulado normal, su aspecto es el de un transistor, o ya montado dentro de una cápsula de acero inoxidable. El encapsulado en acero inoxidable permite sumergir el sensor en líquidos, y también es muy aconsejable para utilizarlo en el exterior.

El chip DS18B20 es un sensor temperatura digital,  su resolución es configurable entre 9 y 12 bits. Por defecto, de fábrica está configurado con 12 bits. A máxima resolución, sus últimos 4 bits se corresponden con las lecturas decimales de: 0,5°/ 0,25° / 0,125° / 0,0625°.  Puedes ver más detalles técnicos de este sensor en el siguiente artículo:

Firmware Reloj LED #2 (Temperatura, Hora de Verano)

FUENTE DE ALIMENTACIÓN

Para alimentar este reloj se necesita una fuente de alimentación de 12 VDC, con una corriente mínima de 200 mA. La solución más barata y eficaz, es incluir dentro de la caja del reloj una pequeña fuente de alimentación conmutada de 12V / 400 mA.

Fuente conmutada 12V

CONFIGURACIÓN

Para cambiar los datos de fecha, hora, cronómetro y el resto de parámetros de configuración, se utilizan dos pulsadores:

  1. MODE
  2. PLUS

Para modificar los datos del reloj, seguir el siguiente diagrama de configuración:

Configuración RELOJ SERIE

SELECCIONAR MODO: RELOJ/CRONÓMETRO

El modo de funcionamiento RELOJ/CRONÓMETRO se determina durante la fase de arranque, mientras se está mostrando en el display  un mensaje de texto rotando, en la que se muestra la versión del firmware. Si no se toca ningún pulsador, el modo de funcionamiento será: RELOJ. Para cambiar a modo CRONÓMETRO en cualquier momento, seguir los siguientes pasos:

  • Pulsar los dos botones a la vez: RESET
  • Cuando aparezca el mensaje rotante, mantener pulsado el botón 1 (MODE)

Cronómetro en el display

Una vez que que hayamos entrado en el modo CRONÓMETRO, ya podremos configurar sus parámetros de funcionamiento. Estos valores se guardarán en el chip de memoria del reloj (DS1302), y estos serán los nuevos valores de arranque del cronómetro. Al igual que sucede con los parámetros del reloj, tendremos que tener conectada la pila de tampón en el chip, si no queremos perder todos los datos cuando falte la alimentación.

Detalles de la presentación del Display

Cuando se está funcionando en modo RELOJ, es posible seleccionar entre 3 tipos de presentación. La información que muestra el display se cambia mediante una breve pulsación del botón 2 (PLUS):

  1. Hora / (*) Alterno: Hora y Temperatura
  2. Temperatura
  3. Alterno: Hora, Fecha y Temperatura

(*) El modo alterno de la presentación 1ª, se muestra en caso de que se active la alarma de temperatura en el menú de configuración. En caso contrario, la presentación 1ª mostrará la hora de forma permanente.

Temperatura en el display

Cuando se active el modo de presentación alterno, la temperatura se mostrará de forma síncrona con el reloj, y lo hará cada 5 segundos. Entre el segundo 5 y el 55 de cada minuto, nunca se mostrará en el segundo ‘0’ de cada minuto. La temperatura sólo aparecerá durante un segundo de cada 5, en total 11 veces en cada minuto.

Alarma de Temperatura

La lectura del sensor de Temperatura se realiza cada 10 segundos. De manera que entre dos presentaciones sucesivas de 5 segundos, sólo una de las lecturas será en tiempo real. Cuando está utilizando la presentación 1ª en modo alterno, los segundos acabados en ‘0’ mostrarán la temperatura leída anteriormente, excepto en el segundo ‘0’ de cada minuto que no se muestra. En el caso de que la temperatura sobrepasara alguno de los dos umbrales de alarma, el aviso acústico se realizará cuando el valor acaba de ser leído. Es decir, la alarma de temperatura sólo sonaría en los segundos acabados en ‘5’.

Alarmas horarias

El reloj permite configurar 2 alarmas horarias, sin prioridad entre ellas pero siguiendo este criterio: Cuando una de las dos alarmas se dispara, mientras permanezca en su periodo activo, la otra alarma nunca podrá dispararse. 

Las dos alarmas horarias pueden valer para los 7 días de la semana, o estar limitadas a los 5 días laborables, quedando inactivas todos los Sábados y Domingos. En modo RELOJ, el punto decimal del dígito de la derecha (esquina inferior derecha del display) esta asociado a la alarma horaria. Las alarmas horarias pueden configurarse para que suenen una sola vez (1 minuto si no se silencia antes) o con repeticiones. Las repeticiones se realizarán cada 5 segundos. Para silenciar el sonido de una alarma, realizar una breve pulsación en el botón 2 (PLUS). Si después de sonar una alarma se quieren anular todas sus repeticiones sin cambiar la configuración del reloj, es necesario pulsar los dos botones a la vez (RESET).

Estados posibles del LED indicador de alarma horaria:

  • APAGADO: No existe ninguna alarma horaria en las próximas 24 horas
  • PARPADEANDO: Existe alguna alarma horaria dentro de las próximas 24 horas.
  • FIJO: Alarma ACTIVA, sonando o dentro del periodo de repetición.

Hora: Verano/Invierno

En algunos países existen dos tipos horarios:

  1. Horario estándar, el que corresponde con el huso horario (Horario de invierno).
  2. Horario de verano:

El cambio de hora se aplica una vez al año, haciendo que del horario estándar (o de invierno) se pase al horario de verano. Aunque la primera vez que se aplicó este cambio de hora fue durante la Primera Guerra Mundial, dejo de aplicarse hasta la crisis del petróleo de 1973. El objetivo es el de aprovechar mejor la luz solar, consumiendo menos electricidad.

Cambios horarios (Invierno/Verano)
Cambios horarios (Invierno/Verano)

HORARIO DE VERANO

Último domingo de MARZO:  A las 2:00 AM  se adelanta a las 3:00 AM

… se adelante 1 hora el reloj

HORARIO DE INVIERNO

Último domingo de OCTUBRE: A las 3:00 AM  se atrasa a las 2:00 AM

… se atrasa 1 hora el reloj

FIRMWARE

El firmware de este reloj se programa una vez montado el micro controlador (AT89S52) en su circuito impreso, a través de su interface de programación serie ICSP. Lo ideal sería utilizar un programador que tuviera dicho interface, pero si no lo tienes, puedes hacerlo con ARDUINO.

Programador ICSP con ARDUINO

El archivo que necesitas para programar este reloj (firmware), lo puedes descargar de forma gratuita desde el siguiente enlace:

J_RPM_v1_RELOJ_SERIE.HEX

FABRICAR LA CAJA CON UNA CNC

Archivos para cortar la madera tipo DM de 10 mm, en una CNC, y fabricar la caja de este reloj:

Caja_CNC_RELOJ_.zip

Piezas cortadas para montar la caja

CIRCUITOS IMPRESOS (PCB)

Archivos GERBER para fabricar el PCB de la CPU:

PCB_CPU_RELOJ.zip

PCB: CPU del Reloj SERIE

Archivos GERBER para fabricar el PCB de la CPU (v2):

PCB_CPU2.zip

PCB: CPU del Reloj SERIE (Modificada)

En esta versión se corrige el tamaño de los taladros, se incluye la posibilidad de utilizar dos tipos de conector en sus salidas y se añade una toma auxiliar de +5V

Archivos GERBER para fabricar el PCB del Display ( 1 dígito de 7 segmentos):

PCB_Display_RELOJ.zip

PCB: Display 7 segmentos serie

Si quieres ver los detalles de fabricación, configuración y puesta en marcha de este reloj, echa un vistazo al siguiente video:

 

M328-Transistor Tester

Montaje, calibración y pruebas del kit: M328 Transistor Tester, comprobador de componentes electrónicos. Este comprobador está basado en el micro controlador ATMEGA328P, el mismo que utiliza la placa de desarrollo ARDUINO Uno. El firmware de este comprobador (v1.12k de 2017) ya viene grabado y el chip protegido contra lectura, de manera que no es posible realizar modificaciones. Sin embargo, existe mucha información en Internet, incluso algunos códigos fuente válidos para este micro controlador.

Kit: M328 Transistor Tester

Proceso de montaje

Para montar este kit es conveniente tener cierta destreza con el soldador, y disponer de las herramientas adecuadas. En general, el montaje no es complicado, porque todos los valores de los componentes están rotulados en la serigrafía del circuito impreso. La única dificultad sería soldar los 3 componentes de montaje superficial (SMD) que incluye este kit.

M328 - SMD

Para facilitar el montaje, es conveniente montar los componentes más pequeños en primer lugar (SMD), y siguiendo por los de altura más baja (resistencias). También hay que prestar mucha atención a la hora de identificar las resistencias, porque están identificadas siguiendo el código de colores de 5 bandas y es fácil confundir algún valor por otro. En caso de dudas, lo mejor es medir los valores de las resistencias con un polímetro, para estar seguros antes de soldarlas.

Código de colores de las resistencias

Calibración

Una vez montado el kit, lo primero que hay que hacer es calibrar el equipo. A la calibración se accede mediante el menú Selftest del comprobador. El proceso de calibración es muy rápido y sencillo. Antes de entrar en el menú, tenemos que preparar 2 trozos de cable para unir las 3 entradas, y un condensador mayor de 100nF y menor de 20uF.  La calibración consiste en 3 pasos:

  • Calibrar el cero del medidor, uniendo las 3 entradas del medidor con 2 cables cortos. En este punto el equipo calibra la resistencia 0 ohmios en las 3 entradas del medidor.
  • Calibrar el punto ‘abierto’ del comprobador, con el equipo encendido sin componentes (quitando los cables del punto anterior). En este momento se calibra la capacidad 0pF de las 3 entradas, entre otras cosas.
  • Calibrar la escala del capacímetro. En este punto se necesita conectar un condensador mayor de 100nF y menor de 20uF, entre las entradas 1 y 3 del comprobador.

Se pueden ver todos los detalles de calibración en el video #1.

Funciones especiales

Aparte de la detección y comprobación de la mayoría de los componentes electrónicos (resistencias, condensadores, bobinas, diodos, transistores, etc), este comprobador dispone de algunas funciones especiales, por ejemplo:

  • Comprobar y medir el sensor de Temperatura DS18B20.
  • M328 - DS18B20
  • Comprobar y medir el sensor de Temperatura/Humedad DHT11.
  • M328 - DHT11
  • Decodificar las señales IR de un mando a distancia (menú IR_Decoder), mediante la inserción en sus terminales de un chip receptor IR. El comprobador muestra en la pantalla el protocolo y  todos los datos que se transmiten al pulsar cada una de las teclas de un mando a distancia IR (4 Bytes).
  • M328 - IR
  • También es posible configurar en el menú IR_Encoder el código de una tecla, y transmitirla mediante la conexión de un diodo LED IR en los terminales de salida PWM del comprobador.
  • Generar una señal PWM de 10 bit, pudiendo configurar el porcentaje del ancho de impulso entre 1 y 99%. El nivel de salida es  5Vpp, y la frecuencia 7812,5 Hz.
  • Generar una serie de frecuencias predefinidas, entre 1 Hz y 20 MHz. La forma de onda es cuadrada y  tiene un nivel de 5Vpp.
  • Medir frecuencias comprendidas entre 1Hz y 3,9MHz, con un nivel entre 1 y 5 Vpp.
  • M328 - Frecuencias
  • Medir la Resistencia Serie Equivalente (ESR) de condensadores electrolíticos, sin la necesidad de tenerlos que desconectar del circuito impreso.
  • M328 - ESR

Todos los detalles de montaje, calibración y pruebas se muestran en la siguiente serie de 3 videos:

 

Termostato de precisión #2

Construcción de un termostato digital, para controlar temperaturas con una precisión de 0,1ºC. Este termostato utiliza el sensor DS18B20, está controlado con el microprocesador AT89S52, y permite regular temperaturas entre -40 y +100ºC. También es posible controlar de forma simultánea los dos circuitos de un climatizador, el de frío y calor. Este termostato podría utilizarse como climatizador en un automóvil, controlar la temperatura de un edificio, la del agua de una piscina, incluso la de una incubadora. En esta segunda parte, se realizan los ajustes del termostato y se comprueba su funcionamiento.

CPU del termostato

La CPU del termostato la he montado en un circuito impreso de tipo universal. Para facilitar el montaje, todos los periféricos utilizan conectores. Se utilizan clemas de conexión para la entrada de alimentación (5 VDC), la conexión del sensor de temperatura DS18B20, los dos pulsadores y las dos salidas de control hacia los relés. Para el display LCD se utiliza un conector de 16 pines. El led de actividad utiliza la conexión de 2 pines macho y la otra conexión de 6 pines macho es para programar el micro controlador AT89S52 sin tener que extraerlo del circuito impreso, conexión ICSP.

CPU del Termostato

Firmware

Antes de conectar el circuito a la alimentación, es necesario programar el micro controlador AT89S52. El archivo hexadecimal (firmware) lo puedes descargar de forma gratuita desde el siguiente enlace:

Termostato de precisión (v1.00)

Si no dispones de un programador, podrías utilizar Arduino:

Programador ICSP con ARDUINO

Ajustes y calibración

El único ajuste de hardware que se necesita hacer es el del contraste del display, y se hace moviendo el ajuste del potenciómetro hasta conseguir un contraste óptimo. Luego se debería fijar la temperatura de trabajo del termostato, utilizando los dos pulsadores del frontal. El termostato permite fijar valores de temperatura entre -39,9 y +99,9ºC, con una precisión de 0,1ºC.  Al menú de configuración se accede pulsando el botón SET, y mediante el otro pulsador se pueden recorrer todos los valores posibles. Para cambiar de posición el cursor y guardar el valor anterior, se pulsa nuevamente el botón SET. A continuación se accede al menú de calibración del sensor de temperatura DS18B20.  Desde este menú es posible modificar la temperatura medida por el sensor con intervalos de 1ºC. Este ajuste permite seleccionar valores offset comprendidos entre -5 y +4ºC.   Para realizar esta calibración, sería conveniente utilizar un termómetro de precisión.

Calibrado del sensor DS18B20

Pruebas de funcionamiento

Para comprobar el correcto funcionamiento del termostato he simulado su conexión en una incubadora, fijando la temperatura de control  en 24,0ºC. El sistema de calefacción (para estas pruebas) consiste en una bombilla de filamento de 40W, conectada a 230 VAC a través del circuito 2 del termostato. El sistema de refrigeración es un pequeño ventilador de 12 VDC, controlado por el circuito 1 del termostato. Dependiendo de la distancia que exista entre los sistemas frío/calor y el termostato, es posible que se generen ciclos de histéresis: sobrepasando levemente la temperatura cuando esté conectada la bombilla, o disminuyendo cuando esté conectado el ventilador. Estos ciclos de conexión/desconexión tendrán un intervalo mínimo de 5 segundos, ya que este es el intervalo de medida y refresco del termostato.

Prueba del termostato

A continuación se prueba el sensor a temperaturas límites, con el fin de comprobar el correcto funcionamiento del circuito. El termostato guarda los valores de temperatura máxima-mínima, y también los puede mostrar en la línea superior del display LCD. Mediante la pulsación del botón verde, se alternan las dos presentaciones posibles en la línea superior del display, la presentación inferior no cambia. Los valores de máxima-mínima se reinician cada vez que se entra en el menú de configuración, o cuando baja la alimentación del pin 40 (VCC) del micro controlador por debajo de 2V. Para evitar la pérdida de los valores de configuración mientras está funcionando el termostato, es necesario mantener conectada la batería de 3,6 V NiMH que se incluye en el circuito. La conexión se realiza mediante un puente de conexión (jumper), o un pequeño interruptor deslizante con acceso desde el exterior.

Temperaturas máxima y mínima

En caso de no utilizar el termostato, es conveniente desconectar la batería del circuito.

Termostato de precisión #1

Construcción de un termostato digital, para controlar temperaturas con una precisión de 0,1ºC. Este termostato utiliza el sensor DS18B20, está controlado con el microprocesador AT89S52, y permite regular temperaturas entre -40 y +100ºC. También es posible controlar de forma simultánea los dos circuitos de un climatizador, el de frío y calor. Este termostato podría utilizarse como climatizador en un automóvil, controlar la temperatura de un edificio, la del agua de una piscina, incluso la de una incubadora. En esta primera parte, se muestra el diseño y construcción del termostato.

Descripción de funcionamiento

Este termostato permite calibrar su sensor de temperatura (DS18B20) en saltos de 1ºC, permitiendo un Offset entre -5 y +4ºC sobre el valor medido. Este valor de calibrado, junto con el valor de temperatura de referencia del termostato, también configurable mediante los pulsadores, son almacenados en la memoria RAM del propio micro controlador (AT89S52). Para evitar la pérdida de dichos valores en caso de perder la alimentación mientras está funcionando, el circuito incorpora una pequeña batería recargable de 3,6V Ni-MH.

Esquema: Termostato de precisión

Salidas de control

El termostato permite controlar los dos circuitos de  un climatizador de forma simultánea, el circuito de frío y el de calor. El micro controlador dispone de 2 salidas con estado lógico ‘0’ y otras 2 con estado lógico ‘1’. De esta forma es posible conectar cualquier driver en sus salidas. En este circuito he utilizado un módulo compuesto por 2 relés de 5V, de disparo con estado lógico ‘0’ y entradas optoacopladas (ver imagen).

2 Relay Module

Power Down Mode

La activación del ‘modo apagado’ (Power Down) del micro controlador permite minimizar al máximo su consumo. La detección de dicha caída de tensión se realiza mediante la lectura del nivel lógico 1/0 en el pin 39 (P0.0) del micro controlador. A pesar de que se podría simplificar el circuito intercalando una resistencia entre dicho pin (P0.0) y la entrada +5V, es mucho más eficaz entregar un nivel lógico en su entrada fijando su umbral de decisión. El circuito detector del umbral de apagado, está fijado por el valor del diodo Zener montado entre la base del transistor BC557 y masa (ver el esquema). En lugar del diodo Zener, puede utilizarse un diodo LED que tenga un umbral de encendido próximo a 3V.

A pesar de que el consumo del micro controlador se reduce bastante, es conveniente conectar la batería únicamente cuando el termostato esté en uso. De otra manera, la batería acabaría por descargarse. La finalidad de la batería es la de mantener los valores de configuración mientras el termostato está funcionando, y no cuando esté almacenado sin uso. En el esquema podemos ver que la desconexión de la batería se realiza mediante la extracción de un puente (jumper) entre el polo negativo de la batería  y masa. Este puente puede sustituirse por un pequeño interruptor deslizante, para poder accionarlo sin la necesidad de tener que abrir la caja.

Circuito impreso

Para la realización de este termostato he utilizado un circuito impreso de tipo universal. Es cierto que el acabado queda mucho mejor si se monta en un circuito impreso hecho a medida. Sin embargo, muchos aficionados a la electrónica son reacios a ‘perder el tiempo’ en fabricar un circuito impreso, y prefieren utilizar placas de tipo universal. Además, la fiabilidad del circuito impreso sólo depende del cuidado que se ponga durante el montaje y soldadura de sus componentes… el aspecto no mejora la fiabilidad.

Circuito impreso universal

Firmware

Termostato de precisión (v1.00)

Caja y frontal

He utilizado una caja de plástico de tipo comercial, de tamaño 130×130 mm y 35 mm de altura. Para darle un mejor acabado, he utilizado un trozo de Polimetilmetacrilato (Plexiglas).

Frontal delTermostato

El mecanizado y serigrafía lo he realizado con la CNC.

 

Reloj FC-209 – RECOPILACIÓN

Recopilación de todos los videos relacionados con el reloj LED (FC-209), explicando por encima lo que se puede encontrar en cada uno de ellos. Además se presenta la última actualización del firmware, tanto para el kit FC-209 como para el reloj de pared. También se crean ambas versiones de firmware con los textos en inglés.

RECOPILACIÓN

Construye un Reloj LED – EC1204B

Se describe el montaje del kit de reloj en una carcasa de plástico semitransparente, en la cual se alberga una batería de litio (recuperada de un PC), con el fin de alimentar el reloj de forma autónoma. Se empieza describiendo con el esquema y de forma básica el funcionamiento del reloj. Posteriormente se explica el funcionamiento del módulo ‘Step Up’, utilizado para elevar la tensión de la batería de litio y conseguir los 5V estabilizados que  alimentan el reloj. También se instala un módulo de carga TP4056 con protección, el cual se explicó con detalles entre el video Power Bank #1 y Linterna LED #2 – MEJORAS. Se mide el consumo del reloj, y se calcula la autonomía máxima de la batería, a partir de su capacidad. Finalmente se muestra la construcción de la serigrafía frontal, realizada con una CNC y se describe el funcionamiento y ajustes de este kit de reloj, utilizando el firmware con el que viene programado el reloj de fábrica.

Firmware para el Reloj LED: EC1204B

Se realiza un nuevo firmware para sustituirlo por el que viene instalado de fábrica, es la versión 1. Después de realizar un estudio de todo el hardware, se decide elevar la frecuencia del reloj de cuarzo, y sustituir el sensor de temperatura original DS18B20, por otro de mayor precisión. Al realizar estos cambios, la versión 1 del firmware no es compatible con el kit original, porque sería necesario sustituir estos dos componentes. Posteriormente se detalla a fondo el funcionamiento del chip DS1302, RTC o reloj en tiempo real, y se explica el proceso a seguir para reprogramar el micro-controlador utilizando el puerto ICSP (In-Circuit Serial Programming) que incorpora dicho kit. Finalmente se detallan todas las funciones y mejoras incorporadas en el nuevo firmware, explicando el modo de configuración y su funcionamiento.

Firmware Reloj LED #2 (Temperatura, Hora de Verano)

Se actualiza el firmware anterior, incorporando la posibilidad de que el reloj realice el cambio automático de la hora inverno/verano. Esta es la versión 2, y tampoco es compatible con el kit original. Se analiza a fondo el funcionamiento y comunicaciones entre el sensor de temperatura y el micro-controlador, comparando las diferencias que existen entre el sensor original DS18B20 y el instalado. Finalmente se calibra el sensor de temperatura mediante el menú de configuración y se detalla el proceso que sigue el reloj cuando tiene que actualizar la hora, estando apagado y encendido, comprobando también su funcionamiento.

Firmware Reloj LED #3 (Brillo nocturno)

Se actualiza de nuevo el firmware, incorporando la posibilidad de programar las horas en las que el display reduce su brillo. Con esto se evitan las molestias por exceso de iluminación, cuando se utiliza como despertador en una habitación oscura. Esta es la versión 3, y tampoco es compatible con el kit original. Se realizan de nuevo medidas de consumo del reloj, pero ahora con bajo brillo, y se calcula el incremento de la autonomía de su batería, debido a la reducción del consumo.

Firmware Reloj #4 (Compatible FC-209)

Debido a las numerosas peticiones que recibo, realizo un nuevo firmware totalmente compatible con el kit de reloj FC-209. Esta es la versión 4, y es la primera que se puede utilizar con el kit original. A pesar de que el sensor de temperatura original es menos preciso, con el DS18B20 se amplía el rango de medidas, pudiendo mostrar temperaturas entre -10 y 125ºC. Como existe la posibilidad de sustituir el chip de temperatura por otro externo con encapsulado metálico, es posible utilizar un sensor externo para medir la temperatura de componentes electrónicos o fluidos.

Cronómetro LED #5 (FC-209)

Se incorpora la posibilidad de utilizar el kit FC-209 como reloj o cronómetro. La opción de cronómetro se debe habilitar pulsando el botón central MODE, en la fase de arranque. En caso de no tocar nada, el módulo arrancará en modo reloj y tendrá las mismas funciones que tenía en la versión anterior, versión 4. Esta es la versión 5, y también es compatible con el kit FC-209. Una vez que se entra en el modo cronómetro, es posible configurar el modo del contador, pudiendo contar el tiempo hacia delante o hacia atrás. La resolución del cronómetro es de centésimas de segundos, mostrando este valor al final, en modo alterno cuando se detiene la cuenta.

Reloj LED de pared #1

Se muestra un nuevo diseño de reloj, utilizando las mismas características del kit FC-209, pero ampliando su tamaño para que pueda utilizarse como reloj de pared. Este firmware NO es compatible con el kit de reloj FC-209. Esta es la versión 6, exclusiva para este modelo de reloj, pero funciona exactamente igual que la versión 5 en el kit FC-209.

Al ampliar de tamaño el display, es mejor construir todo el frontal con diodos LED, en lugar de utilizar display’s de 7 segmentos. Con este aumento de tamaño se acentúa el efecto de parpadeo, provocado por la baja velocidad del procesador, por lo que se aumenta la frecuencia del cristal de cuarzo, igual que se hizo en  las 3 primeras versiones del firmware, pero en este caso se mantiene el mismo modelo de sensor de temperatura. Otra modificación, es el uso de una batería recargable en lugar de la pila de botón. En este firmware se habilita el control de carga de la batería tampón, a través del chip DS1302. Para poder alimentar más de dos diodos en serie, como es el caso, se necesita subir la tensión de alimentación por encima de 5V, por lo que también se necesita instalar un módulo Step-UP.

En el video se muestran los detalles de construcción del circuito impreso que se necesita, así como el ensamblado de los diodos led en el frontal y sus cableados. Finalmente se realizan las pruebas de funcionamiento.

Reloj LED de pared #2

Se construye la carcasa frontal del reloj de pared, y se monta un anclaje para poder colgarlo. También se muestra el grabado de la serigrafía y mecanizado del frontal, realizado todo con una CNC. Luego se pinta la serigrafía, y se muestra el reloj ya colgado y funcionando.

Termómetro digital para fluidos

Se utiliza un nuevo kit de reloj, para poder utilizarlo principalmente como medidor de temperatura de componentes electrónicos y fluidos. Se sustituye el chip de temperatura original, por otro externo del mismo modelo, pero encapsulado en acero inoxidable. También se realiza el mecanizado con la CNC, pero como en este caso se utilizará el kit con un  alimentador externo de 5V, su tamaño es bastante reducido y fácil de transportar. Finalmente se realiza el calibrado del sensor de temperatura, utilizando como referencia los 0ºC que tiene el hielo en fusión.

Firmware for LED Clock – ENGLISH

Debido a las múltiples peticiones que recibí de algunos seguidores no hispanos, hice una versión del último firmware del kit FC-209, pero traduciendo todos sus textos en inglés.

Última actualización del firmware del reloj LED

Se incorporan un par de sugerencias que he recibido en los últimos meses. La primera de ellas y la más solicitada, es la posibilidad de presentar la temperatura en modo alterno con la hora, y la otra es la opción de poder mostrar los CEROS de las decenas de hora en el display, es decir, que se encienda el cero de la izquierda de las horas entre las 0 y las 9 de la mañana. Ambas opciones serán configurables, de manera que se podrá elegir entre la presentación anterior o la nueva.

Existe una variante entre el firmware del kit de reloj FC-209 y el reloj de pared, aunque sus prestaciones son las mismas. De manera que hay dos modelos de firmware, uno para cada modelo.

·        Kit FC-209: J_RPM_v5B_EC1204B.HEX

·        Reloj de pared: J_RPM_v6B_EC1204B.HEX

Configuración del Reloj LED (v5B-v6B)
Configuración del Reloj LED (v5B-v6B)

 

También he creado dos versiones con los textos en inglés:

·        Kit FC-209:  J_RPM_v5eB_EC1204B.HEX

·        Reloj de pared: J_RPM_v6eB_EC1204B.HEX

Flow diagram (v5B-v6B)
Flow diagram (v5B-v6B)

Detalles de la presentación alterna

Cuando se active el modo de presentación alterno, la temperatura se mostrará de forma síncrona con el reloj, y lo hará cada 5 segundos. Entre el segundo 5 y el 55 de cada minuto, nunca se mostrará en el segundo ‘0’ de cada minuto, y lo hago así con el fin de mostrar siempre el cambio del minuto al paso por el segundo ‘0’ y no interrumpir la escucha de las señales horarias en caso de que estuvieran activadas. La temperatura sólo aparecerá durante un segundo de cada 5, en total 11 veces en cada minuto.

Por otra parte, como la lectura de la temperatura requiere de un tiempo y no es conveniente utilizar interrupciones cuando se está realizando la lectura, la presentación del display se detiene durante ese período de tiempo, siempre inferior a 1 segundo, pero provoca que la aparición de la temperatura en el display sea inferior a 1 segundo. Dependiendo de la velocidad del sensor de temperatura ese efecto podría pasar desapercibido, cosa que no sucede con el chip original que se incluye en el kit, ya que es demasiado lento. Me refiero al sensor de temperatura DS18B20 que se incluye en el kit de reloj.

Por ese motivo, con el fin de mejorar la visibilidad de la temperatura, la lectura sólo se realizará cada 10 segundos, de manera que entre dos presentaciones sucesivas, una de ellas siempre será instantánea y aparecerá durante 1 segundo completo. Dependiendo del segundo en el que se arranque el reloj, la lectura podría coincidir en los segundos acabados en ‘0’ o en ‘5’, ya que la primera vez que pase por alguno de ellos tendrá que leer el valor, pero al paso por el segundo ‘0’ se sincronizará y siempre leerá en los segundos acabados en ‘5’. Los segundos acabados en ‘0’ mostrarán la temperatura leída anteriormente, excepto en el segundo ‘0’ de cada minuto como ya he mencionado antes. Por otra parte, en el caso de que la temperatura sobrepase alguno de los dos umbrales de alarma, el aviso acústico se realizará sólo cuando el valor acaba de ser leído. Es decir, la alarma de temperatura sólo sonará en los segundos acabados en ‘5’

Firmware Reloj #4 (Compatible FC-209)

Kit Reloj LED (FC-209)
Kit Reloj LED (FC-209)

La versión 4 del firmware es totalmente compatible con el kit de reloj FC-209 (EC1204B). El funcionamiento y prestaciones son las mismas que las de la versión 3, pero en este caso se ha deshabilitado el límite máximo de temperatura. Como el sensor DS18B20 podría mostrar temperaturas de hasta 125ºC, podríamos sustituir el sensor de temperatura interno –coloreado en amarillo– por otro prolongado y con encapsulado en acero inoxidable. Así sería posible utilizar este reloj como termómetro, para medir con precisión la temperatura de fluidos, calefactores, circuitos electrónicos, frigoríficos, etc.

La versión 4 del firmware, se puede descargar de forma gratuita desde el siguiente enlace: J_RPM_v4_EC1204B.HEX

Sensor de temperatura: DS18B20
Sensor de temperatura: DS18B20

Al sustituir el sensor de temperatura de la placa por otro externo, podremos utilizar este reloj como termómetro para medir temperaturas ambientes y además objetos sólidos o líquidos,  comprendidas entre -10 y +125ºC. Solo tenemos que  fijar el modo de presentación Temperatura,  mediante una breve pulsación del botón [PLUS]. Este reloj dispone de 3 modos de presentación:

Hora  >>> [PLUS] >>> Tempertura >>> [PLUS] >>> Fecha+Temperatura 

Las funcionalidades de la versión 4 son idénticas a la de la versión 3. A continuación se muestra un diagrama con la secuencia de programación de todos los parámetros, válido para  ambas versiones.

Configuración del Reloj LED (v3)
Configuración del Reloj LED (v3-4)

Firmware Reloj LED #2 (Temperatura, Hora de Verano)

Detalles de funcionamiento del chip de temperatura (DS18B20) del Reloj Led EC1204B. Sustitución del sensor de temperatura DS18B20 por el DS18S20, de mayor precisión, mostrando las diferencias entre ambos sensores. Comprobación de las alarmas de temperatura con el reloj y la presentación límite con temperaturas positivas y negativas.

Los cambios de hora invierno/verano que se realizan en algunos países desde el año 1973. Actualización del firmware del reloj, para permitir el cambio de hora invierno/verano de forma automática. Forma de implementar el ajuste automático de la hora empleando tablas. Almacenaje de datos para que funcione el cambio horario con el reloj apagado, y comprobación de su funcionamiento.

La versión 2 del firmware, se puede descargar de forma gratuita desde el siguiente enlace:

J_RPM_v2_EC1204B.HEX

La versión 3 del firmware incluye la posibilidad de reducir el brillo del display en horario nocturno. Puedes descargarla desde el siguiente enlace:

J_RPM_v3_EC1204B.HEX

Sensor de temperatura DS18B20

El chip DS18B20 es su sensor temperatura digital de resolución configurable entre 9 y 12 bits. Por defecto, de fábrica está configurado con 12 bits. A máxima resolución, sus últimos 4 bits se corresponden con las lecturas decimales de: 0,5°/ 0,25° / 0,125° / 0,0625°.

Sensor de temperatura: DS1820
Sensor de temperatura: DS1820

Para tomar la temperatura se debe transmitir el comando Convertir [44H]. Este comando realiza una conversión de la temperatura a formato digital, y posteriormente la almacena en la memoria del chip con un formato de 16 bits. Los 5 bits MSB se corresponden al signo, siendo todos ‘0’ cuando la temperatura es positiva y ‘1’ cuando es negativa.

La información puede ser recuperada mediante su interfaz de 1 hilo, enviando el comando Lectura [BEH]. Los datos se transfieren a través del bus, empezando por el bit menos significativo (LSB).

DETECCIÓN DE ALARMAS

Después de realizar la conversión de la temperatura, el valor se compara con los valores de referencia, previamente almacenados en las memorias TH y TL del chip. Como estos registros son de 8 bits, los bits 9-12 se ignoran en la comparación. El bit más significativo de TH / TL se corresponde con el bit de signo. Si el resultado de una medición de temperatura es mayor que TH o inferior TL, se almacena un indicador de alarma en el interior del chip. El estado de alarma se actualiza con cada medición de temperatura. Esto permitiría conectar varios DS1820 en paralelo,  y realizar una lectura rápida para detectar si algún sensor tiene alarma, y posteriormente leer su temperatura de forma inmediata.

En la figura siguiente podemos ver la diferencia que existe en el formato de datos de temperatura, entre los sensores DS18B20 y DS18S20.

Estructura de datos DS1820
Estructura de datos DS1820

A pesar de que sus encapsulados, interface de comunicaciones y comandos son idénticos… la estructura de sus datos los hace incompatibles entre si, y es necesario modificar el firmware del reloj para que pueda mostrar la temperatura.

Memoria DS1820
Memoria DS1820

MEMORIA ROM

El sensor de temperatura DS1820 tiene una memoria ROM, que contiene un código único de 64 bits. Los primeros 8 bits identifican a la familia (DS18B20 = 28H / DS18C20 = 10H). Los siguientes 48 bits almacenan un número de serie único. Los últimos 8 bits son el CRC de los primeros 56 bits. Estos 64 bits permiten la gestión de varios dispositivos conectados en el mismo bus, pudiendo realizar las siguientes operaciones:

(33H) Leer la memoria ROM

(55H) Comunicar con un solo dispositivo

(F0H) Buscar una dirección ROM

(CCH) Saltar la dirección ROM, para acceder a los datos (sensor único)

(ECH) Búsqueda de alarmas

Leer ROM [33H]

Este comando permite que el maestro del Bus pueda leer el código de la familia de 8 bits del DS1820, su número de serie de 48 bits, y los 8 bits del CRC. Este comando sólo se puede utilizar si hay un solo DS1820 en el Bus. Si existe más de un dispositivo en el Bus, se producirá una colisión de datos cuando todos los esclavos intenten transmitir en el mismo tiempo.

Comunicación con un dispositivo ROM [55H]

El comando 55H, seguido de una secuencia ROM de 64 bits, permite que el maestro del bus pueda comunicar con un solo dispositivo DS1820 dentro del mismo Bus. Sólo responderá el DS1820 que coincida exactamente con la secuencia ROM de 64 bits recibida. Todos los esclavos que no coincidan con la memoria ROM de 64 bits, esperarán la recepción de un impulso de reposición. Este comando se puede utilizar con uno o varios dispositivos conectados en el mismo Bus.

Buscar ROM [F0H]

Mediante el comando F0H, el maestro puede conocer el número de dispositivos (esclavos) que tiene conectados en el mismo Bus, o sus códigos ROM de 64 bits.

Saltar ROM [CCH]

Este comando permite ahorrar tiempo al maestro del Bus, para acceder a la funciones de la memoria sin proporcionar el código ROM de 64 bits. Este comando no se debe utilizar cuando existe más de un dispositivo conectado en el mismo Bus.

Búsqueda de alarmas [ECH]

Mediante el comando ECH, el maestro puede acceder a las alarmas de todos los dispositivos (esclavos) que tiene conectados en el Bus. La condición de alarma se define como una temperatura mayor que TH o inferior TL. La condición de alarma permanecerá activada hasta que otra medida de temperatura deje de superar los umbrales de alarma (TH/TL).

MEMORIA RAM

Escribir RAM [4EH]

El comando 4EH habilita la escritura en la memoria RAM del DS18B20, empezando por el registro TH. Estos 3 Bytes (2 Bytes con DS18S20) se almacenan en las posiciones 2, 3 y 4 de la memoria. Los 3 Bytes se deben enviar seguidos, antes de enviar un reinicio.

Leer RAM [BEH]

El comando BEH permite leer todo el contenido de la memoria RAM. La lectura comenzará en el Byte 0 y continuará a través de la memoria hasta el noveno Byte (Byte 8, CRC). Si no se quieren leer a todos los registros, el maestro podría enviar un reinicio para interrumpir la lectura en cualquier momento.

Copiar RAM [48H]

Con el comando 48H se copian los 2/3 Bytes (DS18B20: TH, TL y Config) desde la memoria RAM a la memoria EEPROM (no volátil) del DS1820. Mientras dure el proceso de copia, el DS1820 cargará la línea del Bus, midiendo un valor ‘0’, y se medirá un nivel alto ‘1’ (pull-up) cuando el proceso de copia termine.

Convertir Temperatura [44H]

El comando 44H inicia la conversión de la temperatura, y no se requieren más datos. Mientras dure el proceso de conversión y copia de datos en la RAM, el DS1820 cargará la línea del Bus, midiendo un valor ‘0’, y se medirá un nivel alto ‘1’ (pull-up) cuando el proceso termine.

Leer EEPROM [B8H]

Este comando copia los valores de referencia de temperatura  (TH/TL) y la configuración (Config sólo con DS18B20) almacenada desde la EEPROM a la memoria RAM. Esta operación de recuperación se realiza automáticamente cada vez que se alimenta el DS1820. Mientras dure el proceso de la copia de datos en la RAM, el DS1820 cargará la línea del Bus, midiendo un valor ‘0’, y se medirá un nivel alto ‘1’ (pull-up) cuando el proceso termine.

Leer la fuente de alimentación [B4H]

Después del envío del comando B4H, el DS1820 indicará dentro de su intervalo de datos con un estado:

0 = DS1820 alimentado por el Bus

1 = DS1820 con fuente de alimentación externa.

Comunicaciones con DS1820
Comunicaciones con DS1820

En la imagen anterior, podemos ver un ejemplo del diálogo entre el micro-controlador (maestro) y el sensor de temperatura (esclavo), para obtener el valor de la temperatura y almacenar los valores de alarma máxima y mínima en su memoria.

HORARIO DE VERANO

En algunos países, existen dos tipos de horarios:

  1. Horario estándar, el que corresponde con el huso horario (Horario de invierno).
  2. Horario de verano

El cambio de hora se aplica una vez al año, haciendo que del horario estándar (o de invierno) se pase al horario de verano. Aunque la primera vez que se aplicó este cambio de hora fue durante la Primera Guerra Mundial, dejo de aplicarse hasta la crisis del petróleo de 1973. El objetivo es el de aprovechar mejor la luz solar, consumiendo menos electricidad.

Cambios horarios (Invierno/Verano)
Cambios horarios (Invierno/Verano)

La mayoría de los países que realizan este cambio horario, lo realizan en las siguientes fechas:

HORARIO DE VERANO

Último domingo de MARZO:  A las 2:00 AM  se adelanta a las 3:00 AM

… se adelante 1 hora el reloj

HORARIO DE INVIERNO

 Último domingo de OCTUBRE: A las 3:00 AM  se atrasa a las 2:00 AM

… se atrasa 1 hora el reloj

Configuración del Reloj LED (v2)
Configuración del Reloj LED (v2)

Este es el nuevo diagrama para la programación del Reloj LED, utilizando la versión 2 del firmware.

Firmware para el Reloj LED: EC1204B

Desarrollo de un nuevo firmware para el kit EC1204B, reloj LED con esfera rotante. Estructura interna del chip de reloj en tiempo real DS1302. Gestión de datos entre el micro-controlador y el DS1302. Direcciones y estructura de los registros del reloj y memoria RAM, envío simple o ráfaga (burst), etc. Gestión del registro para control de carga de la batería de almacenamiento (TRICKLE-CHARGE REGISTER). Modificaciones realizadas sobre el diseño original, con el fin de mejorar las prestaciones y aumentar el brillo del display. Descripción del modo de programar la hora y modificar sus ajustes con el nuevo firmware.

Este firmware se puede descargar de forma gratuita desde el siguiente enlace:
J_RPM_v1_EC1204B.HEX

Esquema del reloj: EC1204B
Esquema del reloj: EC1204B

Antes de comenzar a realizar un nuevo firmware, es importante analizar el esquema y anotar los pines de entrada/salida de todos los dispositivos que se tienen que controlar. Como en este caso, tanto el control del display de 4 dígitos como los 60 diodos led están multiplexados, es conveniente utilizar la frecuencia más alta que permita el micro-procesador. Dado que este procesador (AT89S52) podría funcionar con una frecuencia máxima de 33 MHz, podemos sustituir sin problemas su cristal de cuarzo original de 12 MHz, por otro de 22,118 MHz. Con este cambio conseguiremos un aumento de 1,8 veces en la velocidad de proceso, podremos aumentar la luminosidad del reloj y reducir su parpadeo. Es importante destacar que si cambiamos el cristal de cuarzo y utilizamos el firmware original, el reloj no funcionará.

Firmware original con el cristal de 22,118 MHz.
Firmware original con el cristal de 22,118 MHz.

El problema está en las comunicaciones entre el chip sensor de temperatura (DS18B20) y el micro-procesador. Como las comunicaciones entre ambos dispositivos se hace con un sólo hilo (1-Wire interface), sus comunicaciones son asíncronas y los tiempos deben ser muy precisos. Aunque el resto del reloj podría funcionar sin problemas, debido a que el DS1302 lleva su propio cristal de cuarzo, con el firmware original se muestra un error en el display…  y el reloj no llega a funcionar.

Las comunicaciones entre el micro-controlador y el chip de reloj DS1302 se realizan mediante 3 hilos:

  1. Reloj (SCLK)
  2. Entrada/Salida de datos (I/O)
  3. Habilitación (CE)
Comunicaciones con DS1302
Comunicaciones con DS1302

Como podemos observar en la imagen anterior, las comunicaciones entre el micro-controlador y el DS1302 pueden realizarse en modo simple (un sólo registro) o en modo burst/ráfaga (todos los registros del sector apuntado). Es importante destacar que los datos se transmiten con el flanco de subida de la señal de reloj, y se reciben con el flanco de bajada. Observar el diagrama de lectura en la imagen anterior, que entre el byte de dirección del registro (TX) y el byte de datos (RX) cambia el punto de muestreo.

Registro de carga del DS1302
Registro de carga del DS1302

El chip DS1302 incorpora un circuito para permitir la carga de su batería de almacenamiento. En caso de utilizar una pila no recargable, no se debería activar el circuito de carga. Como podemos observar en la imagen anterior, es posible conectar el circuito de carga y limitar su corriente máxima, mediante la conexión de un diodo o dos en serie y el valor de la resistencia.

Cable ISP (In-system programming)
Cable ISP (In-system programming)

Para programar el micro-controlador de este kit de reloj, podemos utilizar un interface serie (ISP: In-system programming / ICSP : In-Circuit Serial Programming) . En la imagen anterior podemos ver el conexionado que se debería utilizar entre el programador TL866A y el reloj.

Configuración del Reloj LED
Configuración del Reloj LED

En la imagen anterior se muestra la secuencia de programación del reloj  con el nuevo firmware.