El DS1302 es un módulo de reloj en tiempo real (RTC) que se utiliza para mantener la fecha y la hora actualizadas, incluso cuando el dispositivo al que está conectado está apagado. Este módulo contiene un reloj-calendario en tiempo real con 31 bytes de RAM estática, lo que permite almacenar información de segundos, minutos, horas, días, semanas, meses y años.
El DS1302 se comunica con un microprocesador a través de una interfaz serial simple y está diseñado para funcionar con muy baja potencia, lo que le permite retener datos e información del reloj con un consumo mínimo de energía. Además, incluye un porta pilas para una batería de botón tipo CR2032 que asegura la actualización continua de la fecha y la hora.
Este módulo en tiempo real se utiliza cuando necesitamos guardar y leer la fecha y la hora en un proyecto. Se debe instalar la batería CR2032 para que no se pierda la configuración, ya que si el módulo se desconecta de la fuente de alimentación, estos datos se borrarán y deberán reconfigurarse antes de su uso.
Conexión a una placa Arduino
Para conectar el módulo DS1302 a un Arduino, sigue estos pasos:
-
Conexiones de Hardware:
- VCC: Conéctalo al pin de 5V del Arduino.
- GND: Conéctalo al pin GND del Arduino.
- CLK: Conéctalo al pin digital 6 del Arduino.
- DAT: Conéctalo al pin digital 7 del Arduino.
- RST: Conéctalo al pin digital 8 del Arduino.
-
Instalación de la Librería:
- Abre el Arduino IDE.
- Ve a Herramientas > Gestionar Bibliotecas....
- Busca y instala la librería Rtc by Makuna.
-
Código de Ejemplo:
- Abre un nuevo sketch en el Arduino IDE y copia el siguiente código:
#include <ThreeWire.h> #include <RtcDS1302.h> ThreeWire myWire(7, 6, 8); // DAT, CLK, RST RtcDS1302<ThreeWire> Rtc(myWire); void setup() { Serial.begin(9600); Rtc.Begin(); // Configura la fecha y hora inicial (solo la primera vez) RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); Rtc.SetDateTime(compiled); } void loop() { RtcDateTime now = Rtc.GetDateTime(); Serial.print("Fecha y Hora: "); Serial.print(now.Day()); Serial.print("/"); Serial.print(now.Month()); Serial.print("/"); Serial.print(now.Year()); Serial.print(" "); Serial.print(now.Hour()); Serial.print(":"); Serial.print(now.Minute()); Serial.print(":"); Serial.println(now.Second()); delay(1000); }
Este código inicializa el módulo DS1302 y muestra la fecha y hora en el monitor serial
Conexión a un Seeduino
Para usar este módulo con el microcontrolador Seeeduino XIAO, podemos usar la biblioteca virtuabotixRTC.h. Descargue los archivos como ZIP e instálelos a través de la administración de bibliotecas.
El siguiente código se utiliza para configurar el día y la hora. Solo se ejecuta una vez. Para utilizarlo en los proyectos, la línea myRTC.setDS1302Time(xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx, xxx) debe ser comentada o eliminada tan pronto como se haya establecido el día y la hora
(También puede probar otras bibliotecas y sus ejemplos. Si busca "DS1302" en Administración de bibliotecas, será necesario reajustar el siguiente código).#include <virtuabotixRTC.h> // Library use
//Wiring SCLK -> 3, I/O -> 2, CE -> 1
//Or CLK -> 3 , DAT -> 2, Reset -> 1
// If you change the wiring change the pins here also
virtuabotixRTC myRTC(3, 2, 1);
void setup() {
Serial.begin(9600);
// Set the current date, and time in the following format:
// seconds, minutes, hours, day of the week, day of the month, month, year.
myRTC.setDS1302Time(00, 26, 10, 3, 1, 5, 2024);
// Here you write your actual time/date as shown above but remember to
// "comment/remove" this function once you're done
// The setup is done only one time and the module will continue.
// counting it automatically
}
void loop() {
// This allows for the update of variables for time or
// accessing the individual elements.
MyRTC.updateTime();
// Start printing elements as individuals.
Serial.print("Current Date / Time: ");
// You can switch between day and month if you're using American system.
Serial.print(myRTC.dayofmonth);
Serial.print("/");
Serial.print(myRTC.month);
Serial.print("/");
Serial.print(myRTC.year);
Serial.print(" ");
Serial.print(myRTC.hours);
Serial.print(":");
Serial.print(myRTC.minutes);
Serial.print(":");
Serial.println(myRTC.seconds);
// Delay so the program doesn't print non-stop
delay(1000);
}