Cómo usar un módulo de reloj en tiempo real (DS3231)


Antes de nada, debería saber qué es un RTC (Real Time Clock), o reloj de tiempo real. Estos chips son muy frecuentes en multitud de aplicaciones, de hecho, cualquier PC tiene uno de ellos en la placa base, y está alimentado también por una pila CR2032 también, que por cierto es la que mantiene la hora y la configuración en el BIOS/UEFI y del que la coge el sistema operativo al arrancar para estar en hora (aunque ahora, con Internet, se puede usar la sincronización con servidores para mayor precisión, pero esto es otra historia…).

El RTC pues ,lo que hace es obtener mediciones de tiempo, así de simple. La diferencia con otros tipos de relojes electrónicos es que simplemente mide el tiempo, y lo hace contabilizando pulsos de señal de reloj, sabiendo la frecuencia y periodos de la misma. Además de la hora, un RTC también permite llevar una contabilidad de los días, semanas, meses y años. Es decir, la fecha completa…

En el caso del Time Clock Module (o DS3231) es un módulo que mide el tiempo, dependiente o independientemente de su tarjeta Arduino ( o derivado ) a través de su propia electrónica especializada consistente en el DS3231 acompañado de un Xtal o cristal de cuarzo que actuará como resonador, el que aporta la frecuencia. Adicionalmente, tambien se necesita una circuitería electrónica capaz de llevar el recuento y almacenar la fecha en una memoria. La circuitería debe ser capaz de contabilizar segundos, minutos, horas, días, semanas, meses y años.

Esa memoria es volátil, por eso necesita de la pila, para tener alimentación constante. Si no tiene pila o se agota, se borrará… Eso es lo que le ocurre a los PCs cuando se le agota la pila, dan una hora incorrecta. Si la configuras mientras el PC está encendido, la hora se mantendrá, ya que el RTC se está alimentando, pero es durante los procesos durante los que está apagado cuando se necesita de esa batería.

En cuanto a la forma de comunicarse con el RTC DS3131 para obtener los valores de fecha que consigue, se hace mediante bus I2C. Y para la alimentación, puedes usar 2.3 a 5.5v para el DS3231, lo que es algo más bajo que los 4.5 a 5.5v del DS1307, por lo que puede ser más eficiente energéticamente y hacer que la pila dure más.

Además, debe saber que estos módulos suelen tener una EEPROM adicional AT24C32 para almacenar algunos registros y mediciones previas, lo que es bastante práctico.

En el caso de usarlo con Arduino, la tarjeta Arduino mide el tiempo transcurrido desde que se encendió el módulo (en ms) y el módulo viene ensamblado listo para usar, con batería (suministrada).

Código

El código ha sido realizado por Gilles Thebault: http://gilles.thebault.free.fr/spip.php?article53

Biblioteca

El código necesita la biblioteca «Wire», que ya está en la tarjeta. Así que no tiene que descargarlo.

También necesitará la biblioteca «ds3231»: https://github.com/rodan/ds3231 .

Conexiones

CÓDIGO

Arduino DS3231

Este código mostrará valores en el monitor serie.

#include <Wire.h>
#include <ds3231.h>
 
struct ts t; 
 
void setup ()  {
  Serial.begin ( 9600 ) ;
  Wire.begin () ;
  DS3231_init ( DS3231_CONTROL_INTCN ) ;
  /*------------------------------------------------ ----------------------------
  ¡Para sincronizar su módulo de reloj, inserte los valores de horario a continuación!
  -------------------------------------------------- --------------------------*/
  t.hour=12; 
  t.min=30;
  t.sec=0;
  t.mday=25;
  t.mon=12;
  t.year=2019;
 
  DS3231_set ( t ) ; 
}
 
void loop vacío ()  {
  DS3231_get ( & t ) ;
  Serial.print ( "Fecha:" ) ;
  Serial.print ( t.mday ) ;
  Serial.print ( "/" ) ;
  Serial.print ( t.mon ) ;
  Serial.print ( "/" ) ;
  Serial.print ( t.year ) ;
  Serial.print ( "\t Hora:" ) ;
  Serial.print ( t.hour ) ;
  Serial.print ( ":" ) ;
  Serial.print ( t.min ) ;
  Serial.print ( "." ) ;
  Serial.println ( t.seg ) ;
 
  delay ( 1000 ) ;
}


Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.