Ds3231 no muestra fecha correcta

buenos dias compañeros de circuitos y soft, monte un ejemplo de rtc arduino y lcd
pero al comprobarlo no sale bien la fecha marca 1/1/2000 segui todo bien pero no veo el fallo , os pongo el .ino y una foto del montaje funcionando

//Añadimos la librería.
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>

//Constructor que recibe como parámetros los pines 
//para comunicación I2C.
DS3231  rtc(SDA, SCL);
Time  tiempo; //Declaramos una clase llamada tiempo.
LiquidCrystal_I2C lcd(0x3F,20,4);

//Declaramos las variables donde se almacenarán
//los datos de la fecha y la hora.
int dia, mes, anio, hora, minuto, segundo;

void setup()
{
rtc.begin(); //Inicializamos el rtc.
//setearDatosAlRtc(); //Actualizamos la hora del rtc.
lcd.init();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
}

void loop()
{
cargarDatos(); //Llamamos a la función encargada de cargar los datos de la fecha y la hora.
imprimirDatos(); //Llamamos a la función encargada de imprimir en pantalla los datos de la fecha y la hora.
delay(1000); //Producimos una espera de 1 segundo.
}

void setearDatosAlRtc()
{
rtc.setDOW(TUESDAY); //Seteamos el día de la semana.
rtc.setTime(8,34,0); //Seteamos la Hora:Minuto:Segundo (La Hora debe estar en el formato de 24Hs).
rtc.setDate(21,6,2022); //Seteamos el Día/Mes/Año.
delay(1000); //Producimos una espera de 1 segundo.
}

void cargarDatos()
{
tiempo = rtc.getTime(); //Cargamos los datos de la fecha y hora actual del reloj en la clase tiempo.
dia = tiempo.date; //Cargamos el día.
mes = tiempo.mon; //Cargamos el mes.
anio = tiempo.year; //Cargamos el año.
hora = tiempo.hour; //Cargamos la hora.
minuto = tiempo.min; //Cargamos el minuto.
segundo = tiempo.sec; //Cargamos el segundo.
}

void imprimirDatos() //Imprimimos los datos en pantalla.
{
lcd.setCursor(4,0);
lcd.print("TheFabro1000");  
lcd.setCursor(3,1);
lcd.print("Hoy es: ");
switch(tiempo.dow){ //La variable dow contiene el número del día de la semana.
case 1: lcd.print("Lunes"); break;
case 2: lcd.print("Martes"); break;
case 3: lcd.print("Miercoles"); break;
case 4: lcd.print("Jueves"); break;
case 5: lcd.print("Viernes"); break;
case 6: lcd.print("Sabado"); break;
case 7: lcd.print("Domingo"); break;
}  
lcd.setCursor(1,2);
lcd.print("Fecha: "); 
if(dia < 10){lcd.print("0"); lcd.print(dia);}
else lcd.print(dia);
lcd.print("/");
if(mes < 10){lcd.print("0"); lcd.print(mes);}
else lcd.print(mes);
lcd.print("/"); lcd.print(anio);
lcd.setCursor(3,3);
lcd.print("Hora: ");
if(hora < 10){lcd.print("0"); lcd.print(hora);}
else lcd.print(hora);
lcd.print(":");
if(minuto < 10){lcd.print("0"); lcd.print(minuto);}
else lcd.print(minuto);
lcd.print(":");
if(segundo < 10){lcd.print("0"); lcd.print(segundo);}
else lcd.print(segundo);
}

la pila que le puse es la lir2032 3.6v 40mah

Esta línea se usará UNA VEZ y luego se COMENTARÁ. Lee la hora de tu computadora.

// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Ejecute una vez después de insertar una batería nueva

Use esta línea UNA VEZ, luego comente. Te permite configurar la hora.

// rtc.adjust(DateTime (2000, 1, 2, 3, 4, 56)); // Tiempo ajustable para las pruebas
// rtc.adjust(DateTime(año, mes, fecha, hora, minuto, segundo));

Tienes que descomentar esta línea (quitar "//" del principio)

//setearDatosAlRtc(); //Actualizamos la hora del rtc.

Y editar esta función con los valores correctos (por ej.)

void setearDatosAlRtc() 
{ 
  rtc.setDOW(MONDAY); //Seteamos el día de la semana. 
  rtc.setTime(12,28,0); //Seteamos la Hora:Minuto:Segundo (La Hora debe estar en el formato de 24Hs). 
  rtc.setDate(3,9,2024); //Seteamos el Día/Mes/Año. 
  delay(1000); //Producimos una espera de 1 segundo. 
}

Cargas el código, dejas que corra y mientras tanto vuelves a comentar la línea anterior (vuelves a poner "//" al principio de la misma).

Subes el código nuevamente y listo.

Si necesitas volver a poner en hora, repites estos pasos.

1 Like

Máximo mil gracias, a este paso te debo una caja de 1906​:smile::smile:

1 Like

Me olvidé de algo.
Es importante que vuelvas a subir el código con la línea comentada porque de otro modo vuelve a poner la hora que programaste cada vez que se reinicia el micro.
Como la línea comentada no se compila (porque pasa a ser un comentario, no una instrucción) el RTC se mantiene en horario.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.