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

 

Display de 7 segmentos, control serie

Diseño de un display de 7 segmentos SMD, con control serie. Con este circuito se pueden apilar tantos dígitos en serie como sea necesario, porque el número de pines de control no cambian. En este circuito se utiliza el TPIC6B595 como registro de desplazamiento, y un 74HC04 (6 inversores) como ‘driver/separador’ de las señales de control: Clock, Strobe y Enable. Al utilizar un registro de desplazamiento (Shift Register), las señales de control (Clock, Strobe y Enable) son las mismas para todos los dígitos, y la línea de datos (Data) se conecta al primer dígito… encadenando la salida de datos de un dígito con el siguiente.

TPIC6B595

El diseño de este display de 7 segmentos es modular, y se pueden conectar tantos dígitos en serie como sean necesarios.

Conexión serie TPIC6B595

Cada dígito dispone de su propio regulador de tensión de 5V, pero sólo es necesario instalar uno para alimentar toda la serie. Las conexiones de la salida de un módulo se conectan con las de entrada del módulo siguiente, permitiendo así alimentar todos los módulos con un sólo regulador de tensión. Con el fin de evitar una carga excesiva de las señales de control (Clock, Strobe y Enable) y evitar posibles interferencias en el cableado, cada módulo dispone de un circuito que hace las funciones de ‘regenerador’ de la señal.

Display control serie

El circuito integrado 74HC04 dispone de 6 inversores, y se utilizan de dos en dos, con el fin de obtener el mismo nivel lógico de la entrada en la salida. El único detalle a considerar, es que la conexión de las 3 señales de control con el registro de desplazamiento (TPIC6B595) se realizan en las salidas del primer inversor. De esta forma, la CPU debería entregar las 3 señales de control: Clock, Strobe y Enable en modo invertido.

Control del display

Control de brillo PWM (Pulse-Width Modulation)

El control de brillo del conjunto de módulos que conformen el display, se realiza mediante la gestión de la señal ENABLE. Modificando el ancho del impulso de una señal  de frecuencia >20 Hz, con el fin de evitar el parpadeo,  se puede ajustar el nivel de luminosidad del display.

Control de brillo PWM

En la imagen anterior se puede observar que la frecuencia de la señal PWM es de 104 Hz, y al aumentar el ancho del semiciclo positivo el brillo decrece (ver el video). Como es lógico, el brillo máximo se obtendrá si permanece habilitado el 100% del tiempo la señal ENABLE (sin impulsos). En el circuito integrado TPIC6B595 el estado ON se corresponde con un nivel bajo (cero lógico). El control de brillo PWM lo podría gestionar la propia CPU, partiendo de la información que recibiera de un sensor de luminosidad.

Shift Register (Registro de desplazamiento)

Funcionamiento de un Shift Register o Registro de desplazamiento, muy útil cuando se necesita controlar una gran cantidad de dispositivos de forma simultánea, utilizando un microprocesador con un número limitado de terminales. Este componente electrónico –Shift Register– es muy usado en centrales de control destinados a la domótica, paneles electrónicos de tipo LED, etc.

8-Bit Shift Register

En los circuitos digitales, un registro de desplazamiento es una cascada de Flip-Flops que comparten el mismo reloj, en el que la salida de cada Flip-Flop está conectada a la entrada de datos del siguiente Flip-Flop de la cadena, dando lugar a un circuito que desplaza por una posición la matriz de bits almacenada en ella, desplazando los datos presentes en su entrada y desplazando el último bit en la matriz, en cada transición de la entrada de reloj.

Esquema interno del 74HC595

Los registros de desplazamiento –Shift Register– pueden tener entradas y salidas tanto en paralelo como en serie. Normalmente se configuran a menudo como Serial-In, Parallel-Out (SIPO) o como Parallel-In, Serial-Out (PISO). También hay modelos que tienen entrada en serie y paralelo y otros con salida en serie y en paralelo. También hay registros de desplazamiento bidireccionales que permiten el desplazamiento en ambas direcciones (L → R o R → L). La entrada en serie y la última salida de un registro de desplazamiento, también se pueden conectar para crear un registro de desplazamiento circular.

Funcionamiento (Shift Register)

Para comprender mejor el funcionamiento de un registro de desplazamiento, se puede montar en una placa de pruebas (Protoboard) el siguiente circuito:

Display de 7 segmentos con 74HC595

El hilo de entrada de datos (SER/DATA) se puede conectar a la línea de +5 o GND, dependiendo del estado lógico (1/0) que queramos introducir al registro. A continuación se pulsa el botón SRCLK/CLOCK, para que el primer dato entre en el registro, desplazando todos sus estados una posición en orden creciente. Si queremos visualizar el estado de los registros en el display, a continuación pulsaremos el botón RCLK/STROBE.

Pruebas del 74HC595

Para que funcione el registro de desplazamiento, el hilo SRCLR/RESET tiene que estar conectado a nivel alto (+5V), si lo conectamos a GND se inicializarán todos los registros poniéndose a cero (Reset).