Firmware Reloj LED #3 (Brillo nocturno)

En la versión 3 del firmware del Reloj LED, se incluye la posibilidad de reducir el brillo del display de forma automática. Este cambio se realiza dentro de un horario programable, no mediante un sensor de luz. La hora de inicio y fin de esta reducción de brillo, está asociada a las horas de inicio y fin de la activación acústica de las señales horarias. Con esta reducción de brillo se evita la molestia que podría ocasionar un exceso de luz, cuando se utiliza el reloj como despertador en una habitación oscura, y además se mejora la autonomía de la batería (se reduce el consumo).

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

J_RPM_v3_EC1204B.HEX

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

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

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.