Einführung in das EEPROM in Arduino

Einführung in das EEPROM in Arduino

In diesem Beitrag werden wir verstehen, was EEPROM ist, wie Daten in eingebauten EEPROM gespeichert werden Arduino-Boards Mikrocontroller und auch praktisch testen, wie Daten auf EEPROM anhand einiger Beispiele geschrieben und gelesen werden.

Einführung in das EEPROM in Arduino

Warum EEPROM?

Bevor wir fragen, was EEPROM ist? Es ist sehr wichtig zu wissen, warum EEPROM überhaupt für die Speicherung verwendet wird. Damit bekommen wir eine klare Vorstellung von EEPROMs.



Heutzutage sind viele Speichergeräte verfügbar, angefangen von magnetischen Speichergeräten wie Computerfestplatten, Kassettenrekordern der alten Schule, optischen Speichermedien wie CDs, DVDs, Blu-ray-Disks und Solid-State-Speichern wie SSD (Solid State Drive) für Computer und Speicherkarten usw.



Hierbei handelt es sich um Massenspeichergeräte, mit denen Daten wie Musik, Videos, Dokumente usw. von nur wenigen Kilobyte bis zu mehreren Terabyte gespeichert werden können. Dies sind nichtflüchtige Speicher, was bedeutet, dass die Daten auch nach dem Abschalten des Speichermediums erhalten bleiben können.

Das Gerät, das ohrenberuhigende Musik oder atemberaubende Videos wie Computer oder Smartphone liefert, speichert einige wichtige Daten wie Konfigurationsdaten, Startdaten, Kennwörter, biometrische Daten, Anmeldedaten usw.



Diese genannten Daten können aus Sicherheitsgründen nicht in Massenspeichergeräten gespeichert werden, und diese Daten können von Benutzern unbeabsichtigt geändert werden, was zu Fehlfunktionen des Geräts führen kann.

Diese Daten benötigen nur wenige Bytes bis wenige Megabyte. Ein herkömmliches Speichergerät wie ein magnetisches oder optisches Medium mit Prozessorchips ist wirtschaftlich und physikalisch nicht realisierbar.

Diese kritischen Daten werden also in den Verarbeitungs-Chips selbst gespeichert.



Das Arduino unterscheidet sich nicht von Computern oder Smartphones. Unter verschiedenen Umständen müssen einige kritische Daten gespeichert werden, die auch nach dem Abschalten nicht gelöscht werden dürfen, z. B. Sensordaten.

Inzwischen hätten Sie eine Idee, warum wir EEPROM für Mikroprozessor- und Mikrocontroller-Chips benötigen.

Was ist ein EEPROM?

EEPROM steht für Electrically Erasable Programmable Read Only Memory. Es ist auch ein nichtflüchtiger Speicher, der gelesen und geschrieben werden kann byteweise.

Das Lesen und Schreiben auf Byte-Ebene unterscheidet es von anderen Halbleiterspeichern. Zum Beispiel Flash-Speicher: Lesen, Schreiben und Löschen von Daten blockweise.

Ein Block kann einige Hundert bis Tausende von Bits umfassen, was für die Massenspeicherung möglich ist, nicht jedoch für 'Nur-Lese-Speicher' -Operationen in Mikroprozessoren und Mikrocontrollern, die auf byteweise Daten zugreifen müssen.

Auf der Arduino Uno-Karte (ATmega328P) sind 1 KB oder 1024 Byte EEPROM integriert. Auf jedes Byte kann einzeln zugegriffen werden. Jedes Byte hat eine Adresse zwischen 0 und 1023 (das sind insgesamt 1024).

Die Adresse (0-1023) ist ein Speicherort, an dem unsere Daten gespeichert werden.

Auf jeder Adresse können Sie 8-Bit-Daten mit numerischen Ziffern von 0 bis 255 speichern. Unsere Daten werden in binärer Form gespeichert. Wenn wir also die Nummer 255 in das EEPROM schreiben, wird die Ziffer als 11111111 in einer Adresse gespeichert, und wenn wir Null speichern, Es wird als 00000000 gespeichert.

Sie können auch Text, Sonderzeichen, alphanumerische Zeichen usw. speichern, indem Sie ein entsprechendes Programm schreiben.

Die Konstruktionsdetails und die Funktionsweise werden hier nicht besprochen, was diesen Artikel möglicherweise langwierig macht und wir Sie möglicherweise schläfrig machen. In Richtung YouTube oder Google gibt es interessante Artikel / Videos zum Aufbau und zur Arbeitsweise von EEPORM.

Verwechseln Sie EEPROM nicht mit EPROM:

Kurz gesagt, EPROM ist ein elektrisch programmierbarer Nur-Lese-Speicher, dh er kann elektrisch programmiert (Speicher speichern), aber nicht elektrisch gelöscht werden.

Es nutzt den hellen Glanz von ultraviolettem Licht über dem Speicherchip, wodurch die gespeicherten Daten gelöscht werden. Das EEPROM wurde als Ersatz für das EPROM geliefert und wird heute kaum noch in elektronischen Geräten verwendet.

Verwechseln Sie den Flash-Speicher nicht mit dem EEPROM:

Ein Flash-Speicher ist ein Halbleiter- und ein nichtflüchtiger Speicher, der auch elektrisch löschbar und elektrisch programmierbar ist. Tatsächlich wird der Flash-Speicher vom EEPROM abgeleitet. Auf den blockweisen Speicherzugriff oder mit anderen Worten auf die Art des Speichers wird zugegriffen, und sein Aufbau unterscheidet sich vom EEPROM.

Arduino Uno (ATmega328P Microcontroller) verfügt außerdem über 32 KB Flash-Speicher für die Programmspeicherung.

Lebensdauer des EEPROM:

Wie jedes andere elektronische Speichermedium verfügt auch das EEPROM über endliche Lese-, Schreib- und Löschzyklen. Das Problem ist jedoch, dass es im Vergleich zu anderen Halbleiterspeichern eine der geringsten Lebensdauern aufweist.

Im EEPROM von Arduino behauptete Atmel etwa 100000 (ein Lakh) Schreibzyklus pro Zelle. Wenn Ihre Raumtemperatur niedriger ist, ist die Lebensdauer des EEPROM umso länger.

Bitte beachten Sie, dass das Lesen von Daten aus dem EEPROM die Lebensdauer nicht wesentlich beeinflusst.

Es gibt externe EEPROM-ICs, die mit einer Speicherkapazität von 8 KB, 128 KB, 256 KB usw. mit einer Lebensdauer von etwa 1 Million Schreibzyklen pro Zelle problemlos an Arduino angeschlossen werden können.

Damit ist das EEPROM abgeschlossen. Jetzt hätten Sie genügend theoretisches Wissen über EEPROMs erworben.

Im folgenden Abschnitt erfahren Sie, wie Sie das EEPROM auf Arduino praktisch testen können.

So testen Sie ein EEPROM in Arduino

Um dies zu implementieren, benötigen Sie lediglich ein USB-Kabel und eine Arduino Uno-Karte.

Aus den obigen Erläuterungen haben wir verstanden, dass EEPROMs eine Adresse haben, in der wir unsere Daten speichern. Wir können 0 bis 1023 Standorte in Arduino Uno speichern. Jeder Speicherort kann 8 Bit oder ein Byte aufnehmen.

In diesem Beispiel werden Daten in einer Adresse gespeichert. Um die Komplexität des Programms zu verringern und das Programm so kurz wie möglich zu halten, speichern wir eine einstellige Ganzzahl (0 bis 9) an einer Adresse von 0 bis 9.

Programmcode # 1

Laden Sie jetzt den Code auf Arduino hoch:
//------------------Program Developed by R.GIRISH-------------------//
#include
int inputAddress = 0
int inputValue = 0
int ReadData = 0
boolean Readadd = true
boolean Readval = true
void setup()
{
Serial.begin(9600)
Serial.println('Enter the address (0 to 9)')
Serial.println('')
while(Readadd)
{
inputAddress = Serial.read()
if(inputAddress > 0)
{
inputAddress = inputAddress - 48
Readadd = false
}
}
Serial.print('You have selected Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Enter the value to be stored (0 to 9)')
Serial.println('')
while(Readval)
{
inputValue = Serial.read()
if(inputValue > 0)
{
inputValue = inputValue - 48
Readval = false
}
}
Serial.print('The value you entered is: ')
Serial.println(inputValue)
Serial.println('')
delay(2000)
Serial.print('It will be stored in Address: ')
Serial.println(inputAddress)
Serial.println('')
delay(2000)
Serial.println('Writing on EEPROM.....')
Serial.println('')
EEPROM.write(inputAddress, inputValue)
delay(2000)
Serial.println('Value stored successfully!!!')
Serial.println('')
delay(2000)
Serial.println('Reading from EEPROM....')
delay(2000)
ReadData = EEPROM.read(inputAddress)
Serial.println('')
Serial.print('The value read from Address ')
Serial.print(inputAddress)
Serial.print(' is: ')
Serial.println(ReadData)
Serial.println('')
delay(1000)
Serial.println('Done!!!')
}
void loop()
{
// DO nothing here.
}
//------------------Program Developed by R.GIRISH-------------------//

AUSGABE:

Öffnen Sie nach dem Hochladen des Codes den seriellen Monitor.

Sie werden aufgefordert, eine Adresse im Bereich von 0 bis 9 einzugeben. Von der obigen Ausgabe habe ich die Adresse 3 eingegeben. Daher speichere ich einen ganzzahligen Wert an der Stelle (Adresse) 3.

Jetzt werden Sie aufgefordert, einen einstelligen ganzzahligen Wert zwischen 0 und 9 einzugeben. Von der obigen Ausgabe habe ich den Wert 5 eingegeben.

Nun wird der Wert 5 an der Adressstelle 3 gespeichert.

Sobald Sie den Wert eingegeben haben, wird der Wert in das EEPROM geschrieben.

Es wird eine Erfolgsmeldung angezeigt, dh der Wert wird gespeichert.

Nach einigen Sekunden wird der Wert gelesen, der in der kommentierten Adresse gespeichert ist, und der Wert wird auf dem seriellen Monitor angezeigt.

Abschließend haben wir die Werte aus dem EEPROM des Arduino-Mikrocontrollers geschrieben und gelesen.

Jetzt werden wir das EEPROM zum Speichern des Passworts verwenden.

Wir geben ein 6-stelliges Passwort (nicht weniger oder nicht mehr) ein, es wird in 6 verschiedenen Adressen (jede Adresse für jede Ziffer) und einer zusätzlichen Adresse zum Speichern von '1' oder '0' gespeichert.

Sobald Sie das Passwort eingegeben haben, speichert die zusätzliche Adresse den Wert „1“, der angibt, dass das Passwort festgelegt wurde, und das Programm fordert Sie auf, das Passwort einzugeben, um die LED einzuschalten.

Wenn der zusätzliche gespeicherte Adresswert '0' ist oder ein anderer Wert vorhanden ist, werden Sie aufgefordert, ein neues 6-stelliges Passwort zu erstellen.

Mit der oben beschriebenen Methode kann das Programm feststellen, ob Sie bereits ein Kennwort festgelegt haben oder ein neues Kennwort erstellen müssen.

Wenn das eingegebene Passwort korrekt ist, leuchtet die eingebaute LED an Pin 13. Wenn das eingegebene Passwort falsch ist, leuchtet die LED nicht und der serielle Monitor zeigt an, dass Ihr Passwort falsch ist.

Programmcode # 2

Laden Sie nun den Code hoch:
//------------------Program Developed by R.GIRISH---------------//
#include
int passExistAdd = 200
const int LED = 13
int inputAddress = 0
int word1 = 0
int word2 = 0
int word3 = 0
int word4 = 0
int word5 = 0
int word6 = 0
int wordAddress1 = 0
int wordAddress2 = 1
int wordAddress3 = 2
int wordAddress4 = 3
int wordAddress5 = 4
int wordAddress6 = 5
int passwordExist = 0
boolean ReadVal1 = true
boolean ReadVal2 = true
boolean ReadVal3 = true
boolean ReadVal4 = true
boolean ReadVal5 = true
boolean ReadVal6 = true
int checkWord1 = 0
int checkWord2 = 0
int checkWord3 = 0
int checkWord4 = 0
int checkWord5 = 0
int checkWord6 = 0
void setup()
{
Serial.begin(9600)
pinMode(LED, OUTPUT)
digitalWrite(LED, LOW)
passwordExist = EEPROM.read(passExistAdd)
if(passwordExist != 1)
{
Serial.println('Enter a new 6 number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
Serial.println('')
Serial.print(word1)
Serial.print(word2)
Serial.print(word3)
Serial.print(word4)
Serial.print(word5)
Serial.print(word6)
EEPROM.write(wordAddress1, word1)
EEPROM.write(wordAddress2, word2)
EEPROM.write(wordAddress3, word3)
EEPROM.write(wordAddress4, word4)
EEPROM.write(wordAddress5, word5)
EEPROM.write(wordAddress6, word6)
EEPROM.write(passExistAdd,1)
Serial.println(' Password saved Sucessfully!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
if(passwordExist == 1)
{
Serial.println('')
Serial.println('Please enter the 6 digit number password:')
while(ReadVal1)
{
word1 = Serial.read()
if(word1 > 0)
{
word1 = word1 - 48
ReadVal1 = false
}
}
while(ReadVal2)
{
word2 = Serial.read()
if(word2 > 0)
{
word2 = word2 - 48
ReadVal2 = false
}
}
while(ReadVal3)
{
word3 = Serial.read()
if(word3 > 0)
{
word3 = word3 - 48
ReadVal3 = false
}
}
while(ReadVal4)
{
word4 = Serial.read()
if(word4 > 0)
{
word4 = word4 - 48
ReadVal4 = false
}
}
while(ReadVal5)
{
word5 = Serial.read()
if(word5 > 0)
{
word5 = word5 - 48
ReadVal5 = false
}
}
while(ReadVal6)
{
word6 = Serial.read()
if(word6 > 0)
{
word6 = word6 - 48
ReadVal6 = false
}
}
checkWord1 = EEPROM.read(wordAddress1)
if(checkWord1 != word1)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord2 = EEPROM.read(wordAddress2)
if(checkWord2 != word2)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord3 = EEPROM.read(wordAddress3)
if(checkWord3 != word3)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord4 = EEPROM.read(wordAddress4)
if(checkWord4 != word4)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord5 = EEPROM.read(wordAddress5)
if(checkWord5 != word5)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
checkWord6 = EEPROM.read(wordAddress6)
if(checkWord6 != word6)
{
Serial.println('')
Serial.println('Wrong Password!!!')
Serial.println('')
Serial.println('Press Reset Button.')
while(true){}
}
digitalWrite(LED, HIGH)
Serial.println('')
Serial.println('LED is ON')
Serial.println('')
Serial.println('Press Reset Button.')
}
}
void loop()
{
}
//------------------Program Developed by R.GIRISH---------------//

AUSGABE:

Öffnen Sie den seriellen Monitor und Sie werden aufgefordert, ein 6-stelliges Kennwort zu erstellen.

Geben Sie ein 6-stelliges Passwort ein, notieren Sie es und drücken Sie die Eingabetaste. Jetzt wurde das Passwort gespeichert.

Sie können entweder die Reset-Taste drücken oder das USB-Kabel vom PC trennen, wodurch die Versorgung der Arduino-Karte unterbrochen wird.

Schließen Sie nun das USB-Kabel wieder an und öffnen Sie den seriellen Monitor. Sie werden aufgefordert, das gespeicherte 6-stellige Passwort einzugeben.

Geben Sie das richtige Passwort ein. Die LED leuchtet.

Wenn Sie das Passwort ändern möchten, ändern Sie die Ziffer aus dem Code:

int passExistAdd = 200

Die obige Zeile ist die zusätzliche Adresse, die wir zuvor besprochen haben. Ändern Sie den Wert zwischen 6 und 1023. 0 bis 5 Adressen sind für die Speicherung des 6-stelligen Passworts reserviert.

Durch Ändern dieser zusätzlichen Adresse wird das Programm getäuscht, dass das Kennwort noch nicht erstellt wurde, und Sie werden aufgefordert, ein neues 6-stelliges Kennwort zu erstellen.

Wenn Sie Fragen zu diesem EEPROM in Arduino-Tutorial haben, drücken Sie diese bitte in den Kommentaren aus. Möglicherweise erhalten Sie eine schnelle Antwort.




Zurück: Überstrom-Abschaltnetzteil mit Arduino Weiter: Handygesteuertes Roboterauto mit DTMF-Modul