Events

30.01.2022: TTN Ubidots Integration

06.02.2022: Einfacher LC-Oszillator

Eletronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Der Technik-Blog

    Arduino EEPROM Read & Write Data

    Arduino und der EEPROM

    Alex @ AEQ-WEB

    Alle Arduino Boards basierend auf dem ATMega haben einen EEPROM Speicher. EEPROM steht für "Electrically Erasable Programmable Read-Only Memory" was bedeutet, dass es sich um einen elektronisch löschbaren Speicher handelt. Je nach Mikrocontroller beträgt die Speichergröße von einigen Bytes bis hin zu einigen Kilobytes. Der EEPROM ist ein nicht flüchtiger Speicher, der seine Daten auch im stromlosen Zustand vom Arduino behält. Auch nach einem Reset oder eines erneuten aufspielen der Software bleiben alle Daten erhalten. Der Speicher ist daher eine sehr gute Lösung wenn man bestimmte Einstellungen von einem Programm am Controller dauerhaft speichern oder im laufenden Betrieb ändern möchte. Dieser Artikel beschreibt, wie verschiedene Datentypen und Parameter in den Speicher geschrieben werden und anschließend auch wieder ausgelesen werden können.

    Speicheraufbau

    Beim Arduino Uno beträgt der Speicher 1024 Byte bzw. einem Kilobyte. Aus der Informatik ist bekannt, dass ein Byte über acht Bit verfügt. Das bedeutet in einem Byte können acht Bit-Zustände (Nuller und Einser) gespeichert werden. Mit einem Byte kann man z. B. eine Zahl zwischen 0 und 255 speichern. Arbeitet man nach der ASCII-Tabelle, so kann man pro Byte auch einen Buchstaben oder ein Sonderzeichen speichern. Der Buchstabe "A" wäre dann in Dezimal die Zahl "65" was wiederum in Binär "0100 0001" ist. Diese acht Nuller und Einser ergeben dann ein Byte. Wird dieser Buchstabe in den Speicher geschrieben, wäre damit ein Byte von den 1024 Bytes verbraucht und es würden noch 1023 weitere Bytes zur Verfügung stehen. Würde man einen Text in den EEPROM speichern, so wäre hier platz für maximal 1024 Zeichen oder Buchstaben. Jedes einzelne Byte verfügt über eine eindeutige Adresse. Um ein Zeichen in den Speicher zu schreiben oder vom Speicher lesen zu können muss der Software die Adresse bekannt sein. Adressiert wird hier beginnend bei Null bis 1023.

    Werbung:

    Lebensdauer & Schreibzyklen

    Obwohl der Speicher gerade für kleine Informationen sehr gut geeignet ist, gibt es hier einige Nachteile. Der größte Nachteil ist die Lebenszeit. Der EEPROM kann zwar unendlich oft gelesen werden aber wie beim hier beim Arduino nur etwa 100.000 mal beschrieben werden. Das klingt zwar recht hoch, ist es aber nicht. Möchte man einen Messwert jede Minute in den Speicher schreiben, so hat der Speicher eine Lebenszeit von etwa 70 Tagen. Speichert man stündlich in den Speicher, so ergibt sich daraus eine Lebenszeit von etwa 10 Jahren. Aus diesem Grund sollte man hier mit bedacht auf die Lebenszeit die Speicherung von Daten optimieren. Als alternative eignet sich hier ein Flash Speicher, der allerdings nur extern an den Controller angeschlossen werden kann. Diese Speicher können beliebig oft beschrieben werden. Ein weiterer Nachteil ist die Geschwindigkeit vom EEPROM. Die Speicherung von mehreren Bytes kann oft einige Millisekunden bis hin zu Sekunden dauern, was gerade bei zeitkritischen Programmen ein Problem darstellt.

    Boolean und kleine Zahlen speichern

    Je nach Datentyp, der vom Code verarbeitet werden muss, benötigt man bestimmte Speicherplätze. Um ein Boolean (True, False bzw. 1, 0) oder eine Zahl im Bereich von 0-255 zu speichern reicht ein Byte aus. Speichert man solche Werte ab, ist die Handhabung vom EEPROM relativ einfach. Der folgende Code zeigt, wie ein einzelnes Byte auf der Adresse "0" beschreiben und ausgelesen wird.

    Integer Speichern

    Bei einem Integer handelt es sich um einen Zahlen-Datentyp. Zahlen von 0 - 65.535 können mit zwei Bytes als "unsigned short Integer" dargestellt werden. Speichert man negative Zahlen, so reicht der Wertebereich von -32.768 bis 32.767 (signed Integer). Reicht dieser Wertebereich nicht aus, so kann man den Bereich durch das verwenden eines weiteren Bytes stark vergrößern. Wichtig ist bei der Speicherung, dass die großen Zahlen auf die einzelnen Bytes richtig aufgeteilt und beim Auslesen wieder richtig zusammengesetzt werden.

    Werbung:

    String Speichern

    Auch Strings können im EEPROM abgespeichert werden. Das große Problem von einem String ist, dass es hier keine feste Speichergröße gibt und die Zeichenlänge somit dynamisch ist. Wird der gesamte EEPROM als Speicher für lediglich einen String verwendet, kann man hier einfach anhand der Länge entsprechend viele Bytes im EEPROM beschreiben. Speichert man jedoch zwei Strings in den Speicher, so kann es passieren, dass wenn der erste String länger wird, die restlichen Zeichen des zweiten Strings überschreiben werden und dieser somit beschädigt wird. Um dieses Problem zu umgehen gibt es verschiedene Lösungen. Die erste Variante wäre eine fixe Speicherzuweisung. Durch das zuweisen von bestimmten Bytes wird jedoch der String nicht mehr dynamisch und ist dadurch mit der Anzahl an Zeichen begrenzt. Eine andere Lösung wäre, dass alle nachfolgenden Strings bzw. Bytes nach hinten verschoben werden. Allerdings wird bei dieser Variante der EEPROM mehrfach belastet, was zu einer kürzeren Lebenszeit führt.

    Code Beispiele

    Die Arduino Codebeispiele beinhalten einfache Beispiele zum Lesen und Schreiben von kleinen Zahlen (Byte), Integer (16-Bit) und einen String mit einer länge von bis zu 250 Zeichen.

    EEPROM Examples
    Download

    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    Arduino LM358 PT1000 Sensor Converter

    Temperatur messen mit PT1000 & Arduino

    • Video
    • DE/EN

    PT1000 Sensoren können nicht direkt analog mit einem Mikrocontroller gemessen werden. Wie baut man einen Messwandler mit dem LM358 für den PT1000 und Arduino?

    Weiterlesen
    Arduino Anemometer Wind Sensor

    Arduino Anemometer Schaltung

    • Video
    • DE/EN

    Mit einem Mikrocontroller wie dem Arduino, einer kleinen Schaltung und entsprechender Software kann die Windgeschwindigkeit über ein Anemometer gemessen werden

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel