Introducció a EEPROM a Arduino

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a entendre què és EEPROM, com s’emmagatzemen les dades integrades a EEPROM Taula Arduino Microcontrolador i també pràcticament proveu com escriure i llegir dades a EEPROM mitjançant un parell d’exemples.

Introducció a EEPROM a Arduino

Per què EEPROM?

Abans de preguntar-nos què és EEPROM? És molt important saber per què EEPROM s'utilitza per emmagatzemar en primer lloc. Per tant, tenim una idea clara sobre les EEPROM.



Hi ha molts dispositius d’emmagatzematge disponibles en aquests dies, que van des de dispositius d’emmagatzematge magnètics com discs durs d’ordinador, gravadors de cassette de vella escola, suports d’emmagatzematge òptic com CDs, DVD, discs Blu-ray i memòria d’estat sòlid com ordinadors i targetes de memòria, etc.

Es tracta d'un dispositiu d'emmagatzematge massiu que pot emmagatzemar dades com música, vídeos, documents, etc. des de tan sols uns quants kilobytes a diversos terabytes. Es tracta de memòria no volàtil, cosa que significa que les dades es poden conservar fins i tot després de tallar l’alimentació al medi d’emmagatzematge.



El dispositiu que ofereix música relaxant per a l’oïda o vídeos que expliquen els ulls, com ara ordinadors o telèfons intel·ligents, emmagatzema algunes dades crítiques com ara dades de configuració, dades d’arrencada, contrasenyes, dades biomètriques, dades d’inici de sessió, etc.

Aquestes dades esmentades no es poden emmagatzemar en dispositius d’emmagatzematge massiu per motius de seguretat i també aquestes dades poden ser modificades pels usuaris sense voler, cosa que podria provocar un mal funcionament del dispositiu.

Aquestes dades prenen pocs bytes a pocs megabytes, la connexió d'un dispositiu d'emmagatzematge convencional com un suport magnètic o òptic a xips de processador no és factible ni econòmicament ni físicament.

Per tant, aquestes dades crítiques s’emmagatzemen als propis xips de processament.

L'Arduino no és diferent de l'ordinador ni dels telèfons intel·ligents. Hi ha diverses circumstàncies en què hem d’emmagatzemar algunes dades crítiques que no s’han d’esborrar fins i tot després de tallar l’alimentació, per exemple les dades del sensor.

A hores d'ara, ja tindríeu una idea de per què necessitem EEPROM en microprocessadors i xips de microcontroladors.

Què és EEPROM?

EEPROM significa Memòria de només lectura programable esborrable elèctricament. També és una memòria no volàtil que es pot llegir i escriure byte savi.

Llegir i escriure a nivell de bytes el fa diferent d’altres memòries de semiconductors. Per exemple, la memòria flash: llegir, escriure i esborrar dades de manera bloquejada.

Un bloc pot ser de pocs centenars a milers de bits, cosa que és factible per a l'emmagatzematge massiu, però no per a operacions de 'memòria de només lectura' en microprocessadors i microcontroladors, que necessiten accedir a dades de byte per byte.

A la placa Arduino Uno (ATmega328P) té a bord 1KB o 1024 bytes d'EEPROM. Es pot accedir a cada byte individualment, cada byte té una adreça que oscil·la entre 0 i 1023 (és a dir, 1024).

L’adreça (0-1023) és una ubicació de memòria on s’emmagatzemaran les nostres dades.

A cada adreça podeu emmagatzemar dades de 8 bits, dígits numèrics de 0 a 255. Les nostres dades s’emmagatzemen en forma binària, de manera que si escrivim el número 255 a EEPROM, emmagatzemarà el dígit com a 11111111 en una adreça i si emmagatzemem zero, s'emmagatzemarà com a 00000000.

També podeu emmagatzemar text, caràcters especials, caràcters alfanumèrics, etc. escrivint el programa adequat.

Els detalls de la construcció i el funcionament no es discuteixen aquí, cosa que pot fer que aquest article sigui llarg i us puguem fer dormir. Dirigiu-vos cap a YouTube o Google, hi ha articles / vídeos interessants sobre la construcció i el funcionament d’EEPORM.

No confongueu EEPROM amb EPROM:

En poques paraules, EPROM és una memòria de només lectura programable elèctricament, cosa que significa que es pot programar (emmagatzemar memòria) elèctricament, però no es pot esborrar elèctricament.

Utilitza una brillantor brillant de llum ultraviolada per sobre del xip d’emmagatzematge que esborra les dades emmagatzemades. EEPROM es va substituir per EPROM i ara pràcticament no s’utilitza en cap dispositiu electrònic.

No confongueu la memòria flash per a EEPROM:

Una memòria flash és una memòria semiconductora i no volàtil que també es pot esborrar elèctricament i programar elèctricament, de fet la memòria flash es deriva de l'EEPROM. Però l'accés a la memòria en blocs o, en altres paraules, s'accedeix a la forma de memòria i la seva construcció fa que sigui diferent de l'EEPROM.

Arduino Uno (microcontrolador ATmega328P) també té 32KB de memòria flash per emmagatzemar programes.

Vida útil de l'EEPROM:

Com qualsevol altre mitjà d’emmagatzematge electrònic, EEPROM també té cicles de lectura, escriptura i esborrat finits. Però el problema és que té una de les experiències mínimes en comparació amb qualsevol altre tipus de memòria de semiconductor.

A la EEPROM d’Arduino, Atmel va afirmar uns 100.000 (un lakh) de cicle d’escriptura per cel·la. Si la temperatura de l'habitació és més baixa, major serà la vida útil de l'EEPROM.

Tingueu en compte que la lectura de dades d’EEPROM no afecta la vida útil de manera significativa.

Hi ha CI EEPROM externs que es poden connectar fàcilment a Arduino amb una capacitat de memòria que oscil·la entre els 8 KB, els 128 KB, els 256 KB, etc., amb una vida útil d’aproximadament 1 milió de cicles d’escriptura per cel·la.

Això conclou l’EEPROM, ara ja hauríeu obtingut prou coneixement teòric sobre les EEPROM.

A la secció següent aprendrem a provar pràcticament l'EEPROM a arduino.

Com provar EEPROM a Arduino

Per implementar-ho, tot el que necessiteu és un cable USB i una placa Arduino Uno, ja esteu a punt.

A partir de les explicacions anteriors vam entendre que les EEPROM tenen una adreça on emmagatzemem les nostres dades. Podem emmagatzemar de 0 a 1023 ubicacions a Arduino Uno. Cada ubicació pot allotjar 8 bits o un byte.

En aquest exemple, emmagatzemarem dades en una adreça. Per reduir la complexitat del programa i fer que el programa sigui el més curt possible, emmagatzemarem un dígit enter de 0 a 9 en una adreça de 0 a 9.

Codi de programa núm. 1

Ara, pengeu el codi a 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-------------------//

SORTIDA:

Un cop carregat el codi, obriu el monitor sèrie.

Us demanarà que introduïu l'adreça que oscil·li entre 0 i 9. De la sortida anterior, he introduït l'adreça 3. Per tant, emmagatzemaré un valor enter a la ubicació (adreça) 3.

Ara us demanarà que introduïu un valor enter d’un sol dígit que oscil·li entre 0 i 9. A la sortida anterior he introduït el valor 5.

Per tant, ara el valor 5 s’emmagatzemarà a la ubicació d’adreça 3.

Un cop introduïu el valor, escriurà el valor a EEPROM.

Es mostrarà un missatge d’èxit, que significa que el valor s’emmagatzema.

Al cap d'un parell de segons, llegirà el valor que s'emmagatzema a l'adreça comentada i mostrarà el valor al monitor sèrie.

En conclusió, hem escrit i llegit els valors de l’EEPROM del microcontrolador d’Arduino.

Ara farem servir l'EEPROM per emmagatzemar la contrasenya.

Introduirem una contrasenya de 6 dígits (ni més ni menys), s’emmagatzemarà en 6 adreces diferents (cada adreça per a cada dígit) i una adreça addicional per emmagatzemar “1” o “0”.

Un cop introduïu la contrasenya, l'adreça addicional emmagatzemarà el valor '1' que indica que la contrasenya està establerta i el programa us demanarà que introduïu la contrasenya per encendre el LED.

Si el valor emmagatzemat d’adreça addicional és “0” o hi ha algun altre valor, us demanarà que creeu una contrasenya nova de 6 dígits.

Mitjançant el mètode anterior, el programa pot identificar si ja heu definit una contrasenya o heu de crear una contrasenya nova.

Si la contrasenya introduïda és correcta, s’encén el LED de construcció del pin núm. 13, si la contrasenya introduïda és incorrecta, el LED no s’encén i el monitor sèrie us indicarà que la vostra contrasenya és incorrecta.

Codi del programa núm. 2

Ara pengeu el codi:
//------------------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---------------//

SORTIDA:

Obriu el monitor de sèrie que us demanarà que creeu una contrasenya de 6 dígits.

Introduïu qualsevol contrasenya de 6 dígits, anoteu-la i premeu Retorn. Ara la contrasenya s'ha emmagatzemat.

Podeu prémer el botó de restabliment o desconnectar el cable USB del PC, cosa que fa que el subministrament a la placa Arduino estigui interromput.

Ara torneu a connectar el cable USB, obriu el monitor sèrie, que us demanarà que introduïu la contrasenya desada de 6 dígits.

Introduïu la contrasenya correcta que il·luminarà el LED.

Si voleu canviar la contrasenya, canvieu el dígit del codi:

int passExistAdd = 200

La línia anterior és l'adreça addicional que hem comentat abans. Canvieu de 6 a 1023. Les adreces de 0 a 5 es reserven per emmagatzemar una contrasenya de 6 dígits.

Si canvieu aquesta adreça addicional, el programa enganyarà que la contrasenya encara no s'ha creat i us demanarà que creeu una nova contrasenya de 6 dígits.

Si teniu alguna pregunta sobre aquest tutorial EEPROM a Arduino, expresseu-ho als comentaris, és possible que rebeu una resposta ràpida.




Anterior: Font d’alimentació de tall de sobrecorrent mitjançant Arduino Següent: Cotxe robot controlat per telèfon mòbil mitjançant el mòdul DTMF