Arduino: Daten im EEPROM speichern: Unterschied zwischen den Versionen
Zeile 36: | Zeile 36: | ||
Mit der Lesefunktion können nun die Daten aus dem EEPROM gelesen werden. | Mit der Lesefunktion können nun die Daten aus dem EEPROM gelesen werden. | ||
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size: | <syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:medium" line> | ||
// Lesen der Daten aus dem EEPROM | // Lesen der Daten aus dem EEPROM | ||
#include <EEPROM.h> | #include <EEPROM.h> | ||
Zeile 68: | Zeile 68: | ||
indem alle Speicherplätze mit 0 überschrieben werden. | indem alle Speicherplätze mit 0 überschrieben werden. | ||
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size: | <syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:medium" line> | ||
/ EEPROM beschreiben | / EEPROM beschreiben | ||
#include <EEPROM.h> | #include <EEPROM.h> |
Version vom 9. Dezember 2022, 13:29 Uhr
Autor: Prof. Dr.-Ing. Schneider
Einleitung
Der Microcontroller auf dem Arduino-Board besitzt ein eigenes internes EEPROM, in dem Daten gespeichert werden können. Diese Daten stehen auch nach einer Unterbrechung der Versorgungsspannung wieder zur Verfügung. Das interne EEPROM hat eine Größe von 512 Bytes. So wenig Speicherplatz kann somit nicht als optimaler Ablageort für ein GPS-Modul gedacht sein, das alle fünf Minuten einen Wert im Speicher ablegen will. Andernfalls kann man einfach nur eine kleine Reihe von Daten speichern. Sobald alle 512 Bytes aufgebraucht sind, wird beim Speichern wieder der erste Speicherort verwendet und der bisherige Wert überschrieben. Das Beschreiben und Lesen des internen EEPROMs erfolgt mit der EEPROMBibliothek. Diese Bibliothek besitzt die beiden Funktionen write() und read().
Beim Schreiben der Daten ins EEPROM ist zu beachten, dass jeweils nur 1 Byte, also 8 Bit, pro Adresse geschrieben werden kann. Der Adressbereich liegt zwischen 0 und 511.
/ EEPROM beschreiben
#include <EEPROM.h>
void setup()
{
for (int i = 0; i < 512; i++)
// Adresse mit Adresswert beschreiben
EEPROM.write(i, i);
}
void loop()
{
}
Quelltext 1: EEPROM: Schreiben ins interne EEPROM
Mit der Lesefunktion können nun die Daten aus dem EEPROM gelesen werden.
// Lesen der Daten aus dem EEPROM
#include <EEPROM.h>
int a = 0;
int valEE;
void setup()
{
Serial.begin(9600);
}
void loop()
{
// Daten lesen aus EEPROM
valEE = EEPROM.read(a);
// Ausgabe an serielle Schnittstelle
Serial.print(a);
Serial.print(": ");
Serial.println(valEE);
// Adresszähler erhöhen
a = a + 1;
// Falls Adresse = 512, wieder bei 0 beginnen
if (a == 512) {
a = 0;
}
delay(500);
}
Quelltext 2: EEPROM: Daten auslesen
Da vor dem erstmaligen Beschreiben des EEPROM alle Werte auf 255 gesetzt sind, sollte vor jedem Start eines Schreibvorgangs das gesamte EEPROM gelöscht werden, indem alle Speicherplätze mit 0 überschrieben werden.
/ EEPROM beschreiben
#include <EEPROM.h>
void setup()
{
for (int i = 0; i < 512; i++)
// Adresse mit Adresswert beschreiben
EEPROM.write(i, i);
}
void loop()
{
}
Quelltext 3: EEPROM: Vor jedem Start eines Schreibvorgangs das gesamte EEPROM löschen
Da der Speicherbereich im EEPROM sehr klein ist, sollten Sie sich bei der Speicherung von Daten Gedanken über den Rhythmus der Speicherung machen. Muss wirklich jede Minute ein Temperaturwert ermittelt werden oder reicht vielleicht auch ein Wert jede halbe Stunde?
Ein Punkt, den man beim Einsatz des EEPROM beachten sollte, ist die Anzahl der Schreib-/Lesezyklen. Gemäß Datenblatt des Microcontrollers liegt die Anzahl der garantierten Schreib- und Lesezyklen bei 100 000. Bei regelmäßigem Beschreiben kann dieser Wert schnell erreicht werden. Aus Erfahrung liegt die Zahl in der Praxis aber höher. Um sich keine unnötigen Probleme einzuhandeln, sollten Sie diesen Umstand dennoch im Kopf behalten.
Beim Realisieren einer Lösung zur Datenspeicherung sollte man sich also immer diese Gedanken machen. Ein Ansatz wäre das Speichern der gemessenen Werte im RAM. Nach einer bestimmten Anzahl Messwerte könnte dann ein Mittelwert ermittelt werden und dieser wird dann im EEPROM gespeichert.
Quelle: [1]
Literatur
- Brühlmann, T.: Arduino Praxiseinstieg. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: HSHL-Bib, O'Reilly-URL
→ zurück zum Hauptartikel: Arduino Praxiseinstieg