Introduktion til EEPROM i Arduino

Prøv Vores Instrument Til At Fjerne Problemer





I dette indlæg vil vi forstå, hvad EEPROM er, hvordan data lagres på indbygget i EEPROM on Arduino-bord Microcontroller og test også praktisk hvordan man skriver og læser data på EEPROM ved hjælp af et par eksempler.

Introduktion til EEPROM i Arduino

Hvorfor EEPROM?

Før vi spørger, hvad EEPROM er? Det er meget vigtigt at vide, hvorfor EEPROM bruges til opbevaring i første omgang. Så vi får en klar idé om EEPROM'er.



Der er mange lagerenheder til rådighed i disse dage, lige fra magnetiske lagerenheder som computerharddiske, old school kassettebåndoptagere, optisk lagringsmedium som cd'er, dvd'er, Blu-ray-diske og solid state-hukommelse som SSD (Solid State Drive) til computere og hukommelseskort osv.

Disse er masselagringsenheder, der kan gemme data såsom musik, videoer, dokumenter osv. Fra så lave som få kilobyte til multi-terabyte. Disse er ikke-flygtig hukommelse, hvilket betyder, at data kan bevares, selv efter at strømmen er afbrudt til lagringsmediet.



Enheden, der leverer ører beroligende musik eller øjenpoppende videoer, såsom computer eller smartphone, gemmer nogle vigtige data såsom konfigurationsdata, startdata, adgangskoder, biometriske data, logindata osv.

Disse nævnte data kan ikke gemmes i masselagerenheder af sikkerhedsmæssige årsager, og disse data kan også ændres af brugerne utilsigtet, hvilket kan føre til funktionsfejl på enheden.

Disse data tager kun få byte til få megabyte, og det er ikke økonomisk og fysisk muligt at forbinde en konventionel lagerenhed som magnetisk eller optisk medium til processorchips.

Så disse kritiske data er gemt i selve proceschipsene.

Arduino adskiller sig ikke fra computer eller smartphones. Der er flere omstændigheder, hvor vi har brug for at gemme nogle kritiske data, som ikke må slettes, selv efter strømmen er afbrudt, for eksempel sensordata.

Nu ville du have fået en idé om, hvorfor vi har brug for EEPROM på mikroprocessorer og mikrocontrollerschips.

Hvad er EEPROM?

EEPROM står for Electrically Erasable Programmable Read Only Memory. Det er også en ikke-flygtig hukommelse, som kan læses og skrives byte klogt.

Læsning og skrivning af byte-niveau gør det anderledes end andre halvlederminder. For eksempel flashhukommelse: læsning, skrivning og sletning af data på en blokmæssig måde.

En blok kan være nogle få hundrede til tusinder af bits, hvilket er muligt til masselagring, men ikke til 'Read Only Memory' -operationer i mikroprocessorer og mikrocontrollere, som har brug for at få adgang til byte-byte-data.

På Arduino Uno-kort (ATmega328P) har den ombord 1 KB eller 1024 bytes EEPROM. Hver byte kan tilgås individuelt, hver byte har adresse fra 0 til 1023 (det er i alt 1024).

Adresse (0-1023) er et hukommelsessted, hvor vores data lagres.

På hver adresse kan du gemme 8-bit data, numeriske cifre fra 0 til 255. Vores data er gemt i binær form, så hvis vi skriver nummer 255 i EEPROM, gemmer det cifret som 11111111 i en adresse, og hvis vi gemmer nul, det gemmes som 00000000.

Du kan også gemme tekst, specialtegn, alfanumeriske tegn osv. Ved at skrive et passende program.

Konstruktionsdetaljerne og arbejdet diskuteres ikke her, hvilket kan gøre denne artikel lang, og vi kan gøre dig søvnig. Gå mod YouTube eller Google, der er interessante artikler / videoer om konstruktion og bearbejdning af EEPORM.

Bland ikke EEPROM med EPROM:

I en nøddeskal er EPROM en elektrisk programmerbar skrivebeskyttet hukommelse, hvilket betyder at den kan programmeres (lagre hukommelse) elektrisk, men ikke kan slettes elektrisk.

Det bruger stærk skinne af ultraviolet lys over lagringschippen, som sletter de lagrede data. EEPROM kom som erstatning for EPROM og blev nu næppe brugt i nogen elektronisk udstyr.

Forveks ikke flashhukommelse til EEPROM:

En flashhukommelse er en halvleder og ikke-flygtig hukommelse, som også er elektrisk sletbar og elektrisk programmerbar, faktisk er flashhukommelse afledt af EEPROM. Men den blokvise hukommelsesadgang eller med andre ord adgang til hukommelsesvejen, og dens konstruktion adskiller sig fra EEPROM.

Arduino Uno (ATmega328P Microcontroller) har også 32 KB flashhukommelse til programlagring.

Levetid for EEPROM:

Som ethvert andet elektronisk lagringsmedium har EEPROM også endelige cyklusser til læsning, skrivning, sletning. Men problemet er, at det har en af ​​de mindste levetider sammenlignet med enhver anden form for halvlederhukommelse.

På Arduinos EEPROM hævdede Atmel omkring 100.000 (en lakh) skrivecyklus pr. Celle. Hvis din stuetemperatur er lavere jo længere er EEPROMs levetid.

Bemærk, at læsning af data fra EEPROM ikke påvirker levetiden væsentligt.

Der er eksterne EEPROM IC'er, som let kan interfacet Arduino med hukommelseskapacitet, der spænder fra 8 KB, 128KB, 256 KB osv. Med en levetid på ca. 1 million skrivecykler pr.

Det konkluderer EEPROM, nu ville du have fået tilstrækkelig teoretisk viden om EEPROM'er.

I det følgende afsnit lærer vi, hvordan man praktisk tester EEPROM på arduino.

Sådan testes EEPROM i Arduino

For at implementere dette er alt hvad du behøver, et USB-kabel og Arduino Uno-kort, du er klar til at gå.

Fra ovenstående forklaringer forstod vi, at EEPROM'er har adresse, hvor vi gemmer vores data. Vi kan gemme 0 til 1023 placeringer i Arduino Uno. Hver placering kan rumme 8 bit eller en byte.

I dette eksempel skal vi gemme data i en adresse. For at reducere programmets kompleksitet og holde programmet kort som muligt, gemmer vi et enkelt cifret heltal (0 til 9) på en adresse fra 0 til 9.

Programkode nr. 1

Upload nu koden til 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-------------------//

PRODUKTION:

Når koden er uploadet, skal du åbne den serielle skærm.

Det beder dig om at indtaste adresse fra 0 til 9. Fra ovenstående output har jeg indtastet adresse 3. Så jeg vil gemme et heltal på placeringen (adresse) 3.

Nu vil det bede dig om at indtaste et enkeltcifret heltal, der spænder fra 0 til 9. Fra ovenstående output har jeg indtastet værdi 5.

Så nu gemmes værdien 5 på adresseplaceringen 3.

Når du har indtastet værdien, vil den skrive værdien på EEPROM.

Det viser en succesmeddelelse, hvilket betyder, at værdien er gemt.

Efter et par sekunder læser den værdien, der er gemt på den kommenterede adresse, og den viser værdien på den serielle skærm.

Afslutningsvis har vi skrevet og læst værdierne fra EEPROM fra Arduinos mikrokontroller.

Nu skal vi bruge EEPROM til opbevaring af adgangskode.

Vi indtaster et 6-cifret kodeord (ikke mindre eller ikke mere), det gemmes i 6 forskellige adresser (hver adresse for hvert ciffer) og en ekstra adresse til lagring af '1' eller '0'.

Når du har indtastet adgangskoden, gemmer den ekstra adresse værdien “1”, hvilket indikerer, at adgangskoden er indstillet, og programmet vil bede dig om at indtaste adgangskoden for at tænde lysdioden.

Hvis den ekstra adresse, der er gemt, er “0”, eller der er en anden værdi, beder den dig om at oprette en ny 6-cifret adgangskode.

Ved ovenstående metode kan programmet identificere, om du allerede har angivet en adgangskode eller har brug for at oprette en ny adgangskode.

Hvis den indtastede adgangskode er korrekt, lyser den indbyggede LED ved pin nr. 13, hvis den indtastede adgangskode er forkert, lyser LED ikke, og den serielle skærm beder om, at din adgangskode er forkert.

Programkode # 2

Upload nu koden:
//------------------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---------------//

PRODUKTION:

Åbn den serielle skærm, den vil bede dig om at oprette en adgangskode på 6 cifre.

Indtast en adgangskode på 6 cifre, noter den, og tryk på enter. Nu er adgangskoden blevet gemt.

Du kan enten trykke på nulstillingsknappen eller frakoble USB-kablet fra pc'en, hvilket forstyrrer forsyningen til Arduino-kortet.

Tilslut nu USB-kablet, åbn seriel skærm, som beder dig om at indtaste den gemte 6-cifrede adgangskode.

Indtast den korrekte adgangskode, LED'en vil lyse.

Hvis du vil ændre adgangskoden, skal du ændre cifret fra koden:

int passExistAdd = 200

Ovenstående linje er den ekstra adresse, som vi diskuterede før. Skift alt fra 6 til 1023. 0 til 5 adresser er reserveret til lagring af 6-cifret adgangskode.

Ændring af denne ekstra adresse vil narre programmet, at adgangskoden ikke er oprettet endnu, og bede dig om at oprette en ny 6-cifret adgangskode.

Hvis du har spørgsmål vedrørende denne EEPROM i Arduino-tutorial, bedes du udtrykke i kommentarerne, du kan muligvis modtage et hurtigt svar.




Tidligere: Over nuværende afskåret strømforsyning ved hjælp af Arduino Næste: Mobiltelefonstyret robotbil ved hjælp af DTMF-modul