Mostrando entradas con la etiqueta vintage. Mostrar todas las entradas
Mostrando entradas con la etiqueta vintage. Mostrar todas las entradas

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 ...




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...





domingo, 5 de enero de 2020

1) Relojes Vintage Retro con Tubos de Vacio. Introducción



          En los años 50 ó 60 no existían los modernos displays o exhibidores numéricos o alfanuméricos de estado sólido tipo Leds o LCD que hoy están tan difundidos.

Los displays numéricos se diseñaban con tubos electrónicos de vacío, los mas difundidos eran los tubos o válvulas NIXIE y NIMO, estos se construyeron en gran variedad de formatos y tamaños, aquí podemos ver algunos modelos de esas maravillas tecnologías de las décadas en que el hombre llegó a la Luna:


displays

  tubos Nimo
 tubos Nixie

 tubos Nixie miniatura 

 

                                                            Fig 1.1 Nixies y Nimos

En estas primeras entradas de este mi Blog personal, desarrollaré tres proyectos de relojes con este tipo de displays, a saber:

Proyecto Nro.1: Reloj Retro con tubos Nixie modelo ZM1022
Proyecto Nro.2: Reloj Retro con tubos Nixie  modelo miniatura IN-12
Proyecto Nro 3: Reloj Retro con tubos Nimo modelo BA00-P31

Todos los proyectos incorporarán los circuitos electrónicos basados en microcontrolador uC que controlarán los relojes, su referencia de tiempo y su puesta en día y hora. También describiré los criterios de diseño y soluciones en cada caso, necesarios para enlazar tecnologías de hace 70 años con las tecnologías electrónicas actuales.

Al final del proyecto Nro.1 veremos como: Sincronizar  Relojes con Señal GPS  e Internet

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


Video ilustrativo de un contador con válvula Nixie, no es de mi autoría