domingo, 23 de febrero de 2020

8) Disposición final de Fuentes y Plaquetas, . Reloj Retro ZM1022


Disposición y diagrama de las Fuentes de Alimentación del Proyecto

                Ya hubo una introducción de cuales serían las fuentes de alimentación o adaptadores AC-DC que utilizará este Reloj Retro, que básicamente son tres, de 5VDC, 12VDC y 200VDC cuya función se ve en el diagrama siguiente:

Fig.8.1. Diagrama de fuentes de alimentación del Reloj

Las fuentes de alimentación están instaladas detrás de la plaqueta de tubos Nixie como se ve en la imagen:


Fig.8.2. Disposición  de las fuentes de alimentación del Reloj



Plaqueta del microcontrolador 16F628 


La siguiente es la imagen de la plaqueta del microcontrolador 16F628 y además contiene el alimentador y control de brillo de los LEDs de luz de fondo (Back Light, ver Fig. 5.3); el driver o transistor que maneja el relé del dígito HD (BC547, ver Fig. 5.2); el conector del programador ICSP (In Circuit Serial Programming); el cristal de 4 MHz; el Led de sincronismo de 1 Seg. y los transistores driver de los LED de luz de fondo (ver Fig. 5.3)





Fig. 8.3. Plaqueta del microcontrolador del Reloj

En la siguiente imagen se ve la plaqueta del microcontrolador superpuesta a la plaqueta de tubos Nixie con los LEDS de luz de fondo apuntando a la base de los tubos para iluminar toda la ampolla de vidrio.


Fig. 8.4. Plaqueta del microcontrolador del Reloj con los LEDs de Luz de Fondo



Fig. 8.5 Plaqueta del microcontrolador del Reloj con la cubierta de LEDs


Fig. 8.6 Placa de tubos Nixie con la plaqueta del microcontrolador superpuesta
                  y debajo se ven las fuentes de alimentación 



Imagenes finales del Reloj Retro ZM1022 dentro de su gabinete







Nos encontramos en la siguiente entrada. Un saludo...




domingo, 16 de febrero de 2020

7) El código de programación y Sistema de desarrollo . Reloj Retro ZM1022

Análisis del temporizador TIMER1 del uC 16F628


         Como ya se analizó, es necesario generar la sincronización de 1 Segundo del Reloj para temporizar su cuenta de tiempo. Para esto usaré el temporizador TIMER1 disponible en el microcontrolador 16F628.


La Fig. 7.1 del manual del dispositivo, muestra el diagrama en bloques del timer TIMER1


Fig.7.1. Diagrama en bloques del TIMER1


Como se ve en el diagrama, el TIMER1 utiliza los bits de configuración mostrados, y para esta función simple de temporizador se simplifica de la siguiente manera:


 Fig. 7.2  Diagrama y configuración del TIMER1

Una vez inicializado el TIMER1 con la configuración de sus bits como se muestra en la Fig.7.2 , y apagado el Led LIS indicador de 1 Segundo, el microcontrolador quedará en un primer lazo de espera testeando la bandera TMR1IF (Timer1 Interrup Flag) de finalización del Timer.

Una vez que esta se activa (se pone a "1") habrá transcurrido medio segundo de tiempo. Entonces se reinicia el TIMER1, se enciende el Led LIS indicador de 1 Segundo, y el uC quedará en un segundor lazo de espera testeando la bandera TMR1IF (Timer1 Interrup Flag) nuevamente.
Una vez que esta se activa (se pone a "1") habrá transcurrido el siguiente medio segundo de tiempo. Completándose entonces un segundo de tiempo, se procede a la actualización del Reloj incrementándolo en 1 Seg.
Como ya se vio, el uC trabaja con un cristal de cuarzo de 4 MHz, entonces la frecuencia de entrada al Timer será de 1 MHZ

Dado que el divisor trabaja con valores discretos, siempre se cometerá un error en la temporización que en este caso será del orden del 0,6 por mil. Para mayor precisión deberá usarse una frecuencia de Cristal más alta o sincronizar el Reloj por otros métodos (WEB, GPS, etc.)




Sistema de desarrollo del Software del Controlador

La escritura y testeo del código de programación la desarrollaré en lenguaje de bajo nivel Ensamblador (Assembler o ASM) usando el ambiente de desarrollo integrado MPLAB X IDE de MicroChip, cuyas ventanas se distribuyen de la siguiente manera:

Fig. 7.3  Ambiente de desarrollo integrado MPLAB X IDE de MicroChip


Desarrollo del código de programación del controlador en lenguaje emsamblado


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

Y aqui algunas pantallas con parte de ese código:

Fig.7.4 Código de inicialización del uC

En la Fig.7.4 se muestra la definición del microcontrolador y se incluye el archivo de variables especificas de este. Luego se declara la variable de configuración _CONFIG con el oscilador a cristal y el Reset.
Luego aparecen las definiciones de las puertas RA y RB con la asignación de cada señal (pata) del uC como ya se explicó.


Fig.7.5. Código de proceso de dígitos

En la Fig.7.5. se procesan los registros asignados a SU, SD, MU, MD, HU y HD, incrementándolos y comparándolos con sus limites como explican los comentarios.



Fig.7.6. Código de inicialización del TIMER1

En la Fig.7.6. se muestra la rutina de inicialización y disparo del TIMER1 con los parámetros de configuración y carga de los divisores.



Fig.7.7. Ventana de programación del uC
En la Fig.7.7. se ve la ventana de programación del PICKit2/3 Programmer ya con el archivo .HEX cargado y listo para ser grabado en la memoria FLASH del 16F628. El archivo .HEX se obtiene compilando el código fuente .ASM, proceso que debe finalizar libre de errores.



Los programadores  PICKit2 y PICKit3 de MicroChip que se usan para flashear el uC se muestran a continuación:




Fig.7.9. Programador PICKIT2

Fig.7.10. Programador PICKIT3



Nos encontramos en la siguiente entrada. Un saludo...



 

domingo, 9 de febrero de 2020

6) El software o programación del μC . Reloj Retro ZM1022



Asignación de registros y memoria en el microcontrolador uC

         Como ya se vio, el uC a utilizar en este proyecto, el 16F628 es de rango medio y maneja 8 bits de longitud de registros internos, memoria,  y puertas de entrada/salida que como se vio son RA(RA0-RA7) y RB(RB0-RB7) y se asignan según la Fig. 5.2
Internamente en el microcontrolador se dispondrán entonces 6 registros o lugares de memoria de 8 bits donde se almacenará el número a mostrar en cada dígito del Reloj y un séptimo registro para el código de color de Luz de Fondo según la tabla de la Fig. 5.3.
Mas adelante veremos como mostrar también la fecha, alternando en el display  Horas, Minutos y Segundos con Año, Mes y Día.

La asignación de los registros para almacenar y mostrar Horas, MInutos y Segundos 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
      BL           Código de Luz de Fondo    0-7                        0-255

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

El software o código de programación del microcontrolador tendrá básicamente 6 etapas:
       1) Reset, arranque e inicialización del sistema
       2) Espera de sincronismo del temporizador de 1 segundo
       3) Actualizar la indicación de tiempo almacenada en los 6 registros (inc. 1 Seg)
       4) Mostrar el contenido de los 6 registros en el display Nixie
       5) Actualizar luz de fondo
       6) Volver al punto 2


Programación del microcontrolador, diagramas de flujo simplificados


La primera parte del diagrama de flujo simplificado incluye el punto 1 de arranque y el punto 2 de sincronismo de la lista de arriba.
El temporizador de 1 Seg. se divide en dos temporizadores de 1/2 segundo en cascada, para que el Led indicador de Sincronismo (LIS (RA4) en Fig. 5.2) permanezca 1/2 Seg. encendido y 1/2 Seg. apagado. Una vez que ocurre la espera completa de 1 Seg. se pasa al proceso y display de dígitos, y luego se vuelve a esperar la temporización del segundo siguiente (entrada Lazo Ppal.)







La segunda parte del diagrama de flujo incluye el punto 3 de la lista, actualización de los 6 registros de dígitos SU, SD, MU, MD, HU y HD , los cuales se incrementan, se comparan con sus limites y se ponen a cero según corresponda.







La tercera parte del diagrama de flujo incluye el punto 4 de la lista de arriba, consistente en mostrar el contenido de los 6 registros en el display de tubos Nixie

En este diagrama se manejan las señales ABCD y E1, E2, E3, E4 Y E5 de la Fig. 5.2
Primero las señales ABCD se mandan a reposo (0000) y luego se encienden (pasan a 1) según el estado del bit correspondiente del registro correspondiente. 
Por ejemplo, los 8 bits del registro SU se puede representar asi: 0,0,0,0,B3,B2,B1,B0
siendo B0 el bit de menor peso y B3 el de mayor peso de la combinación BCD que representa el dígito decimal contenido en el registro. Entonces como SU,B0 se indica el bit B0 del registro SU,
como MU,B3 se indica el bit B3 del registro MU y así con los demás registros y sus bits completando los seis.
En síntesis cada columna del diagrama reproduce en las salidas ABCD el estado de los bits correspondientes de cada registro SU, SD, MU Y MD, y luego se coloca el pulso en la señal E1, E2, E3 o E4, correspondiente para almacenar en los Latchs, según las Figs. 4.6 y 4.7
En cada columna también se colocan dos retardos antes y después de los pulsos. El Retardo 1 permite el establecimiento de las señales ABCD y el Retardo 2 impone la duración del pulso E.





La cuarta y última parte del diagrama de flujo completa los puntos 4, 5 y 6  de la lista de arriba. La columna de la izquierda procesa el registro de la unidades de horas HU como ya se vio arriba generando las señales ABCD y el pulso E5. Luego se enciende o apaga el dígito de decenas de horas HD de acuerdo al estado del registro HD.  Por último las señales ABCD adoptan el estado del código de Luz de Fondo (Back Light) de acuerdo al estado de los bits B3, B2, B1 Y B0 del registro dedicado a esta función BL (Back Light) y quedan asi hasta el proceso del segundo siguiente. Luego se retorna al Lazo Principal.
Nótese que la iluminación Back Light se controla con el circuito de la Fig. 5.3, donde se usan solo tres señales ABC, la D no se usa.








Nos encontramos en la siguiente entrada. Un saludo...








 

domingo, 2 de febrero de 2020

5) El microcontrolador (uC) a utilizar. Reloj Retro ZM1022

                    El microcontrolador (uC) a utilizar para ejecutar las funciones de este Reloj, será un uC de rango medio de la marca MicroChip cuyas características generales pueden verse aquí:

MicroChip Mid-Range 8 bits MCU



Esta familia de uCs de tecnología RISC (*) avanzada y de alta performance, serían de ciencia ficción en las épocas de los tubos Nixie. De la gran versatilidad y funciones disponibles en estos dispositivos, se usarán solo algunas básicas en este diseño, y de la gran variedad de controladores disponibles en la familia, seguramente cualquiera de ellos cumplirá con creces las funciones requeridas en este proyecto.
Los únicos requerimientos a tener en cuenta en el dispositivo es la cantidad de entradas/salidas (pines o patas) de control necesarias que acuerdo al hardware externo que ya se analizó deberá controlar, y además su compatibilidad eléctrica con la antigua lógica TTL. 
Dentro de esta gran familia de dispositivos, elegiremos el rango 16FXXXX  y dentro de este , el 16F628, que es un uC de 8 bits de rango medio cuyas características se resumen aquí:





Fig. 5.1  Resumen de características del uC 16F628

Criterio de asignación de entradas/salidas (pines)

En este caso el uC posee dos puertas de entradas/salidas de 8 bits (RA y RB) que cumplen con los requerimientos de diseño. Aquí ya vemos un diagrama ya más completo que explicaré a continuación:



Fig. 5.2  Asignación de puertas del uC y parte del hardware externo

De las múltiples funciones que pueden configurar en los pines (patas) del uC,  la gran mayoría serán usadas como salidas para generar las señales  para los circuitos TTL de control de los tubos Nixie ya vistos. Para esto pueden plantearse distintos diseños y asignaciones de pines. El criterio de asignación aquí adoptado será  el siguiente:


       Puerta A (RA0-RA7)
       Pin       Nombre     Función
       RA0     A                 A B C D   Serán las cuatro señales ABCD que como se vio, 
       RA1     B                 se almacenarán en BCD en los Lachts 
       RA2     C                 para indicar el dígito decodificado 
       RA3     D                 y mostrado en los tubos Nixie.
       RA4     LIS             Led Indicador de Segundos, parpadeará con frecuencia 1 Seg.
       RA5     Reset          Reset o reinicio del controlador
       RA6     Osc1           Conexiones del cristal de cuarzo de 4 MHz generador 
       RA7     Osc2           de sincronismo ó base de tiempo del Reloj

       Puerta B (RB0-RB7)
       Pin       Nombre     Función
       RB0     E1               E1 E2 E3 E4 E5
       RB1     E2               Señales de pulso que almacenan las combinaciones de ABCD
       RB2     E3              en los respectivos Lachts para indicar el dígito mostrado
       RB3     E4              en los tubos Nixie como ya se explicó.
       RB4     E5             
       RB5     HD            Señal de control del dígito de Decenas de Horas (HD) 
       RB6     SM            Entrada de seteo o ajuste de minutos
       RB7     SH             Entrada de seteo o ajuste de horas



Como se ve, se usará un cristal de cuarzo de 4 MHz para generar toda la temporización del Reloj y sincronismo (clock) del uC.

Para obtener la temporización de 1 Segundo (1 Hz) a partir de la frecuencia del cristal de 4 MHz se utilizarán divisores internos del uC (TIMER1) . La frecuencia generada de 1 Hz se mostrará en el Led indicador de 1 Seg. conectado a la salida RA4 (señal LIS, Led Indicador de Segundos)

También se dispone el circuito con el transistor BC547 que controla el relé visto en la Fig. 3.4 que enciende el dígito "1" de Decenas de Horas como ya se explicó, y será controlado su encendido con el pin RB5 (HD, Decenas de Hora)
Por último se agregan en este diagrama los dos pulsadores o interruptores que permiten el ajuste de Horas y Minutos que se indican como SH y SM



Back Light o Luz de Fondo

Para mejorar la presentación de este Reloj Retro Vintage ZM1022 tal como ya se ve  en los videos incluidos en los pie de página, se dispondrá de iluminación de fondo de distintos colores que iluminará los tubos Nixie resaltando su imagen. 
En este diseño, la luz de fondo será provista por LEDs RGB de tres colores y sus mezclas de tonos. Cada tubo Nixie tendrá un LED RGB que ilumina su base y ampolla de vidrio y será controlado por el siguiente circuito:


Fig. 5.3  Circuito de control de luz de fondo (Back Light)
                                          

Esta iluminación de fondo será controlada por las señales A, B y C  (RA0, RA1 y RA2) de acuerdo a la siguiente tabla:

              C(azul)  B(verde)  A(rojo)       Color Back Light
                   0            0              0              Apagado
                   0            0              1              Rojo
                   0            1              0              Verde
                   0            1              1              Amarillo
                   1            0              0              Azul
                   1            0              1              Lila
                   1            1              0              Magenta
                   1            1              1              Blanco




Las señales ABC son las mismas del grupo ABCD del diagrama en bloques y gráfico de las Fig. 4.6 y 4.7 , y como se dijo allí, tendrían un uso adicional además del allí explicado, y ese uso adicional será este, el control de la luz de fondo del Reloj.
Como se ve en el gráfico 4.7, la secuencia de almacenamiento de códigos de dígitos en los Latches dura un tiempo del orden de 1 milisegundo o menos, y luego las señales ABCD quedan en reposo por los 999 milisegundos restantes del segundo corriente. 
Entonces en el arranque de estos 999 mS, las señales ABC no se conservarán en reposo sino que se dispondrán en el código RGB del color de fondo según  la tabla de colores vista.
Este código de color RGB será controlado y se almacenará en un registro dedicado del  uC que se actualizará una vez por minuto, haciendo que la luz de fondo cambie en cada minuto. Entonces cada 60 segundos un color  de fondo distinto iluminará el Reloj como puede verse en los videos del pie.



(*) RISC (Reduced Intrucction Set Computer ó Computadora de Juego de Instrucciones Reducido))

 
Nos encontramos en la siguiente entrada. Un saludo...