Arduino EEPROM


von Prof. Jürgen Plate

Arduino EEPROM

Ein EEPROM (Electrically Erasable Programmable Readonly Memory) ist ein elektrisch lösch- und programmierbarer Halbleiterspeicher. Die Speicherzellen lassen sich durch Spannungsimpulse programmieren und wieder löschen. Die Programmierzeit ist relativ lang und die Anzahl der Programmierzyklen begrenzt. Der ATmega-Controller des Arduino enthält auch ein EEPROM. Daten in diesem Speicher bleiben auch dann erhalten, wenn der Arduino ausgeschaltet wird. Noch wichtiger: Man kann den Inhalt des EEPROMs per Programm ändern, ohne den Arduino neu zu programmieren. Die Speicherzellen des EEPROMs speichern jeweils ein Byte, wobei das EEPROM des Arduino Uno eine Speicherkapazität von 1024 Bytes besitzt. Das klingt nach nicht besonders viel, reicht aber in jedem Fall aus, um Konfigurationsdaten, IP-Adresse, usw. zu speichern.

Die EEPROM-Bibliothek

Eine Bibliothek für den EEPROM-Zugriff ist schon standardmäßig in der Arduino-Programmierumgebung enthalten, man muss sie nur mittels

#include <EEPROM.h>
einbinden. Die Adressen der Speicherzellen des ATmega328 beginnen bei 0 und enden bei 1023. Der ATmega168 hat nur 512 Bytes.

Die EEPROM-Bibliothek stellt folgende Befehle zur Verfügung:

Beispiele

Das EEPROM mit Zufallswerten füllen:

#include <EEPROM.h>

// Groesse des EEPROMs
#define EESIZE 1024

int rnd_nr, i;
 
void setup()
  {
  Serial.begin(9600);
  Serial.println("Schreibe Zufallszahlen ...");
  for (i = 0; i < EESIZE; i++)
    {
    rnd_nr = random(255);
    EEPROM.write(i, rnd_nr);
    }
  Serial.println("Lese EEPROM ...);
  for (int a=0; a < EESIZE; a++)
    {
    rnd_nr = EEPROM.read(a);
    Serial.print("Adresse: ");
    Serial.print(a);
    Serial.print(" Inhalt: ");
    Serial.println(rnd_nr);
    delay(25);
    }
  }

void loop()
  {
  /* Empty loop */
  }
Das folgende Programm zeigt das Lesen und Schreiben von Float oder Strings.
#include <EEPROM.h>

void setup() 
  {
  float f = 123.456;              /* Float zum Schreiben */
  float g;                        /* Fuer das Lesen */
  char Hello[] = "Hello World!";  /* String */
  char Buffer[100] = {0};         /* Fuer das Lesen */
  
  int adresse = 0;              /* EEPROM-Startadresse */

  Serial.begin(9600);

  EEPROM.put(adresse, f);       /* Float schreiben */
  adresse += sizeof(float);     /* Groesse eines Float addieren */
  EEPROM.put(adresse, Hello);   /* String schreiben */

  adresse = 0;                  /* Adresse wieder auf 0 setzen */
  EEPROM.get(adresse, g);       /* Daten einlesen und Ausgeben */
  Serial.println(g, 3);
  adresse += sizeof(float); 
  EEPROM.get(adresse, Buffer);
  Serial.println(Buffer);

  /* Hexdump EEPROM */
  for (int i = 0; i < (sizeof(float)+sizeof(Hello)); i++)
    Serial.println(EEPROM[i],HEX);
  }

void loop() {
  /* Empty loop */
}


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: