Chyba RTC s čipem 1307 - po pěti dnech se přenastaví čas

Ahojte všichni,
používám modul RTC s čipem 1307 nastavení a komunikace funguje dobře ale mám problém s tím, že pokud nastavím čas, vše funguje cca 5 dní, po pěti dnech začne modul ukazovat o hodinu víc a za chvíli je už čas úplně špatný. Datum zůstává správné jen se rozhodí hodiny, nevíte čím to může být?

:arrow_right: administrator: přejmenováno z "Chyba RTC"

Jestli je to tak jak pises, ze se neco deje az po 5 dnech tak si zkontroluj soft- hlavne cast kde nastavujes hodiny… tenhle IO jsem uz mockrat pouzil a nikdy jsem nemel problem s tim, ze by nedrzel cas … (delal jsem s tim pro prodejce “jednoucelovych stroju” celkem toho bylo asi 8 000 a nikdy problem )… opravdu zkontroluj vlastni firmware.

Jo dík za typ, tady mám nastavovací program pro atmegu8, který používám ale jak je asi vidět jsem začátečník a nic podezřelého tam nevidím. Ještě projdu program pro čtení, ten ale nemám momentálně u sebe.

[code]#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

int rtc[7];
char zobraz[8];
void setup()
{
Serial.begin(115200);
}
void loop()
{
RTC.get(rtc,true);
char cas[9];
sprintf(cas, “%02d.%02d.%02d %01d %02d:%02d:%02d”,rtc[4], rtc[5], rtc[6], rtc[3], rtc[2],rtc[1],rtc[0]);
Serial.println(cas);
delay(1000);
if (Serial.available() >0) { // kontrola buferu
delay(10);
char buffer[64];
int availableBytes;
availableBytes = Serial.available();
Serial.readBytes(buffer, availableBytes);
for (int pozice = 0; pozice < availableBytes; pozice++){
if (buffer[pozice] == ‘T’){
for ( int i = 0; i + pozice <= availableBytes; i++){
if (buffer[pozice + i] == ‘T’){
zobraz[pozice] = ‘T’;
if(zobraz[0] == ‘T’ && zobraz[1] == ‘T’ && zobraz[2] == ‘T’ && zobraz[3] == ‘T’ && zobraz[4] == ‘T’ && zobraz[5] == ‘T’ && zobraz[6] == ‘T’ && zobraz[7] == ‘T’){
Serial.println(“Nastavuji cas.”);
RTC.stop(); // zastavĂ­ ÄŤas
RTC.set(DS1307_SEC,0); //nastavĂ­ sekundy
RTC.set(DS1307_MIN,46); // nastavĂ­ minuty
RTC.set(DS1307_HR,20); // nastavĂ­ hodiny
RTC.set(DS1307_DOW,1); // nastaví den v týdnu
RTC.set(DS1307_DATE,1); // nastaví den v měsíci
RTC.set(DS1307_MTH,1); // nastaví měsíc
RTC.set(DS1307_YR,14); // nastavĂ­ rok
RTC.start(); // spustĂ­ ÄŤas
delay(2000);
for(int i = 0; i <= 7; i++){
zobraz* = ‘-’;
}
}
}else{
i = availableBytes;
}
}
}else{
char exit[2];
int mazani = 1;
Serial.readBytes(exit, mazani);
}
}
}
}
[/code]*

Taky mám tento RTC, ale kvůli dost velké nepřesnosti přecházím na RTC s DS3231