Saltar al contenido
Blog Arduino, LabVIEW y Electrónica

Módulo de Tiempo Real

Módulo de tiempo real DS3231

¿Qué es un Módulo de Tiempo Real?

Un Módulo de Tiempo Real es un reloj de tiempo real, de alta precisión; consiste en un oscilador de cristal con compensación de temperatura (TCXO), en el propio circuito integrado del módulo se integra la oscilación del cristal junto con la compensación de temperatura, de esta manera se consolida la precisión del contador a largo plazo.

Módulo de tiempo Real DS3231

Es un excelente sustituto para el módulo DS1307, ya que puede mantener su uso donde es necesaria su aplicación a largo plazo, conservando la cuenta del tiempo por años, gracias al oscilador interno con compensación de temperatura.

EL módulo RTC mantiene el registro constante del año, mes, día de la semana, horas, minutos y segundos. En cuanto se refiere a el seguimiento para los meses que no tienen 31 días, al igual que el corrimiento para el año bisiesto; todo ajuste se realiza automáticamente.

El módulo se comunica con el microcontrolador a través del bus I2C, el cual cuenta con dos pines, mismos que pueden ser compartidos por varios dispositivos, como reguladores PWM, memorias EEPROM, etcétera.

Especificaciones del módulo de prueba

El módulo a utilizar en el ejemplo de prueba es el DS3231, capaz de generar señales de reloj cuadradas, con frecuencia configurable, además de contar con dos alarmas programables, para generación de interrupciones en el microcontrolador principal, en los tiempos establecidos.

Principales características:

  • Voltaje de alimentación de 3 a 5 Volts.
  • Rango de temperatura: 0°C a 40°C.
  • Precisión: ±2ppm.
  • Incluye batería de respaldo.

Ejemplo de Prueba Módulo de Tiempo Real

Para el armado de este circuito vamos a requerir de un Arduino UNO y un módulo de reloj DS3231:

Cabe aclarar que, para utilizar este módulo con el programa de Arduino, es necesario que utilicemos la librería GFRTC, la cual nos brinda completo acceso a las funciones del módulo, tales como las alarmas y el sensor de temperatura interno.

Diagrama de conexión

Circuito de prueba con Arduino UNO y módulo de reloj DS3231

//Se incluye la siguiente librería para el uso del  módulo 
#include <GFRTC.h>

void setup() {
  Serial.begin(115200);
  while (!Serial);
//La clase para el RTC
  GFRTC.begin(true);
  if (GFRTC.isPresent()) {
    Serial.println(F("RTC se encuentra conectado y listo"));
  } else {
    Serial.println(F("Favor de verificar conexión con el RTC."));
    for (;;);
  }
}

void loop() {
//Almacenamiento de datos del RTC
  struct timelib_tm datetime;
  if (GFRTC.read(datetime)) {
    Serial.print(F("OK, Time = "));
    print2digits(datetime.tm_hour);
    Serial.write(':');
    print2digits(datetime.tm_min);
    Serial.write(':');
    print2digits(datetime.tm_sec);
    Serial.print(F(", Date (D/M/Y) = "));
    Serial.print(datetime.tm_mday);
    Serial.write('/');
    Serial.print(datetime.tm_mon);
    Serial.write('/');
    Serial.print(time_tm2y2k(datetime.tm_year));
    Serial.println();
  } else {
//Error de lectura
    Serial.println(F("Error de lectura en el RTC."));
  }

  //Repetimos el proceso cada segundo
  delay(1000);
}
//Lectura de dos dígitos
void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}