Zum Inhalt springen

EEPROM - Nicht flüchtiger Speicher

starlightViewModes.switchTo

Manchmal ist es notwendig, Daten auf einen nicht flüchtigen Speicher zu speichern. Dies bedeutet, dass die Daten auch nach dem Trennen vom Strom und anschließenden Hinzufügen des Stromes immer noch gespeichert sind. Heutzutage hat jeder Computer so einen Speicher, bekannt als Festplattenspeicher, ROM bzw. SSD. Letzteres ist bereits eine spezifische Speicherart.

Das Gegenteil eines solchen Speichers ist der flüchtige Speicher, der Arbeitsspeicher, bekannt als RAM.

Theorie

Der ATmega328p verfügt bereits über einen nicht flüchtigen Speicher, dem EEPROM. Mithilfe dieser Bibliothek ist das Lesen und Schreiben eine Leichtigkeit.

Hierbei gibt es viele verschiedene Funktionen, welche unterschiedliche Anzahl an Bytes speichern / lesen:

FunktionBitByte
eeprom_read_byte()81
eeprom_read_word()162
eeprom_read_dword()324
eeprom_read_float()324

Dabei muss man immer selbst auswählen, unter welcher Adresse die Bytes gespeichert werden. Der ATmega328p verfügt über eine Speichergröße von 1kB, also von Adresse 0x000 bis 0x3FF.

Code

Lesen

Um Daten zu lesen - diese Operation ist theoretisch unlimitiert durchführbar - reicht dieser simple Code aus:

#define F_CPU 16000000
#include <avr/io.h>
#include <avr/eeprom.h>
int main(void)
{
uint16_t value = eeprom_read_word(0x00);
while (1);
}

Schreiben

Um Daten zu schreiben - diese Operation ist laut Datenblatt 100.000 Mal durchführbar - reicht dieser simple Code aus:

#define F_CPU 16000000
#include <avr/io.h>
#include <avr/eeprom.h>
int main(void)
{
int nice = 69420;
eeprom_write_word(0x00, nice);
while (1);
}