Introduksjon til EEPROM i Arduino

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dette innlegget skal vi forstå hva EEPROM er, hvordan data lagres på innebygd i EEPROM på Arduino board’s Microcontroller og test også praktisk hvordan du skriver og leser data på EEPROM med et par eksempler.

Introduksjon til EEPROM i Arduino

Hvorfor EEPROM?

Før vi spør hva EEPROM er? Det er veldig viktig å vite hvorfor EEPROM brukes til lagring i utgangspunktet. Slik at vi får en klar ide om EEPROM.



Det er mange lagringsenheter tilgjengelig i disse dager, alt fra magnetiske lagringsenheter som datamaskinharddisker, kassettbåndopptakere fra old school, optisk lagringsmedium som CDer, DVDer, Blu-ray-disker og solid state-minne som SSD (Solid State Drive) for datamaskiner og minnekort etc.

Dette er masselagringsenheter som kan lagre data som musikk, videoer, dokumenter etc. fra så lite som få kilobyte til flere terabyte. Dette er ikke-flyktig minne, noe som betyr at data kan beholdes selv etter at strømmen er slått av til lagringsmediet.



Enheten som leverer øret beroligende musikk eller blikkende videoer som datamaskin eller smarttelefon, lagrer viktige data som konfigurasjonsdata, oppstartsdata, passord, biometriske data, påloggingsdata etc.

Disse nevnte dataene kan ikke lagres i masselagringsenheter av sikkerhetsgrunner, og disse dataene kan også endres av brukerne utilsiktet, noe som kan føre til funksjonsfeil på enheten.

Disse dataene tar bare få byte til få megabyte, og det er ikke økonomisk og fysisk mulig å koble til en konvensjonell lagringsenhet som magnetisk eller optisk medium til prosessorbrikker.

Så disse viktige dataene lagres i selve prosesseringsbrikkene.

Arduino er ikke forskjellig fra datamaskin eller smarttelefoner. Det er flere omstendigheter der vi trenger å lagre kritiske data som ikke må slettes selv etter at strømmen er slått av, for eksempel sensordata.

Nå ville du ha fått en ide om hvorfor vi trenger EEPROM på mikroprosessorer og mikrokontrollers sjetonger.

Hva er EEPROM?

EEPROM står for Electrically Erasable Programmable Read Only Memory. Det er også et ikke-flyktig minne som kan leses og skrives byte klok.

Lese og skrive byte-nivå gjør det annerledes enn andre halvlederminner. For eksempel flashminne: lese, skrive og slette data på en blokkmessig måte.

En blokk kan være noen få hundre til tusenvis av biter, noe som er mulig for masselagring, men ikke for 'Read Only Memory' -operasjoner i mikroprosessorer og mikrokontrollere, som trenger tilgang til byte-byte-data.

På Arduino Uno-kort (ATmega328P) har den ombord 1 KB eller 1024 byte EEPROM. Hver byte er tilgjengelig individuelt, hver byte har adresse fra 0 til 1023 (det er totalt 1024).

Adresse (0-1023) er et minneplass hvor dataene våre blir lagret.

På hver adresse kan du lagre 8-biters data, numeriske sifre fra 0 til 255. Dataene våre lagres i binær form, så hvis vi skriver nummer 255 i EEPROM, vil det lagre sifferet som 11111111 i en adresse, og hvis vi lagrer null, den lagres som 00000000.

Du kan også lagre tekst, spesialtegn, alfanumeriske tegn osv. Ved å skrive passende program.

Konstruksjonsdetaljer og arbeid er ikke diskutert her, noe som kan gjøre denne artikkelen lang, og vi kan gjøre deg trøtt. Gå mot YouTube eller Google, det er interessante artikler / videoer om konstruksjon og arbeid med EEPORM.

Ikke forveksle EEPROM med EPROM:

I et nøtteskall er EPROM et elektrisk programmerbart skrivebeskyttet minne som betyr at det kan programmeres (lagre minne) elektrisk, men ikke kan slettes elektrisk.

Den bruker klar glans av ultrafiolett lys over lagringsbrikken som sletter lagrede data. EEPROM kom som erstatning for EPROM og ble nå knapt brukt i noen elektroniske enheter.

Ikke forveksle Flash-minne for EEPROM:

Et flashminne er en halvleder og ikke-flyktig minne som også er elektrisk slettbar og elektrisk programmerbar, faktisk er flashminne hentet fra EEPROM. Men den blokkvise minnetilgangen eller med andre ord, minnemåten er tilgjengelig og dens konstruksjon skiller seg ut fra EEPROM.

Arduino Uno (ATmega328P Microcontroller) har også 32 KB flashminne for programlagring.

Levetid for EEPROM:

Som alle andre elektroniske lagringsmedier har EEPROM også endelige sykluser for lese, skrive, slette. Men problemet er at den har en av de minste levetiden sammenlignet med noen annen form for halvlederminne.

På Arduinos EEPROM hevdet Atmel omtrent 100000 (en lakh) skrivesyklus per celle. Hvis romtemperaturen er lavere jo lengre levetid for EEPROM.

Vær oppmerksom på at lesing av data fra EEPROM ikke påvirker levetiden betydelig.

Det er eksterne EEPROM IC-er som enkelt kan grensesnitt Arduino med minnekapasitet fra 8 KB, 128 KB, 256 KB etc. med en levetid på omtrent 1 million skrivesykluser per celle.

Det konkluderer EEPROM, nå ville du ha fått nok teoretisk kunnskap om EEPROM.

I det følgende vil vi lære å teste EEPROM på arduino praktisk talt.

Hvordan teste EEPROM i Arduino

For å implementere dette er alt du trenger en USB-kabel og Arduino Uno-kort, du er klar til å gå.

Fra forklaringene ovenfor forsto vi at EEPROMs har adresse der vi lagrer dataene våre. Vi kan lagre 0 til 1023 steder i Arduino Uno. Hvert sted har plass til 8-bits eller en byte.

I dette eksemplet skal vi lagre data i en adresse. For å redusere programmets kompleksitet og for å holde programmet kort som mulig, skal vi lagre ensifret heltall (0 til 9) på en adresse fra 0 til 9.

Programkode nr. 1

Last nå opp 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-------------------//

PRODUKSJON:

Når koden er lastet opp, åpner du den serielle skjermen.

Det vil be deg om å oppgi adresse fra 0 til 9. Fra ovennevnte utdata har jeg skrevet inn adresse 3. Så, jeg vil lagre et heltall på stedet (adresse) 3.

Nå vil det be deg om å angi et ensifret heltall fra 0 til 9. Fra ovennevnte utgang har jeg angitt verdi 5.

Så nå lagres verdien 5 på adresseplasseringen 3.

Når du har angitt verdien, vil den skrive verdien på EEPROM.

Den viser en suksessmelding, noe som betyr at verdien er lagret.

Etter et par sekunder vil den lese verdien som er lagret på den kommenterte adressen, og den vil vise verdien på den serielle skjermen.

Avslutningsvis har vi skrevet og lest verdiene fra EEPROM til Arduinos mikrokontroller.

Nå skal vi bruke EEPROM til å lagre passord.

Vi skriver inn et 6-sifret (ikke mindre eller ikke mer) passord, det vil bli lagret i 6 forskjellige adresser (hver adresse for hvert siffer) og en ekstra adresse for lagring av '1' eller '0'.

Når du har angitt passordet, vil den ekstra adressen lagre verdien “1” som indikerer at passordet er angitt, og programmet vil be deg om å oppgi passordet for å slå PÅ LED.

Hvis den tilleggsadressen som er lagret, er '0' eller en annen verdi er til stede, vil den be deg om å opprette et nytt 6-sifret passord.

Ved hjelp av metoden ovenfor kan programmet identifisere om du allerede har angitt et passord eller trenger å opprette et nytt passord.

Hvis det oppgitte passordet er riktig, lyser den innebygde LED-en på pinne nr. 13, hvis det oppgitte passordet er feil, lyser ikke LED, og ​​seriell skjerm vil be deg om at passordet ditt er feil.

Programkode # 2

Last nå opp 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---------------//

PRODUKSJON:

Åpne den serielle skjermen, så blir du bedt om å opprette et 6-sifret passord.

Skriv inn et hvilket som helst 6-sifret passord, noter det og trykk enter. Nå er passordet lagret.

Du kan enten trykke på tilbakestillingsknappen eller koble fra USB-kabelen fra PCen, noe som gjør at forsyningen til Arduino-kortet blir avbrutt.

Koble nå til USB-kabelen, åpne den serielle skjermen, som vil be deg om å oppgi det lagrede 6-sifrede passordet.

Skriv inn riktig passord, LED-lampen vil lyse.

Hvis du vil endre passordet, endrer du tallet fra koden:

int passExistAdd = 200

Linjen ovenfor er tilleggsadressen som vi diskuterte tidligere. Endre hvor som helst fra 6 til 1023. 0 til 5 adresser er reservert for lagring av 6-sifret passord.

Hvis du endrer denne tilleggsadressen, lurer programmet at passordet ikke er opprettet ennå, og ber deg opprette et nytt 6-sifret passord.

Hvis du har spørsmål angående denne EEPROM i Arduino-opplæringen, vennligst uttrykk i kommentarene, du kan få et raskt svar.




Tidligere: Over Current Cut-off Power Supply Using Arduino Neste: Mobilstyrt robotbil ved hjelp av DTMF-modul