INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DS1307 RTC - Ausschaltzeitpunkt speichern
05.12.2020, 06:10
Beitrag #1
DS1307 RTC - Ausschaltzeitpunkt speichern
Hallo,

ich habe schon seit langer Zeit die Anforderung mir den Zeitpunkt des Ausschaltens des Arduino zu merken um diesen beim nächsten Einschalten dann in ein Textfile auf der SD-Karte zu schreiben. Bisher mache ich das so, dass ich alle 5 Minuten den aktuellen Zeitstempel in eine Datei schreibe und diese beim Einschalten dann wieder auslese um den Wert in die andere Datei zu schreiben. Damit bin ich natürlich im schlechtesten Fall 4:59 Minuten daneben. Einen kleineren Zyklus möchte ich nicht wählen, da ich die SD-Karte nicht überbelasten will (ja, jede Minute ginge auch noch aber am Grundproblem ändert das nicht viel).

Nun habe ich gesehen, dass die von mir verwendete DS1307 einen Batteriegepufferten NVRAM hat der gleich gross ist wie die eigentlichen "Nutzdaten" der RTC. Nun war meine Idee, man könnte doch zyklisch im Loop die Zeitdaten der Uhr in den freien Bereich des NVRAM kopieren und diese beim Neustart des Arduino auslesen. Somit läge - bei nicht blockierendem Code - die Genauigkeit abhänging von der Programmlaufzeit / Codegrösse in der Grössenordnung von 1 Sek oder kleiner.

Hat schon jemand so was im Einsatz und könnte mir seinen Code zur Verfügung stellen? Ich habe mir das Beispiel in der "RTClib.h" schon angeschaut, verstehe aber die Adressierung nicht (da wird mal in 0xFE und 0xED geschrieben und dann in 0xBE, 0xEF, 0x01, 0x02). Ich hätte (byteweise) 0x08, 0x09, ... 0x0F gemeint.

Danke und viele Grüsse
Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 10:22
Beitrag #2
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
Bei Libs bitte immer einen Link mit angeben, da es oft mehrere mit gleichem Namen gibt.
Falls Du dieses Beispiel meinst, solltest Du dir anschauen, was Adresse ist und was Inhalt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 11:05
Beitrag #3
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
(05.12.2020 10:22)Tommy56 schrieb:  Bei Libs bitte immer einen Link mit angeben, da es oft mehrere mit gleichem Namen gibt.
Falls Du dieses Beispiel meinst, solltest Du dir anschauen, was Adresse ist und was Inhalt.

Gruß Tommy

Ja genau das meine ich. Aber ich verstehe nicht weshalb die Adressen in dem Beispiel so gewählt sind.
Wäre super wenn mir da jemand auf die Sprünge helfen könnte.
Danke.

PS: ich erwarte nicht, dass mir jemand einen kompletten und maßgefertigten Code für meine Bedürfnisse liefert (wäre aber auch nicht böse darüber;-) ), aber bitte keine Aussage wie: lese mal die Doku o. ä. ohne Angabe welche. Ich habe schon nach Lösungen gesucht aber bisher keine gefunden, daher bräuchte ich schon ein bisschen konkreteres. DANKE
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.12.2020, 12:05
Beitrag #4
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
Wo ist das Problem? Aus dem Beispiel:
Code:
rtc.writenvram(0, 0xFE); // <-- schreibt an Adresse 0 den Wert 0xFE
uint8_t writeData[4] = { 0xBE, 0xEF, 0x01, 0x02 };
rtc.writenvram(2, writeData, 4); // <-- schreibt an Adresse 2 die 4 Werte aus dem Array

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 23:04
Beitrag #5
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
(05.12.2020 12:05)Tommy56 schrieb:  Wo ist das Problem? Aus dem Beispiel:
Code:
rtc.writenvram(0, 0xFE); // <-- schreibt an Adresse 0 den Wert 0xFE
uint8_t writeData[4] = { 0xBE, 0xEF, 0x01, 0x02 };
rtc.writenvram(2, writeData, 4); // <-- schreibt an Adresse 2 die 4 Werte aus dem Array

Gruß Tommy

Super
Danke für die Erklärung.

Ich war da mal wieder falsch abgebogen und dachte die 0x?? wären die Adresse...

Dann könnte ich quasi her gehen und den Unix-Timestamp in 4 einzelne bytes zerlegen bei jedem Durchlauf im loop z. B. in Adresse 0 - 3 schreiben und nach dem Restart im Setup die Adresse 0 - 3 auslesen, wieder als unsigned long zusammenbauen und als Ausschalt-Timestamp auf die SD-Karte schreiben. Und ich hätte noch die Adressen 4-55 im NVRAM für weitere 52 Bytes andere Daten die auch nicht verloren gehen würden.
Habe ich das jetzt richtig gedacht?

Danke und Grüsse
Ralf
Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.12.2020, 23:09
Beitrag #6
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
Lerne mit struct zu arbeiten und dieses zu speichern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2020, 04:40
Beitrag #7
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
(08.12.2020 23:09)Tommy56 schrieb:  Lerne mit struct zu arbeiten und dieses zu speichern.

Gruß Tommy

Uff, da hast Du eine Aufgabe für mich... Dodgy Huh

Ich werde mal auf die Suche gehen, danke für den Tipp.

Aber prinzipiell ginge das so wie ich es beschrieben habe?

Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.12.2020, 11:39 (Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2020 11:40 von Tommy56.)
Beitrag #8
RE: DS1307 RTC - Ausschaltzeitpunkt speichern
(09.12.2020 04:40)Foto-Ralf schrieb:  Aber prinzipiell ginge das so wie ich es beschrieben habe?
Es geht einfacher:
Code:
uint32_t unixTmst = ... ;
rtc.writenvram(Adresse, (uint8_t *)&unixTmst, sizeof(unixTmst));
...
rtc.readnvram((uint8_t *)&unixTmst, sizeof(unixTmst),Adresse);

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Datei von PC auf SD-Karte speichern Karl Stanger 8 173 12.04.2021 18:03
Letzter Beitrag: Tommy56
  Keypad Eingabe in Arrays speichern Simon_St 5 515 02.02.2021 20:11
Letzter Beitrag: Simon_St
  Float Werte im EEPROM speichern Kein Progammierer 10 1.037 22.12.2020 21:20
Letzter Beitrag: Tommy56
  Sensordaten über lokales Netzwerk speichern Dave298 10 1.188 02.12.2020 22:17
Letzter Beitrag: hotsystems
  arduino elegoo uno r3 auslesen und HexFile speichern desperando 11 1.161 29.10.2020 15:11
Letzter Beitrag: GuaAck
  NRF24I01 Empfangenen Text in einer Var. speichern zebrazehn 10 1.147 19.09.2020 12:54
Letzter Beitrag: hotsystems
  Werte im Sketch in Variablen speichern Bitklopfer 4 914 06.09.2020 10:25
Letzter Beitrag: Bitklopfer
  String von SD Lesen und speichern zur Weiterverarbeitung volvodidi 1 1.140 11.02.2020 12:00
Letzter Beitrag: Tommy56
  mp3 auf Arduino Nano speichern und abspielen Thor Wallhall 9 2.266 15.01.2020 22:04
Letzter Beitrag: Tommy56
  Konstanten im EEprom oder RAM speichern? HolgerM 10 2.289 01.12.2019 00:11
Letzter Beitrag: HolgerM

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste