So verwenden Sie Arduino EEPROM zum Speichern von Daten zwischen Leistungszyklen

So verwenden Sie Arduino EEPROM zum Speichern von Daten zwischen Leistungszyklen

Wussten Sie, dass das Arduino Daten speichern kann, wenn es ausgeschaltet ist? Nicht die im Flash-Speicher gespeicherte Skizze. Ich spreche von variablen Daten im EEPROM. Begleiten Sie mich, wenn ich Ihnen zeige, wie Sie es lesen und schreiben können und was es für Ihre Projekte tun kann.





Wenn Sie neu bei Arduino sind, sollten Sie unbedingt unsere Ratgeber für Anfänger .





Was ist EEPROM?

EEPROM steht für elektrisch löschbarer programmierbarer Festwertspeicher . Es ist eine Art nichtflüchtiger Speicher. Machen Sie sich keine Sorgen, wenn Sie nicht verstehen, was das bedeutet. Es speichert einfach Daten, auch wenn die Stromversorgung unterbrochen ist (im Gegensatz zu RAM , die Strom benötigt, um Daten zu speichern).





EEPROM ist in eine Vielzahl von Prozessoren eingebaut, wie zum Beispiel das feldprogrammierbare Gate-Array (FPGA), das im Matrix Creator Pi HAT verwendet wird. Alle Arduinos haben EEPROM zur Verfügung, aber die Kapazität variiert je nach Modell. Sehen Sie sich unseren Einkaufsführer an, um weitere Informationen zu jedem Board zu erhalten.

Wie funktioniert es?

EEPROM wird elektrisch gelöscht und programmiert mit Tunnelbau Fowler-Nordheim . Sie müssen die technischen Details nicht kennen, um es verwenden zu können. Die grundlegende Prämisse ist, dass Elektrizität verwendet wird, um die binären Daten zu ändern (was binär ist). Es kann elektronisch gelesen, gelöscht und neu beschrieben werden.



Zum Glück ist die Arduino-Sprache macht es einfach, Daten zu ändern, und das alles ohne einen Abschluss in Informatik.

Lebenserwartung

Obwohl es einfach ist, EEPROM im Arduino zu verwenden, hat es eine begrenzte Lebensdauer. EEPROM ist für 100.000 Lese-/Löschzyklen ausgelegt. Dies bedeutet, dass Sie 100.000 Mal Daten schreiben und dann löschen/neu schreiben können, bevor das EEPROM instabil wird. In Wirklichkeit, Atmel (die Hersteller des Arduino 'Chip') Halbleiter können eine höhere oder niedrigere Anzahl von Zyklen verarbeiten, abhängig von den Toleranzen jedes einzelnen Prozessors.





Sobald ein Standort zu oft geschrieben und gelöscht wurde, kann er unzuverlässig werden. Möglicherweise werden nicht die richtigen Daten oder der Wert eines benachbarten Bits zurückgegeben.

Dies mag nach vielen Schreibvorgängen klingen, aber es kann leicht sein, diese Grenze zu erreichen, wenn programmgesteuert gelesen und geschrieben wird (in a Schleife , zum Beispiel). Das Auslesen von Daten baut das Silizium nicht ab, nur schreiben tut . Sie können ohne Angst Daten aus dem EEPROM lesen, so viel Sie möchten!





Es ist wichtig zu beachten, dass diese Grenze für jeden Speicherplatz gilt. Ihr Arduino verfügt möglicherweise über 1.000 oder mehr Speicherorte im EEPROM. Wenn Sie also zu oft an einen Speicherort schreiben, ist nur dieser Speicherort betroffen und nicht einer der anderen. Später werde ich diskutieren Verschleißausgleich , das den EEPROM-Verschleiß durch eine gleichmäßige Datenverteilung reduzieren kann – etwas, das SSDs nutzen.

Wofür ist es nützlich?

EEPROM ist unglaublich nützlich für Ihre Arduino-Projekte. Da es sich auch dann an Daten erinnert, wenn die Stromversorgung unterbrochen wird, können Sie den Zustand des Arduino speichern. Vielleicht könnten Sie einen Laserturm bauen, der sich seine Position oder die verbleibende 'Munition' merkt. Sie können damit Ihre Geräte steuern und protokollieren, wie oft Ihr Gerät aktiviert wurde.

EEPROM eignet sich am besten für Dinge wie Einstellungen oder Highscores. Wenn Sie regelmäßig komplexe Daten schreiben möchten, ziehen Sie vielleicht ein Ethernet-Shield (mit eingebautem SD-Slot) oder einen Raspberry Pi in Betracht.

Lesen und Schreiben

Nun, da die Theorie aus dem Weg ist, schauen wir uns an, wie man einige Daten liest und schreibt! Binden Sie zuerst die Bibliothek ein (diese wird mit der Arduino IDE geliefert):

#include

Schreiben Sie nun einige Daten:

EEPROM.write(0, 12);

Das schreibt die Zahl 12 zum EEPROM-Speicherort 0 . Jeder Schreibvorgang dauert 3,3 Millisekunden ( Frau , 1000ms = 1 Sekunde). Beachten Sie, dass Sie keine Briefe schreiben können ( verkohlen ), sind nur die Zahlen von null bis 255 erlaubt. Aus diesem Grund ist EEPROM ideal für Einstellungen oder Highscores, aber nicht so gut für Spielernamen oder Wörter. Es ist möglich, Text mit dieser Methode zu speichern (Sie könnten jeden Buchstaben des Alphabets einer Zahl zuordnen), jedoch benötigen Sie mehrere Speicherplätze – einen Speicherplatz für jeden Buchstaben.

So lesen Sie diese Daten:

So koppeln Sie die Firestick-Fernbedienung
EEPROM.read(0);

Null ist die Adresse, an die Sie zuvor geschrieben haben. Wenn Sie noch nie an eine Adresse geschrieben haben, wird der Maximalwert zurückgegeben ( 255 ).

Es gibt einige etwas nützlichere Methoden. Angenommen, Sie möchten eine Dezimalstelle oder eine Zeichenfolge speichern:

EEPROM.put(2,'12.67');

Dadurch werden die Daten an mehrere Speicherorte geschrieben - etwas, das leicht selbst zu schreiben wäre, aber trotzdem praktisch. Sie müssen weiterhin verfolgen, an wie viele Speicherorte dies geschrieben wurde, damit Sie Ihre Daten nicht versehentlich überschreiben! Sie müssen die verwenden werden Methode, um diese Daten wieder abzurufen:

float f = 0.00f;
EEPROM.get(2, f);

Der Wert von get wird im Float gespeichert F Variable. Beachten Sie, wie dies mit initialisiert wird 0,00f als Wert. Die F teilt dem Compiler mit, dass Sie möglicherweise eine große Zahl in dieser Variablen speichern möchten, sodass während der Kompilierung einige zusätzliche Konfigurationen eingerichtet werden.

Die EEPROM-Dokumentation auf der Arduino-Website hat noch viele weitere Beispiele.

Verschleißausgleich

Wear Leveling ist eine Technik, die verwendet wird, um den Verschleiß zu reduzieren und die Lebensdauer des EEPROM zu erhöhen. Wenn Sie nur an einem kleinen Projekt arbeiten, müssen Sie sich möglicherweise keine Sorgen machen.

Das Einfachste, was Sie tun können, um die Lebensdauer des EEPROM zu erhalten, besteht darin, Ihre Schreibvorgänge auf einen bestimmten Ort zu beschränken. Sie können dies tun, indem Sie zuerst die Adresse lesen, und wenn der Wert, den Sie schreiben möchten, bereits vorhanden ist, müssen Sie ihn nicht erneut schreiben (denken Sie daran, das Lesen von Daten schadet nicht). So würden Sie das tun:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Das ist ein ziemlich einfacher Code, der jedoch nur für ganze Zahlen funktioniert! Anstatt das Rad neu zu erfinden, verwenden Sie die in die Arduino EEPROM-Bibliothek integrierte Funktion:

EEPROM.update(address, val);

Diese Methode hat genau die gleiche Signatur wie die schreiben -Methode, obwohl sie die Anzahl der erforderlichen Schreibvorgänge drastisch reduzieren kann!

Wenn Sie viele Daten schreiben müssen und besorgt sind, dass das Silizium abgenutzt wird, können Sie verfolgen, wie viele Schreibvorgänge Sie ausführen, obwohl dies mehr Daten verbraucht. Hier eine grobe Umsetzung in Pseudocode :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Sie müssen Adresse und writeCount im EEPROM speichern (und writeCount muss auf die Adresspositionen aufgeteilt werden). In den meisten Fällen ist dieses Schutzniveau nicht erforderlich. Arduinos sind auch so günstig, dass es für Sie möglicherweise einfacher ist, ein Backup zu kaufen!

Sie sollten jetzt genug wissen, um einige großartige Projekte zu machen. Lass es uns wissen, wenn du etwas Cooles machst! Erkennen Sie alle Geräte auf den Bildern? Hinterlassen Sie uns unten einen Kommentar!

Teilen Teilen Tweet Email 5 Tipps zum Aufladen Ihrer VirtualBox-Linux-Maschinen

Haben Sie genug von der schlechten Leistung virtueller Maschinen? Hier ist, was Sie tun sollten, um Ihre VirtualBox-Leistung zu steigern.

Weiter lesen
Verwandte Themen
  • Heimwerken
  • Arduino
  • Elektronik
Über den Autor Joe Coburn(136 veröffentlichte Artikel)

Joe hat einen Abschluss in Informatik an der University of Lincoln, Großbritannien. Er ist ein professioneller Softwareentwickler und wenn er nicht gerade Drohnen fliegt oder Musik schreibt, ist er oft beim Fotografieren oder Videoproduzieren anzutreffen.

Mehr von Joe Coburn

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich zu abonnieren