Wussten Sie, dass der Arduino Daten speichern kann, wenn er ausgeschaltet ist? Nicht die im Flash-Speicher gespeicherte Skizze. Ich spreche über variable Daten im EEPROM. Begleiten Sie mich, wenn ich Ihnen zeige, wie man es liest und schreibt und was es für Ihre Projekte tun kann.
Wenn Sie neu bei Arduino sind, lesen Sie in unserem Einsteigerhandbuch nach Erste Schritte mit Arduino: Ein Anfängerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Arduino ist eine Open-Source-Prototyping-Plattform für elektronische Geräte, die auf flexibler, benutzerfreundlicher Hardware basiert und Software. Es richtet sich an Künstler, Designer, Bastler und alle, die interaktive Objekte oder Umgebungen erstellen möchten. Weiterlesen .
Was ist ein EEPROM?
EEPROM steht für elektrisch löschbaren programmierbaren Nur-Lese-Speicher . Es ist eine Art nichtflüchtiger Speicher. Mach dir keine Sorgen, wenn du nicht verstehst was das bedeutet. Es speichert einfach Daten, auch wenn die Stromversorgung unterbrochen ist (anders als RAM A Quick & Dirty Anleitung zum RAM: Was Sie wissen müssen Eine schnelle und schmutzige Anleitung zum RAM: Was Sie wissen müssen RAM ist eine entscheidende Komponente jedes Computers, aber es kann Es wäre verwirrend zu verstehen, wenn du kein Tech-Guru bist. In diesem Beitrag werden wir es in leicht verständliche Begriffe aufgliedern. Lies mehr, das Elektrizität benötigt, um irgendwelche Daten zu behalten.
EEPROM ist in eine Vielzahl von Prozessoren eingebaut, wie das Field-Programmable Gate Array (FPGA) im Matrix Creator Matrix Creator für Raspberry Pi. Review Matrix Creator für Raspberry Pi Review Der Matrix Creator ist ein Schweizer Taschenmesser für Ihren Pi, mit 15 Sensoren, eine Reihe von Kommunikationsprotokollen, ein Ring von RGB-LEDs, ein Mikrofon-Array und vieles mehr! Lesen Sie weiter Pi Hut. Alle Arduinos haben EEPROM verfügbar, aber die Kapazität variiert je nach Modell. Stellen Sie sicher, dass Sie einen Blick in unsere Kaufanleitung werfen. Arduino Buying Guide: Welches Board sollten Sie bekommen? Arduino Einkaufsführer: Welches Board sollten Sie bekommen? Es gibt so viele verschiedene Arten von Arduino Boards da draußen, es wäre dir vergeben, wenn du verwirrt bist. Was sollten Sie für Ihr Projekt kaufen? Lassen Sie uns helfen, mit diesem Arduino Einkaufsführer! Lesen Sie mehr für weitere Details zu jedem Brett.
Wie funktioniert es?
Das EEPROM wird elektrisch gelöscht und mit Fowler-Nordheim-Tunneln programmiert. 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 ist binär? [Technologie erklärt] Was ist Binär? [Technologie erklärt] Angesichts der Tatsache, dass Binär ist so absolut grundlegend für die Existenz von Computern, scheint es seltsam Wir haben das Thema nie zuvor angegangen - also hatte ich heute gedacht, ich würde einen kurzen Überblick darüber geben, was für eine binäre ... Weiterlesen). Es kann elektronisch gelesen, gelöscht und neu geschrieben werden.
Glücklicherweise macht es die Arduino-Sprache einfach, Daten zu ändern, ohne einen Abschluss in Informatik zu benötigen.
Lebenserwartung
Während es im Arduino einfach ist, EEPROM zu verwenden, hat es eine begrenzte Lebensdauer. Das EEPROM ist für 100.000 Lese- / Löschzyklen ausgelegt. Dies bedeutet, dass Sie Daten 100.000 Mal schreiben und dann löschen / neu schreiben können, bevor das EEPROM instabil wird. In Wirklichkeit können Atmel (die Hersteller der Arduino "Chip") - Halbleiter eine höhere oder niedrigere Anzahl von Zyklen bewältigen, abhängig von den Toleranzen jedes einzelnen Prozessors.
Wenn ein Ort zu oft geschrieben und gelöscht wurde, kann er unzuverlässig werden. Es kann nicht die richtigen Daten zurückgeben oder den Wert von einem benachbarten Bit zurückgeben.
Dies mag sich wie eine Menge Schreibvorgänge anhören, aber es kann leicht sein, diese Grenze zu erreichen, wenn man programmatisch liest und schreibt (zum Beispiel in einer Schleife ). Das Lesen von Daten verschlechtert das Silizium nicht, sondern nur das Schreiben . Sie können Daten aus dem EEPROM so oft lesen, wie Sie möchten, ohne Angst!
Es ist wichtig zu beachten, dass dieses Limit für jeden Speicherort gilt. Ihr Arduino verfügt möglicherweise über 1000 oder mehr Speicherplätze im EEPROM. Wenn Sie also zu oft an einen Speicherort schreiben, ist nur dieser Standort betroffen und nicht alle anderen. Später werde ich über Wear Leveling diskutieren, das den EEPROM-Verschleiß reduzieren kann, indem Daten gleichmäßig verteilt werden - etwas, das SSDs die verbleibende Lebensdauer Ihrer SSD abschätzen kann Wie die verbleibende Lebensdauer Ihrer SSD zu schätzen ist Alle SSDs haben eine begrenzte Lebensdauer durch Schreiben Zyklen (obwohl diese Lebensdauer viel länger ist, als Sie vielleicht denken). So können Sie abschätzen, wie nahe Sie dem Ende sind. Lesen Sie mehr nutzen.
Wofür ist es nützlich?
EEPROM ist unglaublich nützlich für Ihre Arduino-Projekte. Wenn Daten gespeichert werden, selbst wenn die Stromversorgung unterbrochen wird, können Sie den Status des Arduino speichern. Vielleicht könnten Sie einen Laserturm Pew Pew bauen! Wie man einen Laserturm mit einer Arduino Pew Pew! Wie man einen Laser-Revolver mit einem Arduino baut Sind Sie gelangweilt? Könnte auch einen Laserturm bauen. Lesen Sie mehr, die sich an ihre Position erinnern oder wie viel "Munition" noch übrig ist. Sie können es verwenden, um Ihre Geräte zu steuern Control Appliances von einem Arduino: Der Start von Home Automation Control Appliances von einem Arduino: Der Start der Hausautomation Das letzte Mal habe ich Ihnen einige Möglichkeiten, Ihre Arduino-Projekte über SiriProxy, OS gesteuert Die eingebauten Sprachelemente von X und einige Automator-Skripte oder sogar ein dedizierter Hardware-Chip zur Spracherkennung. Ich ... Lesen Sie mehr und protokollieren Sie, wie oft Ihre Appliance aktiviert wurde.
EEPROM eignet sich am besten für Einstellungen oder High-Scores. Wenn Sie regelmäßig komplexe Daten schreiben möchten, sollten Sie vielleicht einen Ethernet-Schutzschild in Erwägung ziehen. Geben Sie Ihrem Arduino-Projekt einen eigenen Mini-Webserver mit einem Ethernet-Schutzschild Geben Sie Ihrem Arduino-Projekt einen eigenen Mini-Webserver mit einem Ethernet-Schutzschild Vor einiger Zeit habe ich Ihnen gezeigt, wie um ein Internet-Kontrollsystem für Ihr Arduino einzurichten - aber es musste mit einem Computer über USB verbunden bleiben, um die Internetverbindung zu erhalten .... Lesen Sie mehr (mit integriertem SD-Steckplatz) oder ein Raspberry Pi Raspberry Pi: Die Inoffizielles Tutorial Raspberry Pi: Das inoffizielle Tutorial Ob Sie ein aktueller Pi-Besitzer sind, der mehr darüber erfahren möchte oder ein potenzieller Besitzer dieses Kreditkartengeräts ist, dies ist kein Leitfaden, den Sie verpassen möchten. Weiterlesen .
Lesen und Schreiben
Nun, da die Theorie weg ist, schauen wir uns an, wie man Daten liest und schreibt! Enthalten Sie zuerst die Bibliothek (diese kommt mit der Arduino IDE):
#include
Schreibe jetzt ein paar Daten:
EEPROM.write(0, 12);
Dies schreibt die Nummer 12 in den EEPROM-Platz 0 . Jeder Schreibvorgang dauert 3, 3 Millisekunden ( ms, 1000 ms = 1 Sekunde). Beachten Sie, dass Sie keine Buchstaben ( char ) schreiben können, nur die Zahlen von 0 bis 255 sind erlaubt. Aus diesem Grund ist EEPROM ideal für Einstellungen oder hohe Punktzahlen, 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 müssen Sie mehrere Speicherplätze haben - einen Platz für jeden Buchstaben.
So lesen Sie diese Daten:
EEPROM.read(0);
Null ist die Adresse, an die Sie zuvor geschrieben haben. Wenn Sie noch nicht in eine Adresse geschrieben haben, wird der Maximalwert ( 255 ) zurückgegeben.
Es gibt einige etwas nützlichere Methoden zur Verfügung. Angenommen, Sie möchten eine Dezimalstelle oder einen String speichern:
EEPROM.put(2, "12.67");
Dies schreibt die Daten an mehrere Orte - etwas, das leicht zu schreiben wäre, aber trotzdem praktisch. Sie müssen immer noch nachverfolgen, auf wie viele Speicherorte Sie geschrieben haben, damit Sie Ihre Daten nicht versehentlich überschreiben. Sie müssen die Methode get verwenden, um diese Daten erneut abzurufen:
float f = 0.00f; EEPROM.get(2, f);
Der Wert von get wird in der Variablen float f gespeichert. Beachten Sie, wie dies mit 0.00f als Wert initialisiert wird. Der f weist den Compiler darauf hin, 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 enthält viele weitere Beispiele.
Wear Leveling
Verschleißausgleich ist eine Technik, die verwendet wird, um den Verschleiß zu verringern und die Lebensdauer des EEPROM zu erhöhen. Wenn Sie nur an einem kleinen Projekt arbeiten, brauchen Sie sich darüber keine Gedanken zu machen.
Das einfachste, was Sie tun können, um EEPROM-Lebensdauer zu erhalten, ist, 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, dass das Lesen von Daten nicht schadet). Hier ist, wie Sie das tun würden:
int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); } }
Das ist ein ziemlich einfaches Stück Code, aber es funktioniert nur für ganze Zahlen! 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 Schreibmethode, obwohl sie die Anzahl der Schreibvorgänge drastisch reduzieren kann!
Wenn Sie viele Daten schreiben müssen und sich Sorgen machen, ob Sie das Silizium abnutzen, können Sie verfolgen, wie viele Schreibvorgänge Sie ausführen, obwohl dies mehr Daten benötigt. Hier ist eine grobe Implementierung im Pseudocode:
var address = 0 var writeCount = 0 if(writeCount>75, 000) writeCount = 0 address += 1 EEPROM.write(address, data)
Sie müssen die Adresse und writeCount im EEPROM speichern (und writeCount muss auf die Adressen verteilt werden). In den meisten Fällen ist dieses Schutzniveau nicht erforderlich. Arduinos sind auch so billig, dass es für Sie einfacher ist, ein Backup zu kaufen!
Sie sollten jetzt genug wissen, um einige tolle Projekte zu machen. Lass es uns wissen, wenn du etwas cooles machst! Kannst du alle Geräte in den Bildern erkennen? Hinterlassen Sie uns einen Kommentar!