EEPROM beschreiben - Sensorwerte

Hallo Ihr lieben,

habe ein Frage zum beschreiben des EEPROM. Dabei ist erstmal egal ob das interne oder ein externes EEPROM.

Mein Vorhaben ist folgendes:

Ich möchte einen Datenlogger bauen (Modellflugzeug), der mir sieben Werte speichert. Nun habe ich mir Gedanken über die Größe der Daten gemacht.

Mein ATMEGA2560 hat 4096 Bytes das bedeutet ja dass ich jedes Byte mit einem Wert von 0 bis 256 beschreiben kann, richtig?

Wenn ich jetzt Beschleunigung, Höchstgeschwindigkeit, Start/Landezeit, ... in den EEPROM speichern möchte, muss ich für jeden Wert ein Byte verwenden?

Ziel soll später sein, alle Daten mit Datum abzulegen (im EEPROM) und bei Bedarf mit einer SD Karte diese "auszulesen".

Kann man auch eine Zeichenkette im EEPROM speichern?

LG

Kevin

Die Arduino EEPROM Library hat Methoden um beliebige Daten zu speichern.

Das ist auch nicht schwer per Hand. z.B. hat ein Integer zwei Bytes. Dann muss man halt beide nacheinander abspeichern.

Jeder aktuelle Computer, jede "computing device" - also auch ein Microcontroller wie der Arduino, arbeitet auf unterster logischer Ebene mit bits und bytes.

Also werden neben Zahlen, booleschen Werten etc. auch Zeichenketten in bits und bytes zerlegt, bevor man (in diesem Fall der Arduino intern) damit weiter irgend was machen kann (z.B. in ein EEPROM schreiben oder Werte aus dessen Speicherzellen auslesen).

Dementsprechend musst du vor dem Abspeichern deine Zeichenkette(n) in bytes zerlegen und als byte-Folge abspeichern, anschließend beim Lesen den Vorgang "rückgängig" machen, damit du wieder Zeichen angezeigt erhältst.

Beachte bitte, dass imho keine EEPROM Bibliothek existiert, die diesen Vorgang unmittelbar unterstützt - heißt, die Zerlegung und das Wieder-Zusammensetzen ist eine separate kleine Programmierung in deinem Sketch.

Ein Blick auf die Begriffe ASCII oder Unicode hilft weiter.

Noch etwas zum Speichern in EEPROMS:

Hast du schon eine Idee, wie häufig du Werte mitloggst, bzw. wie oft die sich wahrscheinlich in einem bestimmten Zeitraum verändern können und dann als jeweils letzte Werte abgespeichert werden sollen?

Oder schreibst du erstmal das EEPROM komplett voll, erkennst das und löschst per Überschreiben die ältesten Werte mit den jeweils neuesten?

Hintergrund meiner Fragen:
Du kannst nicht beliebig oft in eine EEPROM-Speicherzelle schreiben. Garantiert werden “nur” 100000 Schreibzyklen (es wird hier berichtet, dass man i.d.R. auf höhere Werte kommt - garantiert ist das nicht). Im Falle des Falles ist dein EEPROM dann defekt, kann nicht mehr beschrieben werden und somit müsste deine MCU/dein Arduino ausgewechselt werden, wenn es das interne EEPROM war.

Dementsprechend musst du vor dem Abspeichern deine Zeichenkette(n) in bytes zerlegen und als byte-Folge abspeichern, anschließend beim Lesen den Vorgang "rückgängig" machen, damit du wieder Zeichen angezeigt erhältst.

Bei C Strings sowieso nicht viel mehr als Arrays auf bytes (genau char) sind. Also muss man da gar nicht viel tun. Bei anderen Datentypen reicht es die erste Adresse auf byte* zu casten. Dann kann man alles als Byte ansprechen.

Aber die Arduino EEPROM Lib hat dafür Template Methoden die das mit beliebigen Datentypen automatisch erledige.

Für das EEPROM einer RTC DS3231 habe ich das hier gemacht.