Hallo volvodani,
hängen meinst Du daß der Sketch nicht mehr weiterverarbeitet wird und Du den Arduino resettieren mußt?
Hat die Anzeige etwas mit dem blockieren zu tun? zb in der geleichen Stunde oder Minuten-Stundenkombination?
Wenn Du die Uhr immer mit 00:00 startest blockierst die sich nach einer zufälligen Zeit oder nach der gleichen Zeit?
Kannst Du uns einen Schaltplan geben?
Benutzt Du wirklich einen DS1308? (das ist ein DS1307 im ball grid array Gehäuse)
Zum Sketch:
Die RTC lesen:
Ich würde alle Register bein lesen maskieren und die nicht benutzten bits mittels &0x.. auf null setzen.
Während des Lesens der Zeit mit der Funktion TimeRead(){ solltest Du die RTC stoppen (CH bit im Sekunden auf 1 setzen) Sekunden , Minuten und Stunden lesen und dann die RTC wieder starten. So verhinderst Du beim Übergang von 59 auf 00 eine inkonsitenze Zeit.
Beispiel aus einer Bibiothek (written by mattt on the Arduino forum and modified by D. Sjunnesson): Im Beispiel
void DS1307::stop(void)
{
// set the ClockHalt bit high to stop the rtc
// this bit is part of the seconds byte
rtc_bcd[DS1307_SEC]=rtc_bcd[DS1307_SEC] | DS1307_CLOCKHALT;
save();
}
void DS1307::start(void)
{
// unset the ClockHalt bit to start the rtc
// TODO : preserve existing seconds
rtc_bcd[DS1307_SEC]=0;
save();
}
Später mehr.
Grüße Uwe