Banner publicitario de PCBWay
desktop

Reloj/Calendario/Posicionador Geográfico/Termómetro sincronizado por módulo GPS

Buenas noches colegas, ya estamos en 2025 así que cabe un saludo de Feliz Año Nuevo :salud:

Continuando con este proyecto veremos ahora el uso del módulo RTC tipo DS3231 (Extremely Accurate I2C-Integrated RTC/TCXO/Crystal) como base de tiempo del Reloj, reemplazando al módulo GPS GY-GPSV3-NEO-M8N del proyecto del capítulo anterior.

Aquí vemos la plaqueta de ensayo que incorpora el módulo

ds3231placa.jpg

Resumiendo sus características, El DS3231 es un reloj o generador de referencia de tiempo real (RTC) tipo I2C extremadamente preciso y de bajo costo. Posee un oscilador integrado de cristal con compensación de temperatura (TCXO) y compensación por envejecimiento, lo cual le provee una precisión típica de 2 ppm o su equivalente de un minuto en un año. El dispositivo incorpora una entrada de batería externa que ante la falta de la fuente de alimentación principal, lo mantendrá funcionando normalmente.
El DS3231 mantiene la información de segundos, minutos, horas, día, fecha, mes y año. En los meses de 30 o 31 días, la fecha de finalización se ajustará automáticamente, incluidas las correcciones por año bisiesto hasta el año 2100.
El dispositivo puede funcionar en formato de 24 horas o en 12 hs AM /PM. También posee dos alarmas configurables y una salida de onda cuadrada configurable en frecuencia. El dispositivo es programable y legible por medio del bus bidireccional I2C.
Posee además un circuito comparador y referencia de voltaje con compensación de temperatura que monitorea el estado de la fuente principal Vcc para detectar fallas de energía, pudiendo proporcionar una salida de reinicio o cambiar automáticamente a la fuente de alimentación de respaldo (batería). También posee reseteo manual.
El dispositivo también integra un sensor de temperatura digital con precisión de 0,25 °C accesible por I2C.
La plaqueta de ensayo que incorpora el DS3231 (foto) tiene un rango de alimentación de 3,3 - 5,5 V, e incluye una memoria AT24C32 (capacidad de almacenamiento 32 K), con dirección predeterminada 0x57 modificable cableando los pines A0A1A2.
Como puede verse también, la plaqueta posee el zócalo para una batería recargable tipo LIR2032 para el backup de energía.

La hoja de datos competa se encuentra aquí:
DS3231 RTC

Continua...
 
Continuando, vemos ahora la placa controladora que contiene el uC PIC16F87X y el modulo RTC DS3231
El diagrama en bloques es el siguiente:

diagrama.jpg
Y la plaqueta experimental será la siguiente:

plaqueta.jpg

Tanto en el diagrama como en la plaqueta vemos tres LEDs cuya función será la siguiente:

LED1: Led Verde conectado a la salida SQW del RTC se programa para una frecuencia de salida de 1 Hz, por lo cual el parpadeo cada segundo indicará que el RTC fue programado exitosamente.
LED2: Led Verde conectado a RA5 en el uC indicarà con tres parpadeos de 1 Seg. cuando el uC inicializa el RTC con los parametros adecuados que veremos luego y arranca el lazo de lectura y display.
LED3: Led Amarillo conectado a la salida TXD deL uC que indica la actividad de datos presentes, que pueden ser monitoriados por PC para eventual diagnóstico ( troubleshooting)

Luego los cinco conectores tendrán las siguientes funciones:

CO1: conector de programacion deL uC por ICSP
CO2: conector del RTC
CO3: conector a los registros seriales de display y almanaque, que luego veremos su diagrama,
e ingreso de los pulsadores de selección y cambio que se usarán para programar el Reloj (seteo de hora, día , etc)
CO4: conector de salida de datos de diagnóstico (troubleshooting)
CO5: conector de Leds RGB separadores de Hora (Verdes) y Fecha (Rojos) , y Azules cuando se realizan los seteos de hora, día , etc

Continua...
 
Continuando aquí con los diagramas del hardware, vemos el bloque de display de dígitos y Leds RGB para efecto backlight

digitos.jpg
Este bloque funciona igual como se ya se explicó en el capitulo anterior. Utiliza los registros de desplazamiento CD4094 y los decodificadores CD4028 que se alimentan con 12 VCC para lograr como ya se vio, la polarización adecuada de las grillas de los tubos NIMO.
Los dos transistores T1 y T2 invierten y adaptan los niveles de señal del uC (5 V) a los 12V del circuito.
El funcionamiento es simple, el uC transmite los datos codificados en BCD en forma serial por DDB5 , "clockeados" por pulsos en CDB4. Así se envían los 24 bits que completan la carga de los registros , se decodifican y excitan las grillas de los dígitos correspondientes en los tubos.
También se envía el bit correspondiente al medio dígito ( apagado o 1) y los tres bits del color RGB del backlight de los tubos (como ya se explicó) Los Leds separadores RGB y Punto Decimal también se muestran y son manejados directamente por el uC (conector CO5)

Y aqui el bloque de registros que maneja los Leds del Almanaque que se muestra debajo del display de dígitos
alamanaque.jpg
Este bloque usa tres registros de desplazamiento tipo 74HC/HCT164 que se alimentan con 5Vcc y encienden directamente los Leds del Almanaque. Este display de Almanaque (ver video) posee 4 lineas, en la superior se encienden los Leds de Hora, Minutos y Segundos (señal HMS) ó los de Leds Mes, Año, Dia (señal MAD). En la segunda linea (antes posición geográfica) se muestran Temperatura y Grados porque el nuevo diseño muestra la temperatura del RTC. En la tercera linea se muestra el Día de la semana y en la cuarta linea se muestra el Mes. En el diagrama se muestra como ejemplo el LED1 siendo en total 23 Leds Amarillos

Continua...
 

Adjuntos

  • digitos.jpg
    digitos.jpg
    41.4 KB · Visitas: 0
Veremos ahora en más detalle los parámetros del módulo RTC
Los registros internos de parámetros son de Lectura/Escritura y su tabla la vemos a continuación:

RTCParams.jpg

Los parámetros básicos del Reloj son siete y aparecen en la tabla desde Address 00h a 06h, codificados en BCD y como se ve el orden es Segundos, Minutos, Hora, Día de la semana, Día, Mes, Año, y en la columna Rango aparece el rango de valores que puede tomar cada parámetro. En el caso del Día de la semana (Day) se codifica un número (1 a 7) que se asocia al día de la semana (1-Domingo, 2-Lunes, etc.) y se incrementa a medianoche. También como se ve, se puede operar en modo 24hs o 12hs AM/PM.

Los parámetros de Address 07h a 0Dh son dos alarmas de precisión (tipo despertador) que están disponibles y no se usaran por ahora en este diseño.

Los bits del registro de Control (0Eh) lo vemos resumidos a continuación (mas detalles en la hoja de datos provista):

- EOSC: Con "0" el oscilador funciona normalmente. Con "1" el oscilador está detenido
- BBSQW: Este bit junto con INTCN controlan la salida de onda cuadrada en el pin INT/SQW que se usa como testigo de la correcta programación del RTC (parpadeo de 1 Hz en el LED1). Se carga con el valor "0" (SQW)
- CONV: Este bit en "1" inicia la lectura de temperatura que luego llenará los registros SIGN (11h) y DATA (12h) con los valores MSB y LSB del parámetro de temperatura con resolución de 0,25 ºC.
- RS2-RS1: Fijan la frecuencia de la onda cuadrada testigo (LED1) en el pin INT/SQW que serà ajustada en 1 Hz (RS2,RS1=0,0)
- INTCN: Bit de control de interrupciones que se usará en "0" en este diseño, ya que el modo de trabajo será Maestro(uC) - Esclavo(RTC)
- A2IE - A1IE: Flags de habilitación de interrupciones por alarmas 1 y 2 (despertador ) que tampoco se usan en este diseño.

Entonces la palabra de control que se carga en el registro (0Eh) será: 0 0 1 0. 0 0 0 0 (40h)

Los bits del registro de estado (Status 0Fh) los vemos resumidos a continuación (mas detalles en la hoja de datos):

- OSF: Indica el estado Stop/Run del oscilador. El estado Stop ("1") puede ocurrir por distintas razones , por ejemplo por software( bit EOSC) o por caída de la tensión de alimentación , etc.
- EN32KHz: habilita la salida de señal de 32KHz en el pin correspondiente si el oscilador esta operando.
- BSY: Indica el estado de "ocupado" del dispositivo cuando ejecuta funciones, por ejemplo medición de temperatura.
-A2F-A1F : Flags de alarmas 1 y 2 (despertador) no se usan en este diseño.

El parámetro de Compensación por Envejecimiento (Aging Offset 10h) es un número con signo que permite agregar o quitar capacitores de la matriz de compensación de frecuencia del oscilador. Valores positivos incrementan la capacidad decrementando la frecuencia y valores negativos incrementan la frecuencia. Este valor permite un ajuste fino del Rejoj si fuera necesario por envejecimiento o inestabilidad térmica.

Continua...
 
Entrando ya en la programación de uC, vemos el diagrama de flujo simplificado del proceso:

Flujo.jpg
Como se ve en el punto 1) luego del encendido del equipo se inicializa el ConfigWord del uC, las puertas E/S según el diagrama visto, la USART y se colocan los estados de inicio (0 ó 1) en los pines del uC.
A continuación los puntos 2, 3 y 4 son el lazo principal del código, esto es:
2) Se leen los 18 registros internos ya vistos del módulo RTC y se cargan en un buffer de memoria de 18 bytes, con transmisión serial simultanea en TXD (LED3) para un eventual diagnóstico del proceso
3) Se procesan y transfieren los parámetros leídos en el buffer a las variables de display.
Por ejemplo en el registro 00h (Segundos) se transfieren los 4 bits del LSB a la variable SU (unidades de segundos) y los 4 bits del MSB a la variable SD (decenas de segundos). Las variables SD y SU se mostrarán en los dos dígitos de Segundos del Reloj.
En forma similar se procesan los demás valores del buffer completando todas las variables de dispaly , MD-MU(Minutos), HD-HU(Horas), DD-DU(Dia), AD-AU(Año), ED-EU(Mes).
El registro 03h (dia de la semana) se procesa luego junto con las tres variables de almanaque (24 bits, ver diagrama de los Leds de Almanaque)
4) Una vez que las variables están listas se envían a los registros de display de Reloj y Almanaque. Tal como funcionaba el Reloj en el capitulo anterior (con GPS) , el Reloj mostrará en forma alternada HMS (Hora,Minutos,Segundos) , MAD(Mes,Año,Día) y Temperatura.

Dentro del lazo ppal también se chequean los pulsadores PS(Pulsador de Selección) y PC(Pulsador de Cambio)
Si se pulsa PC , el Reloj pasa a mostrar en forma fija, HMS, MAD ó Temp cambiando con PC. Si PC se oprime mas de 5 Seg, se vuelve al display normal de HMS, MAD y Temp. en alternado automático.
Si se pulsa PS, se pasa al seteo general del Reloj (puesta en hora) En el capítulo anterior (sincronismo por GPS) esto no hacia falta pues el sincronismo y datos de tiempo eran automáticos (ver diseño). Ahora el Reloj es Stand Alone y debe ponerse en hora por lo menos una vez o cada vez que sea necesario.
El seteo o puesta en hora es simple, los dígitos parpadean individualmente en el orden SU, SD, MU, MD, HU, HD, DS, DU, DD, AU, AD ,EU, ED,
con indicación de los Leds separadores (parpadeo Verde si se setea HMS, parpadeo Rojo si se setea MAD) , seleccionándose con PS y incrementandose dentro de su rango con PC. Oprimiendo PS mas de 5 Seg, finaliza el seteo y los parametros recien ajustados se transfieren al módulo RTC y se pasa a opèración normal en el lazo ppal.
La carga exitosa de parámetros y configuración se chequea como se vio con el parpadeo de 1 Hz del LED1.

Continua...
 

Adjuntos

  • Flujo.jpg
    Flujo.jpg
    88.5 KB · Visitas: 0
Continuando por aquí, vemos algo mas en detalle el manejo de los registros de Display y Almanaque
pulsos.jpg
En la foto superior se ve el Display mostrando e indicando HMS (Horas, Minutos, Segundos) en este caso 10:29:51 y se muestra el gráfico de los 24 pulsos en CAB2 y los estados que toma DAB3 para cargar los registros de Almanaque y encender los Leds requeridos, estos Leds serán HMS (son tres), día de la semana SAB y mes JUN. Se acompaña el circuito con los tres registros de desplazamiento 74HC/HTC164.
En la foto inferior se ve el Display mostrando e indicando MAD (Mes, Año, Día)) en este caso 06/25/19.
El gráfico igualmente muestra la transmisión HMS (no MAD) con los 24 pulsos en CDB4 y los estados que toma DDB5 para cargar los registros correspondientes a HD (un bit) , HU, MD, MU, SD, SU, decodificar y encender los dígitos correspondientes a HMS 10:29:51 , indicada con los Leds separadores Verdes. Ademas se transmiten los bits RGB (en este caso Rojo) del BackLight.
El gráfico correspondiente a MAD (no se muestra) seria similar con los dígitos 06/25/19 y los Leds separadores en Rojo.

Continua...
 
Atrás
Arriba