Bevezetés az EEPROM-ba Arduinóban

Próbálja Ki A Műszerünket A Problémák Kiküszöbölésére





Ebben a bejegyzésben meg fogjuk érteni, mi az EEPROM, hogyan tárolják az adatokat az EEPROM-ban Arduino tábla Mikrovezérlő, és néhány példával gyakorlatilag kipróbálja az adatok írását és olvasását az EEPROM-on.

Bevezetés az EEPROM-ba Arduinóban

Miért éppen az EEPROM?

Mielőtt megkérdeznénk, mi az EEPROM? Nagyon fontos tudni, hogy miért használják az EEPROM-ot a tároláshoz. Tehát világos képet kapunk az EEPROM-okról.



Manapság rengeteg tárolóeszköz áll rendelkezésre, kezdve a mágneses tárolóeszközöktől, például a számítógép merevlemezétől, a régi iskola kazettás magnóitól, az optikai adathordozótól, mint CD-k, DVD-k, Blu-ray lemezek és a szilárdtest-memóriától, például az SSD számítógépek és memóriakártyák stb.

Ezek olyan tárolóeszközök, amelyek olyan adatokat tárolhatnak, mint zene, videók, dokumentumok stb. Akár néhány kilobájttól a többterabájtosig. Ezek nem felejtő memória, ami azt jelenti, hogy az adatok akkor is megtarthatók, ha a tápközeg áramellátása megszakad.



A fülnyugtató zenét vagy szemet pattogó videókat, például számítógépet vagy okostelefont tartalmazó eszköz néhány kritikus adatot tárol, például konfigurációs adatokat, rendszerindítási adatokat, jelszavakat, biometrikus adatokat, bejelentkezési adatokat stb.

Ezeket az adatokat biztonsági okokból nem lehet tárolni tömegtárakban, és ezeket az adatokat a felhasználók akaratlanul is módosíthatják, ami az eszköz meghibásodásához vezethet.

Ezek az adatok csak néhány bájtból néhány megabájtba kerülnek, így egy hagyományos tárolóeszköz, például mágneses vagy optikai adathordozó, processzorchipekhez való csatlakoztatása gazdaságilag és fizikailag nem megvalósítható.

Tehát ezeket a kritikus adatokat magában a feldolgozó chipekben tároljuk.

Az Arduino nem különbözik a számítógéptől vagy az okostelefonoktól. Számos olyan körülmény van, amikor néhány kritikus adatot tárolnunk kell, például a szenzor adatait, amelyek az áramkimaradás után sem törlődhetnek.

Mostanra már kapott egy ötletet, miért van szükségünk az EEPROM-ra mikroprocesszorokon és mikrokontrollerek chipjein.

Mi az EEPROM?

Az EEPROM az elektromosan törölhető, programozható, csak olvasható memóriát jelenti. Ez egy nem felejtő memória is, amely olvasható és írható bájtosan.

A bájt szintű olvasás és írás különbséget tesz a többi félvezető memóriától. Például a flash memória: az adatok blokk szerinti olvasása, írása és törlése.

A blokk néhány száz-ezer bit lehet, ami megvalósítható a tömeges tároláshoz, de nem a „Csak olvasható memória” műveletekhez a mikroprocesszorokban és mikrovezérlőkben, amelyeknek bájt byte adatokhoz kell hozzáférniük.

Az Arduino Uno táblán (ATmega328P) 1 KB vagy 1024 byte EEPROM fedélzeten van. Minden bájt külön-külön elérhető, mindegyik bájt címe 0 és 1023 között van (ez összesen 1024).

A cím (0-1023) egy memóriahely, ahol az adataink tárolásra kerülnek.

Minden címen tárolhat 8 bites adatokat, 0 és 255 közötti számjegyeket. Adataink bináris formában vannak tárolva, tehát ha a 255-ös számot írjuk be az EEPROM-ba, akkor a számjegyet 11111111 néven tárolja egy címben, és ha nullát tárolunk, 00000000 néven tárolja.

A megfelelő program megírásával szöveget, speciális karaktereket, alfanumerikus karaktereket stb. Is tárolhat.

Az építkezés részleteit és a munkálatokat itt nem tárgyaljuk, ami meghosszabbíthatja ezt a cikket, és álmossá tehetjük. Irány a YouTube vagy a Google, érdekes cikkek / videók találhatók az EEPORM felépítésével és működésével kapcsolatban.

Ne tévessze össze az EEPROM-ot az EPROM-mal:

Dióhéjban az EPROM egy elektromosan programozható, csak olvasható memória, vagyis elektromosan programozható (memóriát tárolhat), de villamosan nem törölhető.

Az ultraibolya fény erős ragyogását használja fel a tároló chip felett, amely törli a tárolt adatokat. Az EEPROM az EPROM helyettesítőjeként jött létre, és ma már alig használják elektronikus eszközökben.

Ne tévessze össze az EEPROM flash memóriáját:

A flash memória félvezető és nem felejtő memória, amely villamosan is törölhető és programozható, valójában a flash memória az EEPROM-ból származik. De a blokk szerinti memória-hozzáférés, más szóval, a memória elérésének módja, és annak felépítése eltér az EEPROM-tól.

Az Arduino Uno (ATmega328P mikrokontroller) 32KB flash memóriát is tartalmaz a programok tárolásához.

Az EEPROM élettartama:

Mint minden más elektronikus adathordozónak, az EEPROM-nak is vannak véges olvasási, írási és törlési ciklusai. De a probléma az, hogy élettartama az egyik legkevesebb, mint bármely más félvezető memória esetében.

Az Arduino EEPROM-ján Atmel sejtenként körülbelül 100000 (egy lakh) írási ciklust követelt. Ha alacsonyabb a szobahőmérséklete, annál hosszabb az EEPROM élettartama.

Felhívjuk figyelmét, hogy az EEPROM-ból származó adatok olvasása nem befolyásolja jelentősen az élettartamot.

Vannak olyan külső EEPROM IC-k, amelyek könnyedén összekapcsolhatók az Arduino-val, a memória kapacitása 8 KB, 128 KB, 256 KB stb. Között mozog, cellánként körülbelül 1 millió írási ciklus élettartammal.

Ezzel lezárult az EEPROM, most elegendő elméleti ismeretet szerzett volna az EEPROM-okról.

A következő részben megtudhatjuk, hogyan lehet az EEPROM-ot gyakorlatilag tesztelni az arduinón.

Hogyan teszteljük az EEPROM-ot Arduino-ban

Ennek megvalósításához csak egy USB-kábelre és Arduino Uno kártyára van szüksége, készen áll az indulásra.

A fenti magyarázatokból megértettük, hogy az EEPROM-oknak van címe, ahol tároljuk adatainkat. 0-1023 helyet tárolhatunk az Arduino Unóban. Minden helyen 8 bit vagy egy bájt fér el.

Ebben a példában adatokat fogunk tárolni egy címben. A program bonyolultságának csökkentése és a program lehető legrövidebb tartása érdekében egyjegyű egész számot (0 és 9 között) tárolunk 0 és 9 közötti címeken.

1. programkód

Most töltse fel a kódot az Arduino-ra:
//------------------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-------------------//

KIMENET:

A kód feltöltése után nyissa meg a soros monitort.

Megkéri, hogy 0 és 9 közötti címet adjon meg. A fenti kimenetből megadtam a 3. címet. Tehát egy egész értéket tárolok a hely (cím) 3-ban.

Most arra kéri Önt, hogy adjon meg egy 0-tól 9-ig terjedő egész számjegyű egész értéket. A fenti kimenetből megadtam az 5. értéket.

Tehát most az 5 értéket a 3 címhelyen tároljuk.

Miután megadta az értéket, az az EEPROM-ra írja.

Sikeres üzenet jelenik meg, ami azt jelenti, hogy az érték tárolva van.

Pár másodperc múlva kiolvassa az értéket, amelyet a megjegyzett cím tárolt, és megmutatja az értéket a soros monitoron.

Összegzésképpen megírtuk és elolvastuk az Arduino mikrovezérlőjének EEPROM értékeit.

Most az EEPROM-ot fogjuk használni a jelszó tárolásához.

Beírunk egy 6 jegyű (nem kevesebb vagy nem több) jelszót, amelyet 6 különböző címben tárolunk (mindegyik cím minden számjegyhez), és egy további címen tároljuk az „1” vagy „0” tárolását.

Miután megadta a jelszót, a további cím az „1” értéket tárolja, jelezve, hogy a jelszó be van állítva, és a program megkéri, hogy adja meg a jelszót a LED bekapcsolásához.

Ha a további tárolt cím értéke „0”, vagy bármilyen más érték van jelen, akkor új 6 jegyű jelszó létrehozását kéri.

A fenti módszerrel a program képes azonosítani, hogy Ön már beállított-e jelszót, vagy új jelszót kell létrehoznia.

Ha a beírt jelszó helyes, akkor a # 13-as kivitel beépített LED-je világít, ha a megadott jelszó helytelen, akkor a LED nem világít, és a soros monitor arra kéri, hogy tévedjen.

2. programkód

Most töltse fel a kódot:
//------------------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---------------//

KIMENET:

Nyissa meg a soros monitort, ez arra kéri, hogy hozzon létre egy 6 jegyű jelszót.

Írja be a 6 számjegyű jelszót, jegyezze fel és nyomja meg az Enter billentyűt. Most tárolta a jelszót.

Vagy megnyomhatja a reset gombot, vagy kihúzhatja az USB kábelt a PC-ről, ami megszakítja az Arduino kártya ellátását.

Most csatlakoztassa újra az USB-kábelt, nyissa meg a soros monitort, amely felszólítja a mentett hatjegyű jelszó megadására.

Írja be a megfelelő jelszót, amikor a LED világítani kezd.

Ha meg akarja változtatni a jelszót, módosítsa a számjegyet a kódból:

int passExistAdd = 200

A fenti sor a további cím, amelyet korábban megbeszéltünk. Változás bárhol 6-ról 1023-ra. 0 és 5 cím van fenntartva a 6 jegyű jelszó tárolására.

Ennek a további címnek a megváltoztatása megtéveszti a programot, hogy a jelszó még nincs létrehozva, és új 6-jegyű jelszó létrehozására szólít fel.

Ha bármilyen kérdése van az EEPROM-ral kapcsolatban az Arduino oktatóanyagban, kérjük, fejtse ki a megjegyzéseket, és gyors választ kaphat.




Korábbi: Túláramú áramellátás az Arduino használatával Következő: Mobiltelefon vezérelt robotautó a DTMF modul használatával