DS1302 Real Time Clock resettet nach Stromausfall

Hallo,

ich plane ja seit einiger Zeit, eine Zeitschaltung zu bauen. Mir ist dafür nun der DS1302 vorgeschlagen worden. Entsprechend des Links habe ich das Script mal ausprobiert. Soweit ich das richtig verstehe, ist die Batterie in dem Bauteil, um die Uhrzeit zu speichern, bzw. weiter zu zählen. Wenn ich nun jedoch einen Stromausfall simuliere, resettet der Arduino alles, und ich habe die ursprüngliche Uhrzeit, die ich mit dem Script hochgeladen habe.

Kann man das irgendwie unterbinden?

hi,

klar, wenn der arduino resettet, stellt er ja auch wieder die zeit, wie im script im setup angegeben. mach ein eigenes script, um die uhrzeit zu stellen, und lade dann erst Dein "arbeitsscript" auf den ardu. alternativ kann man feststellen, ob die zeit schon gestelt wurde, und es dann halt nicht mehr machen. mußt Du googeln oder warten, bis jemand antwortet, der das zur hand hat.

gruß stefan

Aquarium:
Wenn ich nun jedoch einen Stromausfall simuliere, resettet der Arduino alles, und ich habe die ursprüngliche Uhrzeit, die ich mit dem Script hochgeladen habe.

Kann man das irgendwie unterbinden?

Steht doch alles im Quellcode.
Und zwar sowohl im C-Code als auch als Kommentar.
Hast Du in dem Sketch vielleicht diese zwei Zeilen überlesen:

// Remove the next define, 
// after the right date and time are set.
#define SET_DATE_TIME_JUST_ONCE

Das bedeutet übersetzt: Nachdem Du die Uhrzeit mit diesem Sketch gestellt hast, sollst Du die #define Zeile auskommentieren:

//#define SET_DATE_TIME_JUST_ONCE

Löschen der Zeile ginge auch. Und den Sketch dann so geändert nochmal hochladen, dass im setup() die Zeit nicht nach jedem Reset neu gestellt wird.

Der Code zwischen den Zeilen:
#ifdef SET_DATE_TIME_JUST_ONCE
und
#endif
(dazwischen steht der Code zum Stellen der Zeit) wird nämlich nur ausgeführt (“bedingte Compilierung”, Abfrage “#ifdef”), wenn das Symbol SET_DATE_TIME_JUST_ONCE im Code definiert ist. Und das Symbol ist nicht mehr definiert, wenn Du die Zeile, in der es definiert wird, auskommentierst.

Der unveränderte Sketch führt dazu, dass sonst bei jedem Reset die im Sketch fest codierten Werte für seconds = 0; minutes = 8; hours = 10; dayofweek = 2; dayofmonth = 15; month = 4; year = 2013; gesetzt werden. Also nach jedem Stromausfall, nach jedem Öffnen des Seriellen Monitors, nach jedem Drücken des Reset-Buttons auf dem Board. Wenn Du das nicht möchtest, sondern der Sketch in der loop nur Auslesen soll, mußt Du die o.g. #define Zeile im Quellcode auskommentieren oder löschen.