TinyRTC Pierde la hora con el tiempo

Holaaa gente.

Veréis, me he pillado un tinyRTC de estos de DX baratunos.
El caso es que he hecho varias pruebas (configurado varias veces) , y al final me pierde la hora con el paso del tiempo. Ayer por la tarde desconectaba Arduino y la hora seguía ahí, pero por ejemplo esta mañana ya se me ha resetado, no entiendo por que.

He probado con estos codigos:
(Conectando DS a pin2, Este codigo es algo más completo)

Otro que encontré por ahí (sin conectar a pin2):
#include <Wire.h>
#include “RTClib.h”
RTC_DS1307 RTC;
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
RTC.adjust(DateTime(DATE, TIME)); // Establece la fecha y hora (Comentar una vez establecida la hora)
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
}
void loop () {
}

La pila aparentemente funciona (Un led azul de alta luminosidad lo enciende vamos)

Un saludo y gracias

Saludos Es un caso muy común con los DS1307, me esta pasando también con uno, creo que puede tratarse de problemas de alimentación desde los 5V y el switcheo para los 3V de la batería. Pero aun no consigo resolverlo. Si hallas algo publicalo a ver si nos sirve a todos.

Yo del cabreo esta mañana he pedido 2 de estos http://www.ebay.es/itm/331447220725?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT , que CREO que son los que funcionan perfectamente, inclusos tienen para alarmas.

El caso es esta mañana le he metido la hora. Y lo he dejado encendido conectado a una LCD y marcaba la hora. Lo he desconectado media hora y seguia bien. Incluso ahora me marca bien la hora. Creo que es porque no he tocado nada en la protoboard, y tendrá algun contacto sensible o corto, o cualquier historia.

Recuerdo que cuando se va la hora la traqueteaba mucho.

Ya funciona pero no me fio... xD

el TinyRTC no tiene alarma no?

Un saludo

No tiene alarma ni tampoco el ds3231, lo bueno del ds3231 es que trae integrado un sensor de temperatura bastante bueno y con el cristal de compensación de temperatura no debes tener problemas.

igual usaba esos TinyRTC ds1307 la verdad son un dolor de cabeza se desprograma la hora cuando quiere y siempre esta desfasada por varios minutos.

Alguna vez vi que usaban la función millis para compensar el hora de un DS1307, me di valor para implementarla… pero tras usarla varios días, caí en la cuenta de que por tratar de corregir el fallo del reloj, hay que usar muchos comparadores, no solo del segundero, sino también de los minutos, hora y día.

No me quise esperar a ver a fin de mes, ni mucho menos a fin de año. En definitiva si pueden conseguir un DS3231, se evitarán dolores de cabeza. Con respecto a la alarma, se reduce a usar un comparador con la hora objetivo y activar un buzzer, e incluso algun led como señal visual

void Alarma1()
{
            if (hTiny==Alarmah){            
               if (mTiny==Alarmam){
                  if (sTiny==Alarmas){  
                    for (int KK=1; KK<=60; KK++){ 
                        FTImpl.PlaySound((((108 + 21) << 8) | 0x49));  //Campana
                        FTImpl.PlaySound((((108 + 21) << 8) | 0x49));  //Campana                     
                        FTImpl.PlaySound((((108 + 21) << 8) | 0x49));  //Campana
                                 FC = 255;  enciendeledFC();
                                 Rojo1();
                               Menu8();
                     }
                     
                    }
                  }
               }          
}

Otra ventaja es que las librerias que permiten activar el DS1307 sirven para hacer funcionar el DS3231.

PD: esta es la libreria que sirve tanto para el 1307 como para el 3231, está ajustada para funcionar con un arduino Due

El DS3231 segun el anuncio de Ebay si que tiene 2 alarmas. Tienen o no tienen? XD

Alguna vez vi que la descripción del DS3231 mencionan lo que refieres. Las librerias que hasta ahora he probado no mencionan ejemplos de como programarlas. Hoy hallé esta libreria que tal parece si puede accesar a las dos alarmas del DS3231.

Aun no la he comprobado, ya que pocas de estas librerias son compatibles con el arduino Due. Sin embargo compilé un ejemplo en el arduino Due y funciona.

|405x500

Incluso accesa a los datos del sensor de temperatura. Habrá que revisarla a fondo para ver si es que en efecto se consiguen programar las dos alarmas del 3231.

Pues si se pueden hacer interrupciones software con esto, lo borda el 3231

Interrupciones para que!! Que evento puede ser tan preciso en dias, hora, min, seg, milisegundo, microsegundo para requerir una interrupción para una alarma? De todas formas es mi punto de vista, y tu puedes hacer lo que gustes. Solo digo que con poner en algun punto de tu loop una consulta a la alarma 1 o 2 y accionar en consecuencia, o peor que puede ocurrir si no usas delay desde YA en todo el loop, es que tengas una demora de cuanto... digamos 1 mseg? (estoy suponiendo pero creo que mejor incluso).

Tienes razón en cuanto a las interrupciones.

Entonces para que queremos usar las alarmas internas del RTC? Simplemente por almacenar ahí el dia:hora:minuto?

Si programas una alarma en el RTC , imagino que habrá una instruccion tal que irtc.check_alarm() para saber si ha saltado o no, no?

Un saludo

No sé si digo una burrada, pero ¿tal vez se podría establecer largos periodos de sleep en el arduino, o incluso tener todo el montaje apagado y encender la alimentación del conjunto con la alarma? Quiero decir, ¿no sería aplicable para ahorro de energía en sistemas que deban estar encendidos puntualmente?

Esta bien pero para eso el RTC cuando se produce el evento de alarma levanta un nivel en el pin alarma, que te dice eso Serafín?
Bueno si quieres usa ese pin para chequear de que alarma se trata, y lo configuras a una interrupción del arduino o para despertarlo del sleep.
He estado mirando las librerías RTC y ninguna tiene implementado el uso de la alarma.
Al menos las que yo tengo cargadas en mi librería y son 3 y las mas usadas.

Porque no usar Arduino TImeAlarm Library?
A mi me parece una belleza de librería y no me pongo a discutir porque si con nitrosito, tiene razón pero estan estas cosas tambien para usarlas.
Mira que simple nitrosito, configuras mas alarmas de las que tiene el RTC

#include <Time.h>
#include <TimeAlarms.h>

void setup()
{
  Serial.begin(9600);
  setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011
  // create the alarms 
  Alarm.alarmRepeat(8,30,0, MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(17,45,0,EveningAlarm);  // 5:45pm every day 
  Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm);  // 8:30:30 every Saturday 

 
  Alarm.timerRepeat(15, Repeats);            // timer for every 15 seconds    
  Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds 
}

void  loop(){  
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

// functions to be called when an alarm triggers:
void MorningAlarm(){
  Serial.println("Alarm: - turn lights off");    
}

void EveningAlarm(){
  Serial.println("Alarm: - turn lights on");           
}

void WeeklyAlarm(){
  Serial.println("Alarm: - its Monday Morning");      
}

void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");       
}

void Repeats(){
  Serial.println("15 second timer");         
}

void OnceOnly(){
  Serial.println("This timer only triggers once");  
}

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println(); 
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

Todo esto lo tendrías que hacer tu con código, pero ya esta hecho, entonces porque no usarlo y dejas la inquietud de lado.
Además y es solo un consejo, si tu aplicación requiere una hora mas o menos precisa el DS1307 no es buena elección. Se corre mucho por dia y ni hablar por mes.