Uvod v EEPROM v Arduinu

Preizkusite Naš Instrument Za Odpravo Težav





V tem prispevku bomo razumeli, kaj je EEPROM, kako se hranijo podatki vgrajeni v EEPROM Plošča Arduino Mikrokrmilnik in na nekaj primerih tudi praktično preizkusite, kako zapisati in prebrati podatke na EEPROM.

Uvod v EEPROM v Arduinu

Zakaj EEPROM?

Preden vprašamo, kaj je EEPROM? Zelo pomembno je vedeti, zakaj se EEPROM sploh uporablja za shranjevanje. Tako imamo jasno predstavo o EEPROM-jih.



V današnjem času je na voljo veliko pomnilniških naprav, od magnetnih pomnilniških naprav, kot so računalniški trdi diski, kasetni snemalniki stare šole, optični pomnilniški medij, kot so CD-ji, DVD-ji, Blu-ray diski in polprevodniški pomnilnik, kot je SSD (Solid State Drive) računalniki in pomnilniške kartice itd.

To so naprave za množično shranjevanje, ki lahko shranijo podatke, kot so glasba, videoposnetki, dokumenti itd., Od najmanj kilobajtov do več terabajtov. To je trajni pomnilnik, kar pomeni, da se podatki lahko hranijo tudi po izklopu napajanja na pomnilniški medij.



Naprava, ki prinaša pomirjujočo glasbo ali video posnetke, kot je računalnik ali pametni telefon, shranjuje nekatere ključne podatke, kot so konfiguracijski podatki, zagonski podatki, gesla, biometrični podatki, prijavni podatki itd.

Teh podatkov iz varnostnih razlogov ni mogoče shraniti v naprave za množično shranjevanje, uporabniki pa jih lahko tudi nenamerno spremenijo, kar lahko privede do okvare naprave.

Ti podatki trajajo le nekaj bajtov do nekaj megabajtov, zato običajna pomnilniška naprava, kot je magnetni ali optični medij, na procesorske čipe ni ekonomsko in fizično izvedljiva.

Ti kritični podatki so torej shranjeni v samih procesorskih čipih.

Arduino se ne razlikuje od računalnika ali pametnih telefonov. Obstaja več okoliščin, v katerih moramo shraniti nekaj kritičnih podatkov, ki se ne smejo izbrisati niti po izklopu napajanja, na primer podatki senzorjev.

Do zdaj bi že imeli idejo, zakaj potrebujemo EEPROM na čipih mikroprocesorjev in mikrokrmilnikov.

Kaj je EEPROM?

EEPROM je kratica za električno izbrisljiv programljiv bralni pomnilnik. Je tudi nehlapen spomin, ki ga je mogoče brati in pisati byte pametno.

Branje in pisanje na ravni bajtov se razlikuje od ostalih polprevodniških spominov. Na primer bliskovni pomnilnik: blokovno branje, pisanje in brisanje podatkov.

Blok je lahko nekaj sto do tisoč bitov, kar je izvedljivo za množično shranjevanje, ne pa tudi za operacije samo za branje pomnilnika v mikroprocesorjih in mikrokrmilnikih, ki morajo dostopati do bajtnih podatkov.

Na plošči Arduino Uno (ATmega328P) ima na krovu 1 KB ali 1024 bajtov EEPROM-a. Do vsakega bajta je mogoče dostopati posamično, vsak bajt ima naslov od 0 do 1023 (skupaj 1024).

Naslov (0-1023) je mesto v pomnilniku, kjer bodo shranjeni naši podatki.

Na vsakem naslovu lahko shranite 8-bitne podatke, številske številke od 0 do 255. Naši podatki so shranjeni v binarni obliki, zato, če v EEPROM zapišemo številko 255, bo na naslovu shranil številko kot 11111111 in če shranimo nič, shranilo se bo kot 00000000.

S pisanjem ustreznega programa lahko shranite tudi besedilo, posebne znake, alfanumerične znake itd.

Podrobnosti gradnje in dela tukaj niso obravnavane, zaradi česar bi bil ta članek dolgotrajen, zato vas lahko zaspimo. Pojdite proti YouTubu ali Googlu, obstajajo zanimivi članki / videoposnetki o konstrukciji in delovanju EEPORM.

Ne mešajte EEPROM z EPROM:

Na kratko EPROM je električno programabilen pomnilnik samo za branje, kar pomeni, da ga je mogoče programirati (shraniti pomnilnik) električno, vendar ga ni mogoče električno izbrisati.

Uporablja močan sijaj ultravijolične svetlobe nad čipom za shranjevanje, ki izbriše shranjene podatke. EEPROM je bil nadomestek za EPROM in se zdaj skoraj ne uporablja v nobeni elektronski napravi.

Ne zamenjujte bliskovnega pomnilnika za EEPROM:

Flash pomnilnik je polprevodniški in nehlapni pomnilnik, ki ga je mogoče tudi električno izbrisati in ga je mogoče električno programirati, pravzaprav flash pomnilnik izhaja iz EEPROM-a. Toda blokovski dostop do pomnilnika ali z drugimi besedami je način dostopa do pomnilnika in njegova konstrukcija se razlikuje od EEPROM-a.

Arduino Uno (mikrokrmilnik ATmega328P) ima tudi 32 KB pomnilnika flash za shranjevanje programov.

Življenjska doba EEPROM-a:

Kot vsak drug elektronski pomnilniški medij ima tudi EEPROM končne cikle branja, pisanja in brisanja. Toda težava je v tem, da ima najmanj življenjsko dobo v primerjavi s katero koli drugo vrsto polprevodniškega pomnilnika.

Na Arduinovem EEPROM-u je Atmel zahteval približno 100000 (en lakh) cikla pisanja na celico. Če je vaša sobna temperatura nižja, večja je življenjska doba EEPROM-a.

Upoštevajte, da branje podatkov iz EEPROM-a bistveno ne vpliva na življenjsko dobo.

Obstajajo zunanje IC EEPROM, ki jih je mogoče Arduino enostavno povezati s kapaciteto pomnilnika od 8 KB, 128KB, 256 KB itd. Z življenjsko dobo približno 1 milijon ciklov pisanja na celico.

To zaključuje EEPROM, zdaj bi pridobili dovolj teoretičnega znanja o EEPROM-jih.

V naslednjem poglavju bomo izvedeli, kako praktično preizkusiti EEPROM na arduinu.

Kako preizkusiti EEPROM v Arduinu

Za uresničitev tega potrebujete le kabel USB in ploščo Arduino Uno.

Iz zgornjih razlag smo razumeli, da imajo EEPROM-i naslov, kamor shranjujemo svoje podatke. V Arduino Uno lahko shranimo od 0 do 1023 lokacij. Vsaka lokacija lahko sprejme 8-bit ali en bajt.

V tem primeru bomo podatke shranili na naslov. Da bi zmanjšali kompleksnost programa in da bi bil program čim krajši, bomo shranili enoštevilčno celo število (0 do 9) na naslov od 0 do 9.

Koda programa št. 1

Zdaj naložite kodo v 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-------------------//

IZHOD:

Ko je koda naložena, odprite serijski monitor.

Zahteval bo, da vnesete naslov od 0 do 9. Iz zgornjega izhoda sem vnesel naslov 3. Torej, na mestu (naslov) 3 bom shranil celoštevilčno vrednost.

Zdaj vas bo pozval, da vnesete enoštevilčno celoštevilsko vrednost od 0 do 9. Iz zgornjega izhoda sem vnesel vrednost 5.

Torej, zdaj bo vrednost 5 shranjena na naslovu 3.

Ko vnesete vrednost, jo bo zapisal na EEPROM.

Prikazalo se bo sporočilo o uspehu, kar pomeni, da je vrednost shranjena.

Po nekaj sekundah prebere vrednost, ki je shranjena na komentiranem naslovu, in jo prikaže na serijskem monitorju.

Za zaključek smo zapisali in prebrali vrednosti iz EEPROM-a Arduinovega mikrokrmilnika.

Zdaj bomo EEPROM uporabili za shranjevanje gesla.

Vnesli bomo 6-mestno številko (nič manj ali nič več) gesla, shranjeno bo na 6 različnih naslovih (vsak naslov za vsako številko) in enem dodatnem naslovu za shranjevanje »1« ali »0«.

Ko vnesete geslo, bo dodatni naslov shranil vrednost '1', ki označuje, da je geslo nastavljeno, in program vas bo pozval, da vnesete geslo, da vklopite LED.

Če je dodatna shranjena vrednost naslova »0« ali je prisotna katera koli druga vrednost, vas bo pozval, da ustvarite novo 6-mestno geslo.

Z zgornjo metodo lahko program ugotovi, ali ste že nastavili geslo ali morate ustvariti novo geslo.

Če je vneseno geslo pravilno, lučka LED za vgradnjo na zatiču št. 13 sveti, če je vneseno geslo napačno, LED ne bo svetil in serijski monitor bo opozoril, da je vaše geslo napačno.

Koda programa št. 2

Zdaj naložite kodo:
//------------------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---------------//

IZHOD:

Odprite serijski monitor, da boste morali ustvariti 6-mestno številčno geslo.

Vnesite katero koli 6-mestno geslo in si ga zapišite ter pritisnite enter. Zdaj je geslo shranjeno.

Lahko pritisnete gumb za ponastavitev ali odklopite kabel USB iz osebnega računalnika, zaradi česar je napajanje plošče Arduino prekinjeno.

Zdaj ponovno priključite kabel USB, odprite serijski monitor, ki vas bo pozval, da vnesete shranjeno 6-mestno geslo.

Vnesite pravilno geslo, da bo LED svetila.

Če želite spremeniti geslo, spremenite številko iz kode:

int passExistAdd = 200

Zgornja vrstica je dodatni naslov, o katerem smo že govorili. Spremenite s 6 na 1023. Za shranjevanje 6-mestnega gesla je rezervirano od 0 do 5 naslovov.

Če spremenite ta dodatni naslov, bo program zavedel, da geslo še ni ustvarjeno, in vas bo pozval, da ustvarite novo 6-mestno geslo.

Če imate kakršna koli vprašanja v zvezi s to vadnico EEPROM v vadnici Arduino, izrazite v komentarjih, morda boste prejeli hiter odgovor.




Prejšnja: Prekinitev napajanja prek Arduina Naprej: Robotski avto, ki ga upravlja mobilni telefon z uporabo modula DTMF