
¿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.
Indice del Artículo
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
//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); }