Úvod do EEPROM v Arduine

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto príspevku pochopíme, čo je to EEPROM, ako sa ukladajú údaje o zabudovanej EEPROM Doska Arduino Mikrokontrolér a tiež na niekoľkých príkladoch prakticky vyskúša, ako zapisovať a čítať údaje na EEPROM.

Úvod do EEPROM v Arduine

Prečo EEPROM?

Predtým, ako sa spýtame, čo je EEPROM? Je veľmi dôležité vedieť, prečo sa pamäť EEPROM používa na prvom mieste. Aby sme dostali jasnú predstavu o EEPROM.



V dnešnej dobe je k dispozícii veľa pamäťových zariadení, od magnetických pamäťových zariadení, ako sú pevné disky počítačov, kazetové magnetofóny zo starej školy, optické pamäťové médiá ako CD, DVD, Blu-ray disky a polovodičové pamäte ako SSD (Solid State Drive) pre počítače a pamäťové karty atď.

Jedná sa o veľkokapacitné pamäťové zariadenie, ktoré dokáže ukladať údaje, ako je hudba, videá, dokumenty atď., Od minimálneho počtu kilobajtov po viac terabajtov. Jedná sa o energeticky nezávislú pamäť, čo znamená, že dáta je možné uchovať aj po vypnutí napájacieho média.



Zariadenie, ktoré dodáva hudbu upokojujúcu ucho alebo videá, ktoré vyrážajú do očí, ako napríklad počítač alebo smartphone, ukladá niektoré dôležité údaje, ako sú konfiguračné údaje, údaje o zavedení systému, heslá, biometrické údaje, prihlasovacie údaje atď.

Uvedené údaje nie je možné z bezpečnostných dôvodov uložiť do veľkokapacitných pamäťových zariadení a tiež tieto údaje môžu používatelia neúmyselne upraviť, čo by mohlo viesť k poruche zariadenia.

Tieto dáta zaberú iba pár bajtov až niekoľko megabajtov, pripojenie konvenčného úložného zariadenia, ako je magnetické alebo optické médium, k čipom procesora, je ekonomicky a fyzicky nemožné.

Tieto kritické údaje sú uložené v samotných čipoch na spracovanie.

Arduino sa nelíši od počítača alebo smartfónu. Existuje niekoľko okolností, keď musíme uchovať niektoré dôležité údaje, ktoré sa nesmú vymazať ani po vypnutí napájania, napríklad údaje zo snímačov.

Teraz by ste už mali predstavu, prečo potrebujeme EEPROM na čipoch mikroprocesorov a mikrokontrolérov.

Čo je to EEPROM?

EEPROM je skratka pre elektricky mazateľnú programovateľnú pamäť iba na čítanie. Je to tiež energeticky nezávislá pamäť, ktorá sa dá čítať a zapisovať byte múdry.

Čítanie a zápis na úrovni bajtov ju odlišuje od ostatných polovodičových pamätí. Napríklad flash pamäť: čítanie, zápis a mazanie údajov blokovým spôsobom.

Blok môže byť niekoľko stoviek až tisícov bitov, čo je možné pre veľkokapacitné úložisko, ale nie pre operácie „Read Only Memory“ v mikroprocesoroch a mikrokontroléroch, ktoré potrebujú prístup k bajtom po bajtových dátach.

Na doske Arduino Uno (ATmega328P) má na doske 1 kB alebo 1024 bajtov EEPROM. Ku každému bajtu je možné pristupovať individuálne. Každý bajt má adresu v rozsahu od 0 do 1023 (to je spolu 1024).

Adresa (0-1023) je pamäťové miesto, kde budú uložené naše údaje.

Na každú adresu môžete uložiť 8-bitové údaje, číselné číslice od 0 do 255. Naše údaje sú uložené v binárnej podobe, takže ak napíšeme číslo 255 do EEPROM, uloží sa číslica ako 11111111 na adresu a ak uložíme nulu, bude sa ukladať ako 00000000.

Môžete tiež uložiť text, špeciálne znaky, alfanumerické znaky atď. Napísaním príslušného programu.

Nie sú tu diskutované konštrukčné podrobnosti a fungovanie, kvôli ktorým by mohol byť tento článok zdĺhavý a my by sme vás mohli uspať. Choďte na YouTube alebo Google, sú tu zaujímavé články / videá týkajúce sa konštrukcie a fungovania EEPORM.

Nezamieňajte EEPROM s EPROM:

Stručne povedané, EPROM je elektricky programovateľná pamäť iba na čítanie, čo znamená, že ju možno programovať (ukladať do pamäte) elektricky, ale nemožno ju elektricky vymazať.

Využíva jasný lesk ultrafialového žiarenia nad úložným čipom, ktorý vymaže uložené údaje. EEPROM prišiel ako náhrada za EPROM a teraz sa takmer nepoužíva v žiadnych elektronických zariadeniach.

Nezamieňajte Flash pamäť pre EEPROM:

Flash pamäť je polovodičová a energeticky nezávislá pamäť, ktorá je tiež elektricky vymazateľná a elektricky programovateľná, v skutočnosti je flash pamäť odvodená z EEPROM. Ale blokovaný prístup do pamäte alebo inými slovami, prístup do pamäte a jeho konštrukcia sa odlišuje od EEPROM.

Arduino Uno (mikrokontrolér ATmega328P) tiež disponuje 32 kB flash pamäte pre ukladanie programov.

Životnosť EEPROM:

Ako každé iné elektronické pamäťové médium, aj EEPROM má konečné cykly čítania, zápisu a mazania. Ale problém je, že má jednu z najmenších životností v porovnaní s inými druhmi polovodičových pamätí.

Na Arduino EEPROM Atmel požadoval asi 100 000 (jeden lakh) cyklus zápisu na bunku. Ak je vaša izbová teplota nižšia, tým vyššia je životnosť EEPROM.

Upozorňujeme, že načítanie údajov z EEPROM nemá výrazný vplyv na životnosť.

Existujú externé integrované obvody EEPROM, s ktorými je možné ľahko prepojiť Arduino s kapacitou pamäte od 8 kB, 128 kB, 256 kB atď., S životnosťou približne 1 milión cyklov zápisu na bunku.

To je záver EEPROM, teraz by ste získali dostatok teoretických vedomostí o EEPROM.

V nasledujúcej časti sa dozvieme, ako prakticky otestovať EEPROM na arduino.

Ako testovať EEPROM v Arduine

Na implementáciu potrebujete iba USB kábel a dosku Arduino Uno, ste pripravení.

Z vyššie uvedených vysvetlení sme pochopili, že EEPROM majú adresu, kam ukladáme naše údaje. V Arduino Uno môžeme uložiť 0 až 1023 miest. Každé umiestnenie môže obsahovať 8 bitov alebo jeden bajt.

V tomto príklade budeme ukladať údaje na adresu. Aby sme znížili zložitosť programu a udržali program čo najkratší, budeme ukladať jednociferné celé číslo (0 až 9) na adresu od 0 do 9.

Programový kód č. 1

Teraz nahrajte kód do Arduina:
//------------------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-------------------//

VÝKON:

Po načítaní kódu otvorte sériový monitor.

Požiada vás o zadanie adresy v rozsahu od 0 do 9. Z vyššie uvedeného výstupu som zadal adresu 3. Takže do umiestnenia (adresy) 3 uložím celočíselnú hodnotu.

Teraz vás vyzve na zadanie jednocifernej celočíselnej hodnoty v rozsahu od 0 do 9. Z vyššie uvedeného výstupu som zadal hodnotu 5.

Teraz bude teda hodnota 5 uložená v umiestnení adresy 3.

Po zadaní hodnoty sa hodnota zapíše na EEPROM.

Ukáže správu o úspechu, čo znamená, že hodnota je uložená.

Po niekoľkých sekundách prečíta hodnotu, ktorá je uložená na komentovanej adrese, a zobrazí ju na sériovom monitore.

Na záver sme napísali a prečítali hodnoty z EEPROM mikrokontroléra Arduino.

Teraz použijeme EEPROM na ukladanie hesla.

Zadáme šesťmiestne číslo (nie menej alebo viac) hesla, ktoré bude uložené na 6 rôznych adresách (každá adresa pre každú číslicu) a jednu ďalšiu adresu na uloženie „1“ alebo „0“.

Po zadaní hesla uloží dodatočná adresa hodnotu „1“, čo naznačuje, že heslo je nastavené, a program vás požiada o zadanie hesla, aby sa rozsvietila LED dióda.

Ak je uložená hodnota dodatočnej adresy „0“ alebo existuje iná hodnota, zobrazí sa výzva na vytvorenie nového šesťmiestneho hesla.

Vyššie uvedeným spôsobom program dokáže zistiť, či ste už nastavili heslo alebo či potrebujete vytvoriť nové heslo.

Ak je zadané heslo správne, zabudovaná LED na kolíku # 13 svieti, ak je zadané heslo nesprávne, LED dióda nebude svietiť a sériový monitor vás vyzve, aby zadali nesprávne heslo.

Programový kód č. 2

Teraz nahrajte kód:
//------------------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---------------//

VÝKON:

Otvorte sériový monitor, ktorý vás vyzve na vytvorenie šesťmiestneho číselného hesla.

Zadajte ľubovoľné šesťciferné heslo, poznačte si ho a stlačte kláves Enter. Teraz bolo heslo uložené.

Môžete buď stlačiť resetovacie tlačidlo alebo odpojiť USB kábel od PC, čo spôsobí prerušenie napájania dosky Arduino.

Teraz znova pripojte kábel USB, otvorte sériový monitor, ktorý vás vyzve na zadanie uloženého 6-ciferného hesla.

Zadajte správne heslo, LED bude svietiť.

Ak chcete zmeniť heslo, zmeňte číslicu z kódu:

int passExistAdd = 200

Vyššie uvedený riadok je ďalšia adresa, o ktorej sme už hovorili. Zmeňte kdekoľvek od 6 do 1023. Na uloženie 6-miestneho hesla je vyhradených 0 až 5 adries.

Zmenou tejto dodatočnej adresy oklamete program, že heslo ešte nie je vytvorené, a zobrazí sa výzva na vytvorenie nového šesťmiestneho hesla.

Ak máte akékoľvek otázky týkajúce sa tejto EEPROM v príručke Arduino, vyjadrite sa v komentároch, môžete dostať rýchlu odpoveď.




Dvojica: Nadprúdový napájací zdroj využívajúci Arduino Ďalej: Robotické auto riadené mobilným telefónom pomocou modulu DTMF