Werte einer SD Karte auslesen, in einer Variable speichern und überschreiben

Guten Tag,
Ich möchte einen Betriebsstundenzähler mit meinem Arduino Mega 2560 programmieren. Dazu habe ich mir überlegt die aktuellen Betriebsstunden auf einer SD Karte zu speichern, damit ich die Werte auch beim Ausschalten nicht verliere.
Ich habe ein bisschen herumprobiert jedoch hat nichts so wirklich funktioniert.
Gedacht habe ich es mir so:
Die Betriebsstunden auf der SD Karte werden ausgelesen und in eine long Variabel gebackt. Dann werden die neuen Betriebsstunden (die Zeit seit der Arduino an ist) und die alten (die auf der SD Karte) addiert. Alles was auf der SD Karte ist wird gelöscht und die neuen Betriebsstunden werden wieder darauf gespeichert.

Ich hoffe es ist verständlich :wink: und jemand kann mir mit Tipps, Tricks oder Ansätzen weiterhelfen.

Schonmal Vielen Dank im voraus
Björn

Um etwas beim Ausschalten nicht zu verlieren, nimmt man üblicherweise den EEPROM.
Für die 4 byte *) deines Zählers ist eine 32 GB SD-Karte etwas overkill.

Schick wäre, mit einer Diode und einem dicken Kondensator den Arduino noch so lange weiterlaufen zu lassen, dass nach dem Erkennen des Ausschaltens noch Zeit bleibt, den EEPROM zu beschreiben.
Auch willst du vermutlich nicht die Betriebsstunden des Arduino erfassen, sondern die eines anderen Geräts. Da wird der Arduino hoffentlich länger laufen als das Dings läuft.

*) Am besten statt Stunden kleinere Einheiten (Minuten, oder 56250 ms=1/64 Stunde) speichern, dann geht weniger verloren.

1 Like

das was @michael_x beschreibt wird hier öfters gefragt.
Hier gabs einen Vorschlag:

1 Like

Noch'n Tipp: Extra-Strombedarf (z.B. LCD-Beleuchtung) vor der Diode anschließen, damit da die Spannung auch schnell abfällt und früh erkannt werden kann.

im Prinzip ja, aber das kann - wenn man z.B. das LCD-Backpack verwendet doch etwas schwieriger sein. Aber das war jetzt explizit für das dort gegebene Beispiel mit LCD.

Das stimmt es ist viel einfacher so wie Ihr es beschrieben habt, mit dem eeprom die Werte zu speichern.
Vielen Dank für eure Tipps und die schnellen Antworten.
Björn

Wenn Du Betriebsstunden mißt dann hast Du auch eine RTC?
Es gibt RTC mit Batteriegebufferten RAM wie zB den DS1307. Der DS3232 wäre genauer, aber auch bedeutend schlechter zu finden bzw teurer.
Nimm doch das RAM der RTC zum abspeichern der Zeit. Da das RAM ist, kann jede Sekunde die neue Zeit abgespeichert werden.
Grüße Uwe

Die übliche RTC ist DS3231 heutzutage, genau und relativ günstig.
Die stellt allerdings nur 8 byte RAM zur Verfügung (eigentlich für zwei Alarme gedacht) aber immerhin.

8 Byte reichen doch leicht

Man kann auch den EEPROM durch einen Pin
kompatiblen FRAM ersetzen.

Gruß Tommy

Wenn man ein RTC sowieso verwendet dann kann man den Speicher dieses verwenden. Hat man kein RTC ist ein FRAM sicher eine Lösung. Da die ATmega Controller auf dem Arduino aber auch ein EEPROM haben. kann man auch dieses verwenden. Dann wegen der begrenzten möglichen Löschzyklen braucht es eine Speicherphilosophie die die Schreibanzahlen jeder Zelle vermindern.

Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.