Sissejuhatus EEPROM-i Arduinos

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses saame aru, mis on EEPROM, kuidas andmeid EEPROM-is sisseehitatud on Arduino juhatus Mikrokontroller ja ka paari näite abil praktiliselt katsetada, kuidas andmeid EEPROM-il kirjutada ja lugeda.

Sissejuhatus EEPROM-i Arduinos

Miks just EEPROM?

Enne kui küsime, mis on EEPROM? On väga oluline teada, miks EEPROM-i üldse ladustamiseks kasutatakse. Nii saame EEPROM-idest selge ettekujutuse.



Tänapäeval on saadaval palju salvestusseadmeid, alates magnetilistest mäluseadmetest, nagu arvuti kõvakettad, vana kooli kassettmakkidest, optilistest andmekandjatest nagu CD-d, DVD-d, Blu-ray-kettad ja tahkismälust nagu SSD (pooljuhtkettad). arvutid ja mälukaardid jne.

Need on massmäluseadmed, kuhu saab salvestada andmeid, näiteks muusikat, videoid, dokumente jms, alates mõnest kilobaidist kuni mitme terabaidini. Need on püsimälu, mis tähendab, et andmeid saab säilitada ka pärast toite väljalülitamist andmekandjale.



Kõrva rahustavat muusikat või pilkupüüdvaid videoid edastav seade, näiteks arvuti või nutitelefon, salvestab mõned olulised andmed, näiteks konfiguratsiooniandmed, alglaadimisandmed, paroolid, biomeetrilised andmed, sisselogimisandmed jne.

Nimetatud andmeid ei saa turvalisuse huvides massmäluseadmetesse salvestada ning kasutajad võivad neid andmeid tahtmatult muuta, mis võib põhjustada seadme talitlushäireid.

Need andmed võtavad vaid mõne baidi kuni mõne megabaidi, tavapärase salvestusseadme, näiteks magnetilise või optilise andmekandja ühendamine protsessori kiipidega pole majanduslikult ja füüsiliselt otstarbekas.

Niisiis, need kriitilised andmed salvestatakse töötluskiipidesse ise.

Arduino ei erine arvutist ega nutitelefonidest. On mitmeid asjaolusid, kus peame salvestama mõned kriitilised andmed, mida ei tohi kustutada isegi pärast toite väljalülitamist, näiteks andurite andmed.

Nüüdseks oleksite saanud idee, miks me vajame mikroprotsessorite ja mikrokontrollerite kiipide EEPROM-i.

Mis on EEPROM?

EEPROM tähendab elektriliselt kustutatavat programmeeritavat kirjutuskaitstud mälu. See on ka püsimälu, mida saab lugeda ja kirjutada bait tark.

Baitide taseme lugemine ja kirjutamine muudab selle teistest pooljuhtmäludest erinevaks. Näiteks välkmälu: andmete plokksuunaline lugemine, kirjutamine ja kustutamine.

Blokk võib olla mõnisada kuni tuhat bitti, mis on teostatav massmälu jaoks, kuid mitte mikroprotsessorites ja mikrokontrollerites toimuvatele kirjutuskaitstud mälu toimingutele, mis peavad baidi andmetele juurde pääsema.

Arduino Uno pardal (ATmega328P) on sellel 1KB või 1024 baiti EEPROM-i. Igale baidile pääseb juurde individuaalselt, iga baidi aadress on vahemikus 0 kuni 1023 (see on kokku 1024).

Aadress (0-1023) on mälupunkt, kuhu meie andmed salvestatakse.

Igal aadressil saate salvestada 8-bitiseid andmeid, numbrilisi numbreid 0 kuni 255. Meie andmed on salvestatud binaarkujul, nii et kui kirjutame EEPROM-i numbri 255, salvestab see aadressi numbri 11111111 ja kui me salvestame nulli, see salvestatakse kui 00000000.

Samuti saate sobiva programmi kirjutades salvestada teksti, erimärke, tähtnumbrilisi tähemärke jms.

Ehituse üksikasju ja töötamist siin ei käsitleta, mis võib selle artikli pikaks muuta ja me võime teid uniseks muuta. Suunduge YouTube'i või Google'i poole. EEPORMi ülesehituse ja töö kohta on huvitav artikkel / video.

Ärge segage EEPROM-i EPROM-iga:

Lühidalt öeldes on EPROM elektriliselt programmeeritav kirjutuskaitstud mälu, mis tähendab, et seda saab programmeerida (salvestada mälu) elektriliselt, kuid seda ei saa elektriliselt kustutada.

See kasutab salvestuskiibi kohal ultraviolettvalguse eredat sära, mis kustutab salvestatud andmed. EEPROM tuli EPROM-i asemele ja seda ei kasutata enam üheski elektroonikaseadmes.

Ärge segage EEPROM-i välkmälu:

Välkmälu on pooljuht- ja püsimälu, mis on ka elektriliselt kustutatav ja elektriliselt programmeeritav, tegelikult on välkmälu tuletatud EEPROM-ist. Kuid plokkide kaupa juurdepääs mälule või teisisõnu mälule juurdepääs ja selle ehitus erineb EEPROMist.

Arduino Uno (mikrokontroller ATmega328P) toetab programmide salvestamiseks ka 32KB välkmälu.

EEPROMi eluiga:

Nagu igal teisel elektroonilisel andmekandjal, on ka EEPROMil piiratud lugemis-, kirjutamis-, kustutustsüklid. Kuid probleem seisneb selles, et selle eluiga on üks teistest pooljuhtmäluga võrreldes kõige väiksem.

Arduino EEPROM-is nõudis Atmel umbes 100000 (üks lakh) kirjutamistsüklit raku kohta. Kui teie toatemperatuur on madalam, seda suurem on EEPROMi eluiga.

Pange tähele, et EEPROM-ist andmete lugemine ei mõjuta oluliselt eluiga.

On olemas väliseid EEPROM-i IC-sid, mida saab Arduinoga hõlpsalt liidestada, mälumahuga vahemikus 8 KB, 128 KB, 256 KB jne. Eluiga on umbes 1 miljon kirjutamistsüklit raku kohta.

Sellega järeldub EEPROM, nüüd oleksite saanud piisavalt teoreetilisi teadmisi EEPROM-ide kohta.

Järgmises jaotises õpime, kuidas praktiliselt testida EEPROM-i arduinos.

Kuidas testida EEPROM-i Arduinos

Selle rakendamiseks on vaja ainult USB-kaablit ja Arduino Uno plaati, olete valmis minema.

Ülaltoodud selgituste põhjal saime aru, et EEPROM-idel on aadress, kuhu me oma andmeid salvestame. Saame Arduino Unosse salvestada 0 kuni 1023 asukohta. Igasse asukohta mahub 8-bitine või üks bait.

Selles näites salvestame andmeid aadressi. Programmi keerukuse vähendamiseks ja programmi võimalikult lühikese aja hoidmiseks salvestame ühekohalise täisarvu (0 kuni 9) aadressile 0–9.

Programmi kood nr 1

Nüüd laadige kood Arduinosse üles:
//------------------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ÄLJUND:

Kui kood on üles laaditud, avage jadamonitor.

See palub teil sisestada aadressi vahemikus 0 kuni 9. Ülaltoodud väljundist olen sisestanud aadressi 3. Nii salvestan asukohta (aadressi) 3 täisarvu.

Nüüd palutakse teil sisestada ühekohaline täisarv väärtus vahemikus 0 kuni 9. Ülaltoodud väljundist olen sisestanud väärtuse 5.

Nüüd salvestatakse väärtus 5 aadressi asukohta 3.

Kui olete väärtuse sisestanud, kirjutab see väärtuse EEPROM-ile.

See näitab edukat teadet, mis tähendab, et väärtus on salvestatud.

Paari sekundi pärast loeb see väärtus, mis on salvestatud kommenteeritud aadressile, ja see näitab väärtust jada monitoril.

Kokkuvõtteks oleme kirjutanud ja lugenud Arduino mikrokontrolleri EEPROM-i väärtusi.

Nüüd kasutame parooli salvestamiseks EEPROM-i.

Sisestame 6-kohalise numbri (mitte vähem ega rohkem) parooli, see salvestatakse kuues erinevas aadressis (iga aadressi iga numbri jaoks) ja ühes täiendavas aadressis “1” või “0” salvestamiseks.

Kui olete parooli sisestanud, salvestab lisaaadress väärtuse “1”, mis näitab, et parool on määratud, ja programm palub teil LED-i sisselülitamiseks parooli sisestada.

Kui täiendava aadressi salvestatud väärtus on „0“ või mõni muu väärtus on olemas, palub see teil luua uus 6-kohaline parool.

Ülaltoodud meetodi abil saab programm tuvastada, kas olete juba parooli määranud või peate uue parooli looma.

Kui sisestatud parool on õige, süttib tihvti nr 13 sisseehitatud LED, kui sisestatud parool on vale, siis LED ei sütti ja jadamonitor küsib, et teie parool oleks vale.

Programmi kood nr 2

Nüüd laadige kood üles:
//------------------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ÄLJUND:

Avage jadamonitor, see palub teil luua 6-kohalise numbri parooli.

Sisestage mis tahes 6-kohaline parool, märkige see üles ja vajutage sisestusklahvi. Nüüd on parool salvestatud.

Võite vajutada lähtestamisnuppu või USB-kaabli arvutist lahti ühendada, mis katkestab toite Arduino plaadile.

Nüüd ühendage uuesti USB-kaabel, avage seeriamonitor, mis palub teil sisestada salvestatud 6-kohaline parool.

Sisestage õige parool, mida LED süttib.

Kui soovite parooli muuta, muutke koodist kood:

int passExistAdd = 200

Ülaltoodud rida on täiendav aadress, mida me enne arutasime. Muutke ükskõik kus vahemikus 6 kuni 1023. 6-kohalise parooli salvestamiseks on reserveeritud 0 kuni 5 aadressi.

Selle täiendava aadressi muutmine petab programmi, et parooli pole veel loodud, ja palutakse teil luua uus 6-kohaline parool.

Kui teil on Arduino õpetuses selle EEPROM-i kohta küsimusi, väljendage seda kommentaarides, võite saada kiire vastuse.




Eelmine: Arduino abil voolu katkestamine Järgmine: DTMF-moodulit kasutav mobiiltelefoniga juhitav robotauto