sábado, 19 de septiembre de 2020

15) Diseño y armado final del Reloj. Reloj Retro P31

Placa de Control e Interface con los Tubos

 
Fig.15.1 Placa de Control e Interface
Fig.15.1 Placa de Control e Interface


          En la Fig.15.1 se muestra la placa de control e interface con los tubos Nimo. En esta placa se desarrollan los circuitos de la Entrada 14,  Figuras. 14.1  y  14.4 . 
En los rótulos de la figura se indican el regulador 7805 de 5 Voltios para el microcontrolador de 8 bits , en este caso un 16F628 y su circuitería asociada,  el conector de programación ICSP y el cristal de 8 MHz. También se indican arriba las resistencias de mando de las grillas de los tubos NIMO en las salidas de los decodificadores CD4028, son 5 decos para los 5 dígitos SU, SD, MU, MD y HU. El sexto dígito HD o decenas de horas mostrará sólo 1 o permanecerá apagado, por lo cual se controlará con un único bit de los registros CD4094.
Los tres registros de desplazamiento CD4094 se indican abajo y proveeen las señales en código BCD de los decos como se mostró en la Fig.14.1 . También los tres transistores T1, T2 y T3 que cambian el nivel de las señales  de control como se detalló en la Fig.14.4
 

Placa de Display y Back Light


Fig.15.2  Placa Display y Back Light

 
En la Fig.15.2 se muestra el Display del Reloj con los 6 Tubos Nimo que mostrarán como en relojes anteriores, las indicaciones de Hora, Minutos y Segundos; y Mes, Año y Dia.
También en este Reloj en su última actualización se agrega la visualización de la posición geográfica, ya que los datos de Longitud y Latitud están disponibles en el mensaje ya analizado $GNRMC que llega del módulo GPS NEO-M8N
De acuerdo a estas funcionalidades, el display mostrará lo siguiente:
 
        Indicación:                                    Ejemplo        Visualización:

        Hora:Minutos:Segundos         13:42:56        Durante 7 Seg. con separadores en Verde
        Mes:Año:Dia                                09:20:13        Durante 3 Seg. con separadores en Rojo
        Longitud en Grados:Min.        137:46.5         Durante 5 Seg. Oprimiendo Botón, Sep. Verdes
        Latitud en Grados:Min.             56:27.3          Durante 5 Seg. Oprimiendo Botón, Sep. Rojos

De acuerdo a esta indicación, las referencias en Negro en la Fig. 15.2 se refieren a las visualizaciones de Hora/Fecha, y las referencias en Gris a las visualizaciones de Longitud/Latitud.
Asi, los dos primeros digitos se indican en Negro como Dígitos de Mes/Año, pero también se indican los tres primeros en Gris como Digitos de Grados en Longitud/Latitud.
Luego siguen indicados en negro  los dos digitos de Minutos/Año y los dos de Segundos/Dia, pero también se indican en Gris los tres últimos digitos como Digitos de Minutos y décimas de Minutos en Longitud/Latitud.
El cambio entre visualizaciones se realiza con el Botón de Cambio que también se muestra en la figura.  Los videos incluidos abajo aclarán estos modos de visualización.
 
También en la Fig.15.2 se muestra la plaqueta inferior con los 6 Leds RGB de Back Light que iluminarán los fondos de los Tubos, los transistores de mando RGB y el control de brillo de Back Light. Para el control RGB del Back Light se utilizan los últimos 3 bits del último de los registros CD4094.

Placa de Interface GPS y mando del Sexto Dígito


Fig. 15.3 Plaqueta de Interface Módulo GPS



Fig. 15.4  Circuito de Interface Módulo GPS

 
En las Figs 15.3 y 15.4 se muestra la plaqueta y el circuito de interface con el módulo GPS NEO-M8N cuyo funcionamiento ya se detalló en entradas anteriores.
En este diseño se usa un módulo GPS remoto o instalado y compartido en otro Reloj. Los datos del mensaje ya visto $GNRMC llegan por una linea de transmisión balanceada y fotoacoplada como se ve en la figura. 
Para acoplar esta linea se usa un fotoacoplador de alta velocidad  tipo 4N26 y luego un sextuple inversor tipo CD40106 para conformar la señal que ingresa como RXDATA al microcontrolador. Luego el uC efectuará el proceso de datos y display como ya se vio en entradas anteriores.
También se incluyen en la plaqueta un Led Verde para la indicación  de datos RX y un Led Amarillo para Datos Tx que indica los datos que son retransmitidos (echoed) por el uC.
El transistor de mando del sexto dígito también está en esa plaqueta y se utiliza para encender el sexto dígito con un único bit de los registros, que como ya se vió será un medio digito que estará en "1" ó apagado.


Unión entre Placa de Tubos y Placa Controladora

 
Fig.15.6  Placa de Tubos y Placa Controladora

 

En la Fig.15.6 se muestrán la placa de Tubos Nimo y la placa Controladora vinculadas por el cableado de control de grillas de Tubo ( 60 cables) . También se muestra el suministro de alta tensión de Ánodos de 3500 VDC con el cableado y el riel de suministro. El sexto dígito como ya se vió es un tubo especial de medio dígito. 
 
 
Distribución de Fuentes de Alimentación

Fig 15.7  Distribución de Fuentes de Alimentación

 

En la Fig.15.7 se muestra la distribución de las fuentes de alimentación del Reloj P31. Este se alimenta con 220 VAC por medio del interlock de ingreso, la llave doble de encendido y el fusible con indicador luminoso. Con 220 VAC se alimentan la fuente o Convertidor 220 VAC a 12 VDC y el transformador 220 VAC a 110 VAC que energiza los dos transformadores de Alta (1500 VAC) y Baja (1,1 VAC) de la fuente de Tubos, que por ser originales ingresan con 110 VAC. Por último se muestra el doblador y la salida de Alta tensión (3500 VDC)
 
Distribución final de Componentes del Reloj

Fig. 15.8  Distribución Final del Reloj P31

 

En la Fig.15.8 se muestra la distribución final de los componentes del Reloj en la placa base del gabinete.
 
En los siguientes videos se muestra el funcionamiento del Reloj P31 en su versión final. 
 
 

 
 

 
 
En los videos puede verse el Reloj mostrando la hora 10:30:50 con la indicación Hora, Min y Seg durante 8 segundos donde los Leds separadores parpadean en Verde,
 y luego la Fecha 10:20:04 con la indicación Mes, Año y Dia durante 2 segundos donde los Leds separadores parpadean en Rojo.
Luego cuando se oprime el Botón, se muestra durante 5 segundos la Longitud del lugar, 57:33.5 que corresponde a 57 Grados, 33.5 minutos de Longitud Oeste, con los Leds separadores y punto decimal parpadeando en Verde,
y luego se muestra durante 5 segundos la Latitud del lugar, 37:58.2 que corresponde a 37 Grados, 58.2 minutos de Latitud Sur, con los Leds separadores y punto decimal parpadeando en Rojo,
Toda esa información es suministrada como ya se detalló, por el módulo GPS NE8-N8M.
 
 
Nos vemos en la proxima entrada...
 

sábado, 6 de junio de 2020

14) Actualización de la Electrónica de Control . Reloj Retro P31

Actualización del Circuito de Control del  Reloj P31


          Como muestra el video de la Entrada 13, la electrónica original de la placa presenta fallas ya que los Tubos muestran sus dígitos en forma aleatoria. La placa original  de control de los Tubos (Fig.13.5) posee 50 transistores de los años 60 (Fig.13.6) de los cuales unos 20 ya no funcionan y no tienen reemplazo.
Entonces la desición será actualizar toda la electrónica de la placa con un nuevo diseño basado en tecnología CMOS como se ve a continuación.




Fig.14.1 Diagrama en bloques del nuevo display del Reloj


En el diagrama de la Fig.14.1  pueden verse arriba los 6 Tubos NIMO BA0006-P31 (la placa posee 5, se agregará un sexto Tubo) que corresponderán en pares, a la indicación de Horas, Minutos y Segundos del Reloj, y también podrán mostrar Dia, Mes y Año como ya se sugirió.
Como se ve, los Ánodos reciben la alimentación de 3-3,5 KVDC,  los Cátodos son polarizados como se verá más abajo. Las Grillas de los Tubos son manejadas (las resistencias limitadoras no se muestran) por integrados decodificadores BCD a decimal de tecnología CMOS tipo CD4028.
En este diseño similarmente al anterior, utilizaré integrados tipo registros de desplazamiento o conversores serie/paralelo de tecnología CMOS tipo CD4094, para almacenar los códigos BCD de los dígitos a mostrar,
Las características de estos integrados se muestran a continuación:


Fig.14,2 Características de los integrados CD4028 y CD4094



En el diagrama de la Fig.14.3  puede verse el circuito más detallado para los dos primeros Tubos del display del Reloj, los cuales mostrarán los dígitos de Horas.  Los circuitos de los otros dos pares de Tubos  de Minutos y Segundos serán similares. También podrán mostrar Dia, Mes y Año como ya se sugirió.



Fig.14.3 Circuito parcial del display para dos Tubos



Como puede verse en la Fig 14.3 , en este circuito los Cátodos de los Tubos son polarizados por medio del transformador de filamento con +6 Voltios DC respecto de 0 Voltios (GND, tierra o masa) utilizando el divisor de tensión R1/R2.
Los integrados CMOS son alimentados con VCC +12 Voltios, por lo cual la salida activa del deco CD4028 (ver su tabla en la Fig.14.2) correspondiente al código BCD de sus entradas DCBA, colocará +6 Voltios de polarización Grilla-Cátodo activando en el Tubo, el haz electrónico correspondiente al dígito a encender. Las restantes 9 salidas del deco no activas se mantendrán en 0 Voltios, aplicando -6 Voltios de polarización Grilla-Cátodo desactivando los restantes haces no correspondientes al código BCD aplicado. Las resistencias de 1 Mohm limitan la corriente en la Grilla activa.
El CD4094 es un conversor serie/paralelo de 8 bits que como se ve en la Fig.14.3 maneja las entradas de los dos decos CD4028, 4 bits para cada uno.
Como también se ve, el circuito recibe tres señales desde el microcontrolador uC que son:
- DT12 es la entrada de bits (datos) seriales que ingresan y se almacenan en los registros CD4094 que luego son presentados en las entradas DCBA de los decos
- CK es la señal de reloj (clock) que dispara el almacenamiento y desplazamiento de los bits DT12 en los registros.
- ST es una señal de activación (Strobe) que transfiere los bits almacenados a las salidas de los registros.
Como se ve en las Fig 14.1 y 14.3,  la señal DT12  se llama así porque es el ingreso de bits del registro de los  primeros dos digitos (Horas), DT34 es el ingreso de bits del registro de los  dos digitos centrales (Minutos) y DT56  es el ingreso de bits del registro de los  últimos dos digitos (Segundos)
En cada refresco del display, en la señal CK se enviarán los 24 pulsos necesarios para desplazar y almacenar los 24 bits (6x4) necesarios para decodificar los 6 digitos a mostrar, y luego se pulsará la señal ST para actualizar las salidas de los registros.

En la Fig 14.5 se muestra el circuto del uC que es similar al diseño anterior Reloj IN0012, donde ya se explicaron sus características e indicaciones de sus Leds.
Las principales variantes son las señales de control del display  DT12, CK y ST,  que son provistas por medio de los transistores T1, T2 y T3 que funcionan como adaptadores de nivel entre la tensión VDD (5V) del uC y la tensión VCC(12V) del display, y que no se aplica la función de Back Light.



Fig.14.4 Diagrama de circuito del uC




El diseño continuara con el armado de la nueva placa de control ...




jueves, 30 de abril de 2020

13) Diseño de Reloj con tubos Nimo. Reloj Retro P31


Introducción al Proyecto Reloj P31


              Este proyecto se trata de diseñar y construir un Reloj Retro Vintage con tubos de rayos catódicos (CRT) marca IEE modelo NIMO BA0006-P31 (ó IEE NIMO 6000-31-0006), en adelante llamados Tubos.
Estas son joyas electrónicas  de los años 50 y 60, anteriores aún a los tubos Nixie, con sus placas originales recuperadas desde el fondo de alguna tienda de antiguedades.

Aquí algunas fotos de los Tubos, aún con sus componentes de control, su fuente de poder de 3.500 Voltios y  polvillo originales:








Algunas fotos mas...


































Diseño del prototipo de testeo de los Tubos Nimo


Fig.13.1 Prototipo de test de los tubos Nimo



Para comenzar el testeo y pruebas de los Tubos Nimo disponibles en la placas vistas arriba y su fuente de alimentación, efectuaré la distribución de componentes que se ve en la Fig.13.1
En el ángulo inferior derecho del prototipo de test está dispuesta la fuente de alimentación original de los tubos , marca IEE modelo 14549 (con su cubierta en la foto de arriba)
El diagrama de circuito de esta fuente de alimentación es muy simple y se ve en la Fig 13.2.
Cuenta con dos transformadores que dado su origen americano ingresan con 11o Voltios AC, el primero con salida de 1,1 Voltios AC para alimentación del filamento catódico de los Tubos con punto medio para permitir su polarización catódica; y el segundo de 1500 Voltios seguido de un doblador de tensión que suministra entre 3 y 3,5 KiloVoltios D.C. para la polarización anódica de los Tubos, que puede contar con una resistencia de salida en el camino de la alta tensión para regular la corriente de Ánodo.


Fig.13.2 Diagrama de fuente de alimentación Tubos



Como se ve en la Fig. 13.1,  para alimentar todo el prototipo con 220 VAC usaré un transformador reductor de 22o Voltios a 110 Voltios para ingresar a la fuente de poder de los Tubos, y también dispongo de una fuente de alimentación de 12 Voltios D.C. y un regulador de 5 Voltios D.C. cuya función se verá al analizar el circuito de control.


Estudio de los Tubos IEE NIMO BA0006-P31

NIMO fue la marca comercial de una familia de Tubos de Rayos Catódicos (CRT) muy pequeños y no estandarizados, fabricados por IEE (Industrial Electronics Engineers de USA) a mediados de 1960.
En este caso estudiarenos el Tubo modelo BA0006-P31 disponible en las placas vistas arriba, que cuenta con 10 cañones de electrones con plantillas que dirigen y dan forma de dígito o caracter alfanumérico al haz de electrones que se proyecta e ilumina su pantalla superior.
Estos Tubos son de diseño interno artesanal y complejo pero de operación simple ya que proyectan un sólo dígito entre 10, normalmente de 0 a 9. Los hay más complejos de proyección multiple que cuentan con deflexión magnética especial pero este no es el caso.
Este Tubo posee 3 tipos de electrodos, un filamento catódico, un ánodo y 10 grillas o rejas de control que activan los 10 haces electrónicos con sus cuadrículas correspondientes.
Las ventajas de los Tubos NIMO respecto de los Nixie es su mejor ángulo de visualización, incluso el dígito proyectado se ve desde atrás del tubo, y su color y brillo variable (dimmerizable). Sus desventajas es su mayor complejidad de alimentación y mayor consumo. El tubo requiere mínimo 1750 Voltios de tensión DC de ánodo, 1.1 voltios de tensión AC para los filamentos, y cierta polarización catódica como se verá luego en el circuito de control.
Los datos del Tubo BA0006-p31 pueden verse aqui

En la Fig.13.3 puede verse como varía el brillo o luminancia del Tubo en función de la tensión de Ánodo, lo que hace variable (dimmerizable) el brillo del tubo. Normalmente el control de brillo de un display numérico construido con estos Tubos se lograba con un reostato en el circuito primario del transformador de su fuente anódica, hoy con una alimentación switching variable se lograría el mismo efecto.



Fig. 13.3 Luminancia vs Tensión de Ánodo



En la Fig.13.4 se muestra el circuito típico de testeo del Tubo NIMO.
Como en todo tubo de rayos catódicos, la corriente de haz se controla con la tensión del electrodo Grilla o reja. Como se ve en la figura, una tensión de Grilla de -6 Voltios respecto del Cátodo producirá la repulsión de los electrones del haz, llevando la corriente del Tubo al corte y apagando el brillo de la pantalla. En cambio una tensión de Grilla de +4 Voltios respecto del Cátodo permitirá el paso pleno de los electrones del haz y el brillo máximo de la pantalla del Tubo.
Cuando la Grilla de control sea negativa, su efecto de repulsión electrónica hará que la  corriente de haz de su cañon catódico sea nula. Cuando la Grilla sea positiva tomará unos pocos microamperes de corriente del haz, por lo cual debe usarse una resistencia de limitación de corriente de Grilla de un valor mínimo de 1 MegaOhms.


Fig.13.4 Circuito de control típico de un Tubo



El circuito de Control utilizado en la plaqueta original



Fig.13.5 Ciruito de Control en la placa original



Fig.13.6 Diagrama de circuito de Control parcial de la placa

 



En la Fig.13.5 se muestra la sección de la placa que controla un Tubo (un dígito) y en la Fig.13.6 se ve su diagrama de circuito parcial (para una sola Grilla de 10). En la Fig.13.5  se ve el decodificador BCD a decimal tipo SN7441  cuyo funcionamiento ya se analizó en Entradas anteriores, y las resistencias de polarización de las 10 Grillas del Tubo soldadas directamente en el zócalo de este. El resto de la electrónica se encuentra del otro lado de la placa y debajo del zocalo del Tubo.
En la Fig.13.6 se muestra el circuito parcial de control para un Tubo y una sola Grilla. El mismo circuito se repetirá para las 10 Grillas de un Tubo y para los 5 Tubos.

El funcionamiento del circuito es sencillo. Por las entradas ABCD del decodificador SN7441 ingresa el código BCD del dígito a mostrar en el Tubo, este código como ya se vio activará la salida correspondiente (1 entre 10) del decodificador llevando su tensión a 0 Voltios (masa o tierra), esto llevará al corte de corriente del transistor T1 colocando una tensión de 12 Voltios en la Grilla correspondiente, activando así el haz de electrones y haciendo visible el dígito correspondiente al código BCD ingresado, en la pantalla del Tubo.
Mientras tanto, las 9 restantes salidas del deco que no corresponden al código BCD ingresado, se mantienen desactivadas a potencial de 5 Voltios, haciendo que sus transistores Tx se mantengan en saturación colocando un potencial de 0 Voltios en las 9 Grillas restantes anulando sus haces electrónicos, por lo cual en el Tubo sólo se verá el digito activado por el código BCD ingresado.
Como también se ve en la Fig.13.6, el circuito utiliza Polarización por Cátodo por medio del punto central del circuito secundario del transformador de alimentación de filamento del Tubo.  En este punto como se ve, se ingresa con una tensión DC de 6 Voltios provista por el divisor R1/R2 que mantendrá el Cátodo del Tubo en +6 Voltios respecto de 0 Voltios, (masa o tierra) del circuito.
Esto permite que  una Grilla en 0 Voltios (transistor T1 conduciendo corriente) presente -6 Voltios respecto del Cátodo y lleve su corriente de haz electrónico del Tubo al corte;  mientras que una Grilla con +12 Voltios (transistor T1 en corte de corriente) presente +6 Voltios respecto del Cátodo, active  su corriente de haz catódico  y haga visible su dígito correspondiente.


A continuación un video con más detalles de este proyecto






En breve el diseño completo con microcontrolador uC...

martes, 28 de abril de 2020

12) Configuración y programación del μC . Reloj Retro IN0012

Asignación de registros y memoria en el microcontrolador uC

Como en el diseño anterior, en este proyecto se utilizará un uC de rango medio de la linea MicroChip, tipo 16F628, de 8 bits de longitud de registros internos, memoria, y dos puertas de entrada/salida RA(RA0-RA7) y RB(RB0-RB7) que se asignarán según la Fig.10.7
Las referencias y datos para el diseño pueden verse aquí:

De acuerdo a lo visto en el punto 9) Sincronizando Relojes con Señal GPS , respecto a las Fig. 9.9 y Fig. 9.10, se aplicarán dichos conceptos en este diseño.
Entonces, en forma similar en el uC se dispondrán 12 registros o lugares de memoria de 8 bits donde se almacenarán los dígitos a mostrar en el display del Reloj

La asignación de los registros para almacenar y mostrar Horas, Minutos y Segundos; y Dia, Mes y Año; será la siguiente:


 Nombre
 Función Rango utilizado Rango máximo (8 bits)
 HD Decenas de Horas
 0-1 0-255
 HU Unidades de Horas
 0-9 0-255
 MD Decenas de Minutos
 0-5 0-255
 MU Unidades de Minutos
 0-9 0-255
 SD Decenas de Segundos
 0-5 0-255
 SU Unidades de Segundos
 0-9 0-255
 AD Decenas de Año
 0-9 0-255
 AU Unidades de Año
 0-9 0-255
 ED Decenas de Mes
 0-1 0-255
 EU Unidades de Mes
 0-9 0-255
 DD Decenas de Dia
 0-3 0-255
 DU Unidades de Dia
 0-9 0-255


También se asignarán otros registros de memoria auxiliares para Back Light, contadores y retardos que se definirán en el código de programación del uC


Programación del microcontrolador, diagramas de flujo simplificados

Aquí tambíen se aplica lo visto en la Entrada 9) Sincronizando Relojes con Señal GPS
El programa PPal será similar al utilizado en el proyecto anterior del Reloj ZM1022 como se describió en la Entrada 6) y la ISR o Rutina de Servicio responderá al diagrama de flujo y descripción de la Fig. 9.9.


Análisis del módulo USART del uC

En el capítulo 12 de la referencia de arriba se detalla la programación del módulo USART del uC, con sus registros exclusivos y tablas de velocidades.
Los detalles de configuración para este diseño específico se pueden consultar en el código fuente ASM del Reloj.



Fig.12.1 Configuración de USART en Rx
Fig.12.1 Resumen de Configuración USART en Rx


Fig.12.2 Resumen de Configuración USART en Tx




Recibiendo la Hora UTC, mostrando la Hora Local

Al utilizar un módulo GNSS (GPS) para obtener la información de Hora y Fecha desde los sistemas satelitales, aparece el problema de la corrección a la Hora Local que deberá ser mostrada en el Reloj.

Los sistemas de satélites GNSS ya vistos (GPS, GLONASS, Beidou, Galileo) son globales y transmiten sus señales a todo el mundo, por lo cual envían con alta presición exclusivamente el tiempo UTC (Coordinated Universal Time) ó GMT (Greenwich Mean Time) como se analizó en la Entrada 9) Por lo cual el país o región que reciba y procese dicha señal, deberá realizar las correcciones necesarias a su Hora Local, que dependerá de su posición geográfica y factores estacionales (países que adelantan su hora en invierno, etc.)

Este problema de corrección de tiempo que parece trivial, puede complicarse por ciertas pautas que deben tenerse en cuenta.

Por ejemplo los países americanos que se encuentran al Oeste de Greenwich o Meridiano Cero tienen correcciones de tiempo negativas, p.e. para Argentina la corrección o Offset horario es (-3), esto significa que cuando la Hora UTC es p.e. 09:17 en Argentina es Hora Local 06:17. La solución de este corrimiento o Offset horario en principio parece facil, sólo basta restar 3 a la Hora UTC y queda la Hora Local corregida, pero no siempre es tan sencillo.

Los problemas aparecen cuando la Hora UTC es p.e. 02:36 entonces la Hora Local será 23:36 y la resta debe hacerse en el sistema sexagesimal para obtener el resultado correcto, y además si el Reloj muestra Fecha como es el caso de este diseño, la Fecha UTC ya estará un día adelantada a la Fecha Local y también deberá corregirse mostrando el dia anterior.

Esta corrección al día anterior que debe mantenerse en las tres últimas horas del día corriente en un país con Offset ( -3) como Argentina se complica un poco más el primer día del mes, ya que el día anterior al 1ro de mes depende de cual fue el mes anterior que puede contar con 28, 30 o 31 días, y se deberá mostrar además el mes anterior en ese caso. También además en un reloj que muestra Mes y Año como en este caso, deberá corregirse el Mes mostrado y el año mostrado en las tres últimas horas del 31/12, ya que el tiempo UTC ya estará en año y mes nuevo, mientrás que el país todavía en año y mes viejo. Otra complicación adicional son también los años bisiestos que deberán tenerse en cuenta para una corrección de Hora y Fecha correcta a lo largo de los años.


Es de notar además que los módulos GNSS como el NEO-M8N aquí utilizado, no incluyen corrección por posición geográfica en su programación ni en la información de Hora y Fecha provista en sus mensajes de protocolo que ya fueron analizados.

En diseños sofisticados que utilicen programación de alto nivel (lenguajes C, Basic, VB.NET, etc.) se pueden implementar bases de datos de calendarios o códigos complejos que realicen una corrección correcta de Hora, Dia, Mes y Año en cualquier posición geográfica del mundo y en cualquier año.


Pero en el caso de programación de bajo nivel como es el código ASM de los microcontroladores, que además manejan sumas y restas en numeración binaria básica, una corrección de tiempo que tenga en cuenta todas las variantes aquí señaladas puede complicarse.
Por ejemplo la instrucción de resta binaria (SUB, Capitulo 15 Instruction Set de la referencia de arriba) que se usaría para realizar la resta del Offset horario no daría el resultado esperado en forma directa y habría que corregirlo en algunos casos. Por ejemplo para Hora UTC=17 implica Hora Local=17-3=14 pero la intrucción SUB daría como resultado 0x0E (Exa) y no 14

Para resolver este problema existen algunas alternativas en el código de los uC. Se puede encarar conversiones del sistema binario al sexagesimal, tomas de desición anidadas (Case) que analicen todos los casos de Hora, Dia, Mes y Año, y también está el método de combinación de Algoritmos y Tablas de Conversión que será el aquí utilizado.



Entonces, para resolver el Offset horario en la programación de este Reloj se utilizará la siguiente combinación de algoritmo y tabla
   
    Constante - Offset + Hora UTC = Índice,   Tabla(Índice) = Hora Local

La Constante se adopta en 8 y el algoritmo funciona en principio para Offsets de -3, -4, -5 y -6
El uC resolverá la Ecuación en binario y la Tabla utilizará la combinación de instrucciones CALL/RETLW
El código ASM para lograr la conversión horaria será el siguiente:

 Instruccion ASM (nemónico)
 Parámetro Comentario
 movfw OFFSET Cargar el OFFSET(3)
 subwf CONSTANTE (8)
 Resolver (CONS. - OFFSET)
 addwf
 HoraUTC
 Sumar Hora UTC
 call TablaHoraria
 Índice = CONS. - OFFSET + HUTC Entrar a la Tabla con el Índice
 retlw HoraLocal
 Obtener Hora Local
   

La Tabla de conversión horaria, que se accede con Call TablaH  es la siguiente:

 Ïndice 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
 00 99  99  18  19  20  21  22  23  00  01  02   03  04   05   06   99
 10 99  99  04  05  06  07  08  09  10  11  12   13  14   15   16   99
 20 99  99  14  15  16  17  18  19  20  99  99   99  99   99   99   99


Aqui algunos ejemplos de como funciona la conversión horaria para distintas Horas y distintos Offsets

 Ejemplo Hora UTC País Offset Operación uC
 Índice Tabla
 Valor Tabla
 Hora Local
 1 00 Arg./Brasil -3 8-3+00=05 05 21 21
 2 09 Arg./Brasil -3 8-3+09=0E0E
 0606
 3 17 Arg./Brasil -3 8-3+17=1C 1C 14 14
 4 00 Chile/Bolivia -4 8-4+00=04 04 20 20
 5 11 Chile/Bolivia -4 8-4+11=15 15 07 07
 6 16 Canadá/USA -5 8-5+16=19 19 11 11
 7 08 Canadá/USA -6 8-6+08=0A 0A 14 14


Tabla de Dia Anterior.
Se usa en el caso que el Dia UTC ya sea el dia siguiente pero el Día Local a mostrar en el Reloj todavía deba ser el Día anterior. En este caso no hay algoritmo previo y se accede directamente a la tabla

 Dia UTC
 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D 0F
 00 99  99  01  02  03  04  05  06  07  08  99   99   99  99  99
 10 09  10  11  12  13  14  15  16  17  18  99   99   99  99  99
 20 19  20  21  22  23  24  25  26  27  28  99   99   99  99  99
 30 29  30


Tabla de Dia Anterior al 1ro. de mes
Se usa en el caso que el Dia UTC ya sea el dia siguiente y además primer día del Mes, pero el Día Local a mostrar en el Reloj todavía deba ser el Día anterior. En este caso no hay algoritmo previo y se accede directamente a la tabla.
  
 Dia UTC
 00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
 00 99  31  31  28  31  30  31  30  31  31  99   99  99   99   99  99
 10 30  31  30

El valor 99 si es leido y mostrado en el Diplay en el proceso de alguna de las Tablas, indicará error de Tabla o de proceso.
Los demás detalles de uso de estas tablas para este diseño específico se pueden consultar en el código fuente ASM del Reloj.



Desarrollo del código de programación del uC en lenguaje ASM


El código completo de programación del uC se encuentra disponible en este enlace:
código ASM reloj retro IN0012

Y aquí algunas pantallas de IDE con parte de ese código:


Fig.12.3 Código de Inicialización del Módulo USART de acuerdo a las Fig.12.1 y 12.2




Fig.12.4 Código de la ISR del módulo USART




Fig.12.5 Código parcial de la Tabla de Corrección Horaria y sus Algoritmos





Como en el diseño anterior, los programadores  PICKit2 y PICKit3 de MicroChip  que se usarán para flashear el uC se ven en las Figs. 7.9 y 7.10

En la próxima entrada continuamos con el próximo proyecto. Un saludo...