Introducere în EEPROM în Arduino

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom înțelege ce este EEPROM, cum sunt stocate datele încorporate în EEPROM Placa Arduino Microcontrolerul și testează practic cum să scrii și să citești date pe EEPROM prin câteva exemple.

Introducere în EEPROM în Arduino

De ce EEPROM?

Înainte să întrebăm ce este EEPROM? Este foarte important să știm de ce EEPROM este utilizată pentru stocare în primul rând. Deci, avem o idee clară despre EEPROM-uri.



Există o mulțime de dispozitive de stocare disponibile în aceste zile, variind de la dispozitive de stocare magnetice, cum ar fi hard disk-urile computerului, casetofoane vechi de la școală, suport optic de stocare precum CD-uri, DVD-uri, discuri Blu-ray și memorie SSD (Solid State Drive) calculatoare și carduri de memorie etc.

Acestea sunt dispozitive de stocare în masă care pot stoca date precum muzică, videoclipuri, documente etc. de la cât de puțini Kilobyte la multi-Terabytes. Acestea sunt memorie non-volatile, ceea ce înseamnă că datele pot fi păstrate chiar și după ce alimentarea este întreruptă pe mediul de stocare.



Dispozitivul care oferă muzică liniștitoare pentru urechi sau clipuri video de tip eye-popping, cum ar fi computerul sau smartphone-ul, stochează unele date critice, cum ar fi date de configurare, date de încărcare, parole, date bio-metrice, date de conectare etc.

Aceste date menționate nu pot fi stocate în dispozitive de stocare în masă din motive de securitate și, de asemenea, aceste date ar putea fi modificate de utilizatori neintenționat, ceea ce ar putea duce la funcționarea defectuoasă a dispozitivului.

Aceste date necesită doar câțiva octeți până la câțiva megabyți, conectarea unui dispozitiv de stocare convențional precum un mediu magnetic sau optic la cipurile procesorului nu este fezabilă din punct de vedere economic și fizic.

Deci, aceste date critice sunt stocate chiar în cipurile de procesare.

Arduino nu este diferit de computer sau de smartphone-uri. Există mai multe circumstanțe în care trebuie să stocăm unele date critice care nu trebuie șterse chiar și după întreruperea alimentării, de exemplu datele senzorilor.

Până acum, ați fi avut o idee de ce avem nevoie de EEPROM pe microprocesoare și cipuri de microcontrolere.

Ce este EEPROM?

EEPROM înseamnă Memorie numai în citire programabilă ștergibilă electric. Este, de asemenea, o memorie nevolatilă care poate fi citită și scrisă octet înțelept.

Citirea și scrierea la nivel de octeți o fac diferită de alte amintiri semiconductoare. De exemplu, memoria flash: citirea, scrierea și ștergerea datelor în mod blocat.

Un bloc poate fi de câteva sute până la mii de biți, ceea ce este fezabil pentru stocarea în masă, dar nu și pentru operațiile „Read Only Memory” în microprocesoare și microcontrolere, care trebuie să acceseze date octet cu octet.

Pe placa Arduino Uno (ATmega328P) are la bord 1KB sau 1024 octeți de EEPROM. Fiecare octet poate fi accesat individual, fiecare octet are o adresă cuprinsă între 0 și 1023 (adică 1024).

Adresa (0-1023) este o locație de memorie în care datele noastre vor fi stocate.

Pe fiecare adresă puteți stoca date pe 8 biți, cifre numerice de la 0 la 255. Datele noastre sunt stocate în formă binară, deci dacă scriem numărul 255 în EEPROM va stoca cifra ca 11111111 într-o adresă și dacă stocăm zero, se va stoca ca 00000000.

De asemenea, puteți stoca text, caractere speciale, caractere alfanumerice etc. scriind un program adecvat.

Detaliile de construcție și funcționarea nu sunt discutate aici, ceea ce ar putea face acest articol lung și vă putem face să aveți somn. Îndreptați-vă spre YouTube sau Google, există articole / videoclipuri interesante privind construcția și funcționarea EEPORM.

Nu confundați EEPROM cu EPROM:

Pe scurt, EPROM este o memorie numai în citire programabilă electric, ceea ce înseamnă că poate fi programată (stochează memoria) electric, dar nu poate fi ștearsă electric.

Utilizează strălucirea puternică a luminii ultraviolete deasupra cipului de stocare, care șterge datele stocate. EEPROM a venit ca înlocuitor pentru EPROM și acum este greu de utilizat în niciun dispozitiv electronic.

Nu confundați memoria flash pentru EEPROM:

O memorie flash este o memorie semiconductoare și non-volatile, care este, de asemenea, ștearsă electric și programabilă electric, de fapt memoria flash este derivată din EEPROM. Dar accesul la memorie bloc sau, cu alte cuvinte, modul de memorie este accesat, iar construcția sa diferă de EEPROM.

Arduino Uno (microcontroler ATmega328P) are, de asemenea, 32KB de memorie flash pentru stocarea programului.

Durata de viață a EEPROM:

Ca orice alt mediu de stocare electronic, EEPROM are cicluri de citire, scriere, ștergere finite. Dar problema este că are una dintre cele mai puține durate de viață în comparație cu orice alt tip de memorie semiconductoare.

Pe EEPROM-ul lui Arduino, Atmel a susținut aproximativ 100000 (un lakh) de ciclu de scriere pe celulă. Dacă temperatura camerei este mai mică, cu atât durata de viață a EEPROM este mai mare.

Vă rugăm să rețineți că citirea datelor din EEPROM nu afectează în mod semnificativ durata de viață.

Există CI-uri EEPROM externe care pot fi interfațate cu ușurință Arduino cu o capacitate de memorie variind de la 8 KB, 128 KB, 256 KB etc., cu o durată de viață de aproximativ 1 milion de cicluri de scriere pe celulă.

Aceasta concluzionează EEPROM, acum ați fi dobândit suficiente cunoștințe teoretice despre EEPROM-uri.

În secțiunea următoare vom învăța cum să testăm practic EEPROM pe arduino.

Cum se testează EEPROM în Arduino

Pentru a pune în aplicare acest lucru, tot ce aveți nevoie este un cablu USB și o placă Arduino Uno, sunteți gata să mergeți.

Din explicațiile de mai sus am înțeles că EEPROM-urile au adresa unde stocăm datele noastre. Putem stoca 0 - 1023 locații în Arduino Uno. Fiecare locație poate găzdui 8 biți sau un octet.

În acest exemplu vom stoca date într-o adresă. Pentru a reduce complexitatea programului și pentru a menține programul scurt pe cât posibil, vom stoca un număr întreg dintr-o singură cifră (de la 0 la 9) pe o adresă de la 0 la 9.

Codul de program # 1

Acum, încărcați codul pe Arduino:
//------------------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-------------------//

IEȘIRE:

Odată ce codul este încărcat, deschideți monitorul serial.

Vă va cere să introduceți adresa cuprinsă între 0 și 9. Din ieșirea de mai sus, am introdus adresa 3. Deci, voi stoca o valoare întreagă în locația (adresa) 3.

Acum, vă va solicita să introduceți o valoare întreagă dintr-o singură cifră variind de la 0 la 9. Din ieșirea de mai sus, am introdus valoarea 5.

Deci, acum valoarea 5 va fi stocată în locația de adresă 3.

Odată ce introduceți valoarea, aceasta va scrie valoarea pe EEPROM.

Se va afișa un mesaj de succes, ceea ce înseamnă că valoarea este stocată.

După câteva secunde, va citi valoarea stocată pe adresa comentată și va afișa valoarea pe monitorul serial.

În concluzie, am scris și citit valorile din EEPROM ale microcontrolerului Arduino.

Acum vom folosi EEPROM pentru stocarea parolei.

Vom introduce o parolă cu 6 cifre (nu mai puțin sau nu mai mult), aceasta va fi stocată în 6 adrese diferite (fiecare adresă pentru fiecare cifră) și o adresă suplimentară pentru stocarea „1” sau „0”.

Odată ce ați introdus parola, adresa suplimentară va stoca valoarea „1” indicând faptul că parola este setată și programul vă va cere să introduceți parola pentru a porni LED-ul.

Dacă valoarea suplimentară stocată a adresei este „0” sau este prezentă orice altă valoare, vă va cere să creați o nouă parolă din 6 cifre.

Prin metoda de mai sus, programul poate identifica dacă ați setat deja o parolă sau dacă trebuie să creați o nouă parolă.

Dacă parola introdusă este corectă, LED-ul integrat la pinul 13 luminează, dacă parola introdusă este incorectă, LED-ul nu va aprinde, iar monitorul serial va solicita că parola dvs. este greșită.

Codul programului # 2

Acum încărcați codul:
//------------------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---------------//

IEȘIRE:

Deschideți monitorul serial, vă va solicita să creați o parolă cu 6 cifre.

Introduceți orice parolă din 6 cifre și notați-o și apăsați Enter. Acum parola a fost stocată.

Puteți fie să apăsați butonul de resetare, fie să deconectați cablul USB de la computer, ceea ce face ca alimentarea plăcii Arduino să fie întreruptă.

Acum, reconectați cablul USB, deschideți monitorul serial, care vă va solicita să introduceți parola salvată din 6 cifre.

Introduceți parola corectă, LED-ul va aprinde.

Dacă doriți să modificați parola, schimbați cifra din cod:

int passExistAdd = 200

Rândul de mai sus este adresa suplimentară despre care am discutat anterior. Schimbați oriunde de la 6 la 1023. De la 0 la 5 adrese sunt rezervate pentru stocarea parolei din 6 cifre.

Schimbarea acestei adrese suplimentare va păcăli programul că parola nu este încă creată și vă va solicita să creați o nouă parolă din 6 cifre.

Dacă aveți întrebări cu privire la acest tutorial EEPROM în Arduino, vă rugăm să exprimați în comentarii, este posibil să primiți un răspuns rapid.




Precedent: Sursa de curent de întrerupere a curentului utilizând Arduino În continuare: Mașină robot controlată de telefonul mobil folosind modulul DTMF