Inhaltsverzeichnis:

Lesen und Schreiben von Daten in ein externes EEPROM mit Arduino - Gunook
Lesen und Schreiben von Daten in ein externes EEPROM mit Arduino - Gunook

Video: Lesen und Schreiben von Daten in ein externes EEPROM mit Arduino - Gunook

Video: Lesen und Schreiben von Daten in ein externes EEPROM mit Arduino - Gunook
Video: So funktioniert der Arduino EEPROM | Strings, Bytes & Integer Lesen und Schreiben 2024, November
Anonim
Lesen und Schreiben von Daten in ein externes EEPROM mit Arduino
Lesen und Schreiben von Daten in ein externes EEPROM mit Arduino

EEPROM steht für Electrically Erasable Programmable Read-Only Memory.

EEPROM ist sehr wichtig und nützlich, da es sich um eine nichtflüchtige Form von Speicher handelt. Dies bedeutet, dass der EEPROM-Chip auch bei ausgeschalteter Platine das darauf geschriebene Programm behält. Wenn Sie also die Platine aus- und wieder einschalten, kann das in das EEPROM geschriebene Programm ausgeführt werden. Im Grunde speichert das EEPROM ein Programm und führt es aus, egal was passiert. Das bedeutet, Sie können ein Gerät ausschalten, es 3 Tage lang ausgeschaltet lassen und es wieder einschalten und es kann immer noch das darin programmierte Programm ausführen. So funktionieren die meisten Unterhaltungselektronikgeräte.

Dieses Projekt wird von LCSC gesponsert. Ich habe elektronische Komponenten von LCSC.com verwendet. LCSC hat es sich zur Aufgabe gemacht, eine große Auswahl an echten, hochwertigen elektronischen Komponenten zum besten Preis mit einem weltweiten Versandnetzwerk in über 200 Länder anzubieten. Melden Sie sich noch heute an und erhalten Sie $8 Rabatt auf Ihre erste Bestellung.

EEPROM ist auch insofern sehr effizient, als einzelne Bytes in einem herkömmlichen EEPROM unabhängig gelesen, gelöscht und neu geschrieben werden können. Bei den meisten anderen Arten von nichtflüchtigem Speicher ist dies nicht möglich. Mit seriellen EEPROM-Geräten wie dem EEPROM der 24-Serie von Microchip können Sie jedem Gerät, das I²C spricht, mehr Speicher hinzufügen.

Lieferungen

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. 16 MHz Quarz
  4. Steckbrett
  5. Widerstand 4,7 kOhm x 2
  6. Kondensator 22 pF x 2

Schritt 1: EEPROM-Grundlagen

EEPROM-Grundlagen
EEPROM-Grundlagen

Der Microchip 24LC2512-Chip kann in einem 8-Pin-DIP-Gehäuse erworben werden. Die Pins des 24LC512 sind ziemlich einfach und bestehen aus Power (8), GND (4), Schreibschutz (7), SCL/SDA (6, 5) und drei Adresspins (1, 2, 3).

Eine kurze Geschichte von ROM

Frühe Computer vom Typ "gespeichertes Programm" - wie Tischrechner und Tastaturinterpreter - begannen, ROM in Form von Diodenmatrix-ROM zu verwenden. Dies war ein Speicher aus diskreten Halbleiterdioden, die auf einer speziell organisierten Platine platziert waren. Dies machte mit dem Aufkommen integrierter Schaltkreise Platz für Mask ROM. Masken-ROM war dem Dioden-Matrix-ROM sehr ähnlich, nur wurde es in einem viel kleineren Maßstab implementiert. Dies bedeutete jedoch, dass man nicht einfach ein paar Dioden mit einem Lötkolben herumbewegen und neu programmieren konnte. Masken-ROM musste vom Hersteller programmiert werden und war danach nicht mehr veränderbar.

Leider war Mask ROM teuer und die Herstellung dauerte lange, da jedes neue Programm ein brandneues Gerät erforderte, das von einer Gießerei hergestellt werden musste. 1956 wurde dieses Problem jedoch mit der Erfindung des PROM (Programmable ROM) gelöst, das es Entwicklern ermöglichte, die Chips selbst zu programmieren. Das bedeutete, dass Hersteller Millionen des gleichen unprogrammierten Geräts produzieren konnten, was es billiger und praktischer machte. PROM konnte jedoch mit einem Hochspannungs-Programmiergerät nur einmal beschrieben werden. Nachdem ein PROM-Gerät programmiert wurde, gab es keine Möglichkeit, das Gerät in seinen unprogrammierten Zustand zurückzusetzen.

Dies änderte sich 1971 mit der Erfindung des EPROM (Erasable Programmable ROM), das neben dem Hinzufügen eines weiteren Buchstabens zum Akronym die Möglichkeit mit sich brachte, das Gerät zu löschen und mit einer starken UV-Lichtquelle in einen "leeren" Zustand zu versetzen. Richtig, man musste den IC hell anstrahlen, um ihn neu zu programmieren, wie cool ist das denn? Nun, es stellt sich heraus, dass es ziemlich cool ist, es sei denn, Sie sind ein Entwickler, der an Firmware arbeitet. In diesem Fall möchten Sie das Gerät wirklich mit elektrischen Signalen neu programmieren. Dies wurde 1983 mit der Entwicklung von EEPROM (Electrically Erasable Programmable ROM) endlich Realität und damit kommen wir zu der heutigen unhandlichen Abkürzung.

Schritt 2: Macken von EEPROM

Es gibt zwei Hauptnachteile von EEPROM als Verfahren zur Datenspeicherung. In den meisten Anwendungen überwiegen die Vorteile die Nachteile, aber Sie sollten sich dessen bewusst sein, bevor Sie EEPROM in Ihr nächstes Design integrieren.

Zuallererst begrenzt die Technologie, die EEPROM ermöglicht, auch die Anzahl der Überschreibvorgänge. Dies hat damit zu tun, dass Elektronen in den Transistoren, aus denen das ROM besteht, gefangen werden und sich aufbauen, bis die Ladungsdifferenz zwischen einer "1" und einer "0" nicht mehr erkennbar ist. Aber keine Sorge, die meisten EEPROMs haben eine maximale Anzahl von Neuschreibvorgängen von 1 Million oder mehr. Solange Sie nicht kontinuierlich in das EEPROM schreiben, ist es unwahrscheinlich, dass Sie dieses Maximum erreichen. Zweitens wird das EEPROM nicht gelöscht, wenn Sie es von der Stromversorgung trennen, aber es speichert Ihre Daten nicht auf unbestimmte Zeit. Elektronen können aus den Transistoren und durch den Isolator driften, wodurch das EEPROM mit der Zeit effektiv gelöscht wird. Dies geschieht jedoch normalerweise im Laufe der Jahre (obwohl es durch Hitze beschleunigt werden kann). Die meisten Hersteller sagen, dass Ihre Daten auf EEPROM 10 Jahre oder länger bei Raumtemperatur sicher sind. Und noch etwas sollten Sie bei der Auswahl eines EEPROM-Geräts für Ihr Projekt beachten. Die EEPROM-Kapazität wird in Bits und nicht in Bytes gemessen. Ein 512K EEPROM hält 512Kbit Daten, also nur 64KB.

Schritt 3: Arduino-Hardwareanschluss

Arduino-Hardwareanschluss
Arduino-Hardwareanschluss
Arduino-Hardwareanschluss
Arduino-Hardwareanschluss

Okay, jetzt, da wir wissen, was EEPROM ist, lassen Sie uns eins anschließen und sehen, was es tun kann! Um unser Gerät zum Sprechen zu bringen, müssen wir sowohl Strom als auch serielle I²C-Leitungen anschließen. Insbesondere dieses Gerät läuft mit 5VDC, also verbinden wir es mit dem 5V-Ausgang unseres Arduino UNO. Außerdem benötigen die I²C-Leitungen Pull-Up-Widerstände, damit die Kommunikation korrekt erfolgt. Der Wert dieser Widerstände hängt von der Kapazität der Leitungen und der Frequenz ab, die Sie übertragen möchten, aber eine gute Faustregel für unkritische Anwendungen ist es, ihn nur im kΩ-Bereich zu halten. In diesem Beispiel verwenden wir 4,7 kΩ Pullup-Widerstände.

An diesem Gerät befinden sich drei Pins zur Auswahl der I²C-Adresse, auf diese Weise können Sie mehr als ein EEPROM auf dem Bus haben und diese jeweils unterschiedlich adressieren. Sie könnten sie einfach alle erden, aber wir werden sie verdrahten, damit wir später im Tutorial ein Gerät mit höherer Kapazität einsetzen können.

Wir verwenden ein Steckbrett, um alles miteinander zu verbinden. Das Diagramm unten zeigt den korrekten Anschluss für die meisten I²C-EEPROM-Geräte, einschließlich des von uns verkauften EEPROMs der 24-Serie von Microchip.

Schritt 4: Lesen und Schreiben

Wenn Sie ein EEPROM in Verbindung mit einem Mikrocontroller verwenden, müssen Sie meistens nicht den gesamten Inhalt des Speichers auf einmal sehen. Sie werden nur hier und da nach Bedarf Bytes lesen und schreiben. In diesem Beispiel werden wir jedoch eine ganze Datei in das EEPROM schreiben und dann alles wieder auslesen, damit wir sie auf unserem Computer anzeigen können. Dies soll uns mit der Idee der Verwendung von EEPROM vertraut machen und uns auch ein Gefühl dafür geben, wie viele Daten wirklich auf ein kleines Gerät passen.

Schreibe etwas

Unsere Beispielskizze nimmt einfach jedes Byte, das über den seriellen Port eingeht, und schreibt es in das EEPROM, wobei wir verfolgen, wie viele Bytes wir in den Speicher geschrieben haben.

Das Schreiben eines Speicherbytes in das EEPROM erfolgt im Allgemeinen in drei Schritten:

  1. Senden Sie das höchstwertige Byte der Speicheradresse, in die Sie schreiben möchten.
  2. Senden Sie das niedrigstwertige Byte der Speicheradresse, in die Sie schreiben möchten.
  3. Senden Sie das Datenbyte, das Sie an dieser Stelle speichern möchten.

Es gibt wahrscheinlich ein paar Schlüsselwörter, die es nur erklären:

Speicheradressen

Wenn Sie sich vorstellen, dass alle Bytes in einem 512-Kbit-EEPROM in einer Reihe von 0 bis 64000 stehen - weil ein Byte 8 Bit hat und Sie daher 64000 Bytes auf ein 512-Kbit-EEPROM passen können - dann ist eine Speicheradresse der richtige Platz dafür Zeile, in der Sie ein bestimmtes Byte finden würden. Wir müssen diese Adresse an das EEPROM senden, damit es weiß, wo das gesendete Byte abgelegt werden soll.

Wichtigste und am wenigsten signifikante Bytes

Da in einem 256-Kbit-EEPROM 32000 mögliche Plätze vorhanden sind - und weil 255 die größte Zahl ist, die Sie in einem Byte codieren können - müssen wir diese Adresse in zwei Bytes senden. Zuerst senden wir das Most Significant Byte (MSB) - in diesem Fall die ersten 8 Bit. Dann senden wir das Least Significant Byte (LSB) - die zweiten 8 Bit. Wieso den? Denn so erwartet das Gerät, sie zu empfangen, das ist alles.

Seite schreiben

Das Schreiben von jeweils einem Byte ist in Ordnung, aber die meisten EEPROM-Geräte verfügen über einen sogenannten "Seitenschreibpuffer", der es Ihnen ermöglicht, mehrere Bytes gleichzeitig auf die gleiche Weise wie ein einzelnes Byte zu schreiben. Wir werden dies in unserer Beispielskizze nutzen. Das EEPROM verwendet einen internen Zähler, der den Speicherplatz mit jedem folgenden empfangenen Datenbyte automatisch erhöht. Nachdem eine Speicheradresse gesendet wurde, können wir ihr bis zu 64 Byte Daten folgen. Das EEPROM nimmt (richtig) an, dass eine Adresse von 312 gefolgt von 10 Bytes Byte 0 an Adresse 312, Byte 1 an Adresse 313, Byte 2 an Adresse 314 usw. aufzeichnen wird.

Etwas lesen

Das Lesen aus dem EEPROM erfolgt grundsätzlich in drei Schritten wie das Schreiben in das EEPROM:

  1. Senden Sie das höchstwertige Byte der Speicheradresse, in die Sie schreiben möchten.
  2. Senden Sie das niedrigstwertige Byte der Speicheradresse, in die Sie schreiben möchten.
  3. Fragen Sie an dieser Stelle nach dem Datenbyte.

Schritt 5: Schaltpläne und Code

Schaltpläne und Code
Schaltpläne und Code

Code:

#enthalten

#define eeprom 0x50 //definiert die Basisadresse des EEPROM

Leere Einrichtung () {

Wire.begin(); //erzeugt ein Wire-Objekt

Serial.begin (9600);

vorzeichenlose int-Adresse = 0; //erste Adresse des EEPROM

Serial.println ("Wir schreiben die Postleitzahl 22222, eine Postleitzahl"); for(Adresse = 0; Adresse< 5; Adresse++) writeEEPROM(eeprom, Adresse, '2'); // Schreibt 22222 in das EEPROM

for (Adresse = 0; Adresse < 5; Adresse ++) {Serial.print (readEEPROM (eeprom, Adresse), HEX); } }

Leere Schleife () {

/*Es gibt nichts in der Funktion loop(), weil wir nicht möchten, dass das Arduino immer wieder dasselbe in das EEPROM schreibt. Wir wollen nur einen einmaligen Schreibvorgang, daher wird die loop()-Funktion bei EEPROMs vermieden.*/ }

// definiert die writeEEPROM-Funktion

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data) { Wire.beginTransmission(deviceaddress); Wire.write((int)(eeaddress >> 8)); // schreibt das MSB Wire.write ((int) (eeaddress & 0xFF)); // schreibt das LSB Wire.write (Daten); Wire.endTransmission(); }

// definiert die readEEPROM-Funktion

byte readEEPROM(int deviceaddress, unsigned int eeaddress) { byte rdata = 0xFF; Wire.beginTransmission(Geräteadresse); Wire.write((int)(eeaddress >> 8)); // schreibt das MSB Wire.write ((int) (eeaddress & 0xFF)); // schreibt das LSB Wire.endTransmission(); Wire.requestFrom(Geräteadresse, 1); if (Wire.available()) rdata = Wire.read(); rdata zurückgeben; }

Empfohlen: