Iepazīšanās ar EEPROM Arduino

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā ziņojumā mēs sapratīsim, kas ir EEPROM, kā dati tiek glabāti, izmantojot iebūvēto EEPROM Arduino dēlis Mikrokontrolleru un praktiski pārbaudiet, kā rakstīt un lasīt datus par EEPROM, izmantojot dažus piemērus.

Iepazīšanās ar EEPROM Arduino

Kāpēc EEPROM?

Pirms jautājam, kas ir EEPROM? Ir ļoti svarīgi zināt, kāpēc EEPROM vispirms tiek izmantots uzglabāšanai. Tāpēc mēs gūstam skaidru priekšstatu par EEPROM.



Mūsdienās ir pieejamas daudzas atmiņas ierīces, sākot no magnētiskām atmiņas ierīcēm, piemēram, datora cietajiem diskiem, vecās skolas kasešu magnetofoniem, optiskajiem datu nesējiem, piemēram, CD, DVD, Blu-ray diskiem un cietvielu atmiņai, piemēram, SSD (cietvielu disks). datori un atmiņas kartes utt.

Tās ir lielapjoma atmiņas ierīces, kas var glabāt tādus datus kā mūzika, video, dokumenti utt. No mazāka par dažiem kilobaitiem līdz vairāku terabaitu lielumam. Tās ir nepastāvīgas atmiņas, kas nozīmē, ka datus var saglabāt pat pēc tam, kad datu nesējam ir pārtraukta strāva.



Ierīce, kas nodrošina ausu nomierinošu mūziku vai acīs redzamus videoklipus, piemēram, dators vai viedtālrunis, saglabā dažus kritiskos datus, piemēram, konfigurācijas datus, sāknēšanas datus, paroles, biometriskos datus, pieteikšanās datus utt.

Šos minētos datus drošības apsvērumu dēļ nevar uzglabāt lielapjoma atmiņas ierīcēs, kā arī lietotāji tos var neapzināti modificēt, kas var izraisīt ierīces nepareizu darbību.

Šie dati aizņem tikai dažus baitus līdz dažiem megabaitiem, parastās atmiņas ierīces, piemēram, magnētiskās vai optiskās datu nesēja, savienošana ar procesora mikroshēmām nav ekonomiski un fiziski iespējama.

Tātad šie kritiskie dati tiek glabāti pašā apstrādes mikroshēmās.

Arduino neatšķiras no datora vai viedtālruņiem. Ir vairāki apstākļi, kad mums ir jāuzglabā daži kritiski dati, kurus nedrīkst izdzēst pat pēc strāvas padeves pārtraukšanas, piemēram, sensora dati.

Tagad jums būtu radusies ideja, kāpēc mums ir nepieciešams EEPROM uz mikroprocesoriem un mikrokontrolleru mikroshēmām.

Kas ir EEPROM?

EEPROM nozīmē elektriski izdzēšamu programmējamu lasāmatmiņu. Tā ir arī nepastāvīga atmiņa, kuru var lasīt un rakstīt baits gudrs.

Baitu līmeņa lasīšana un rakstīšana padara to atšķirīgu no citām pusvadītāju atmiņām. Piemēram, zibatmiņa: datu bloku lasīšana, rakstīšana un dzēšana.

Bloks var būt no dažiem simtiem līdz tūkstošiem bitu, kas ir iespējams lielapjoma glabāšanai, bet ne “Tikai lasāma atmiņa” darbībām mikroprocesoros un mikrokontrolleros, kuriem ir jāpiekļūst baitu datiem.

Arduino Uno dēlī (ATmega328P) tam ir 1 KB vai 1024 baiti EEPROM. Katram baitam var piekļūt atsevišķi, katra baita adrese svārstās no 0 līdz 1023 (kopā ir 1024).

Adrese (0-1023) ir vieta atmiņā, kur tiks glabāti mūsu dati.

Katrā adresē varat saglabāt 8 bitu datus, ciparus no 0 līdz 255. Mūsu dati tiek glabāti binārā formā, tādēļ, ja EEPROM ierakstīsim numuru 255, tas ciparu kā 11111111 glabās adresē un, ja mēs glabāsim nulli, tas tiks glabāts kā 00000000.

Varat arī saglabāt tekstu, īpašās rakstzīmes, burtciparu rakstzīmes utt., Uzrakstot atbilstošu programmu.

Šeit netiek apskatītas būvniecības detaļas un darbs, kas varētu padarīt šo rakstu garu, un mēs varam padarīt jūs miegainu. Dodieties uz YouTube vai Google, ir interesanti raksti / videoklipi par EEPORM uzbūvi un darbību.

Nejauciet EEPROM ar EPROM:

Īsumā EPROM ir elektriski programmējama lasāmatmiņa, kas nozīmē, ka to var programmēt (saglabāt atmiņu) elektriski, bet to nevar izdzēst elektriski.

Tas izmanto spilgtu ultravioletās gaismas spīdumu virs uzglabāšanas mikroshēmas, kas izdzēš saglabātos datus. EEPROM tika aizstāts ar EPROM, un tagad to gandrīz neizmanto elektroniskajās ierīcēs.

Nejauciet EEPROM zibatmiņu:

Zibatmiņa ir pusvadītāja un nepastāvīga atmiņa, kas ir arī elektriski izdzēšama un elektriski programmējama, patiesībā zibatmiņa tiek iegūta no EEPROM. Bet bloku piekļuve atmiņai vai, citiem vārdiem sakot, piekļuve atmiņai un tās uzbūve atšķiras no EEPROM.

Arduino Uno (ATmega328P mikrokontrolleris) programmu glabāšanai ir arī 32 KB zibatmiņa.

EEPROM dzīves ilgums:

Tāpat kā jebkuram citam elektroniskam datu nesējam, arī EEPROM ir ierobežoti lasīšanas, rakstīšanas, dzēšanas cikli. Bet problēma ir tā, ka tā mūža ilgums ir vismazākais salīdzinājumā ar cita veida pusvadītāju atmiņu.

Arduino EEPROM, Atmels pieprasīja apmēram 100000 (vienu laku) rakstīšanas ciklu šūnā. Ja jūsu istabas temperatūra ir zemāka, jo ilgāks ir EEPROM kalpošanas laiks.

Lūdzu, ņemiet vērā, ka datu lasīšana no EEPROM būtiski neietekmē dzīves ilgumu.

Ir ārēji EEPROM IC, kurus ar Arduino var viegli savienot ar atmiņas ietilpību, kas svārstās no 8 KB, 128 KB, 256 KB utt. Ar dzīves ilgumu aptuveni 1 miljons rakstīšanas ciklu šūnā.

Tas ir EEPROM secinājums, tagad jūs būtu ieguvis pietiekami daudz teorētisku zināšanu par EEPROM.

Nākamajā sadaļā mēs uzzināsim, kā praktiski pārbaudīt EEPROM arduino.

Kā pārbaudīt EEPROM Arduino

Lai to īstenotu, jums ir nepieciešams tikai USB kabelis un Arduino Uno dēlis, un jūs esat gatavs doties.

No iepriekš minētajiem paskaidrojumiem mēs sapratām, ka EEPROM ir adrese, kur mēs glabājam savus datus. Arduino Uno mēs varam uzglabāt 0 līdz 1023 vietas. Katrā vietā var ievietot 8 bitus vai vienu baitu.

Šajā piemērā mēs datus glabāsim adresē. Lai samazinātu programmas sarežģītību un saglabātu programmu pēc iespējas īsāku, mēs glabāsim vienciparu veselu skaitli (0 līdz 9) adresē no 0 līdz 9.

Programmas kods Nr. 1

Tagad augšupielādējiet kodu vietnē 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-------------------//

REZULTĀTS:

Kad kods ir augšupielādēts, atveriet seriālo monitoru.

Tas prasīs ievadīt adresi no 0 līdz 9. No iepriekš minētās izejas es esmu ievadījis 3. adresi. Tātad, es atrašanās vietā (adresē) 3 glabāju veselu skaitli.

Tagad tas liks jums ievadīt viena cipara vesela skaitļa vērtību diapazonā no 0 līdz 9. No iepriekš minētās izejas es esmu ievadījis 5. vērtību.

Tātad, tagad vērtība 5 tiks saglabāta adreses atrašanās vietā 3.

Pēc vērtības ievadīšanas tā tiks ierakstīta EEPROM.

Tas parādīs veiksmes ziņojumu, kas nozīmē, ka vērtība tiek saglabāta.

Pēc pāris sekundēm tā nolasīs vērtību, kas tiek saglabāta komentētajā adresē, un rādīs vērtību seriālajā monitorā.

Noslēgumā mēs esam uzrakstījuši un nolasījuši Arduino mikrokontrollera EEPROM vērtības.

Tagad mēs izmantosim EEPROM paroles glabāšanai.

Mēs ievadīsim 6 ciparu (ne mazāk vai ne vairāk) paroli, tā tiks saglabāta 6 dažādās adresēs (katra katra cipara adrese) un vienā papildu adresē “1” vai “0” glabāšanai.

Kad esat ievadījis paroli, papildu adresē tiks saglabāta vērtība “1”, kas norāda, ka parole ir iestatīta, un programma lūgs ievadīt paroli, lai ieslēgtu LED.

Ja papildu saglabātā adreses vērtība ir “0” vai ir kāda cita vērtība, tā lūgs izveidot jaunu 6 ciparu paroli.

Izmantojot iepriekšminēto metodi, programma var noteikt, vai esat jau iestatījis paroli, vai jums ir jāizveido jauna parole.

Ja ievadītā parole ir pareiza, iedegas gaismas diode pie tapas Nr. 13 mirgo, ja ievadītā parole ir nepareiza, gaismas diode nedeg un sērijveida monitors liks, ka jūsu parole ir nepareiza.

Programmas kods # 2

Tagad augšupielādējiet kodu:
//------------------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---------------//

REZULTĀTS:

Atveriet sērijveida monitoru, tas liks jums izveidot sešu ciparu paroles paroli.

Ievadiet jebkuru 6 ciparu paroli, pierakstiet to un nospiediet enter. Tagad parole ir saglabāta.

Varat vai nu nospiest atiestatīšanas pogu, vai atvienot USB kabeli no datora, kas pārtrauc piegādi Arduino dēlim.

Tagad atkārtoti pievienojiet USB kabeli, atveriet sērijas monitoru, kas liks jums ievadīt saglabāto sešciparu paroli.

Ievadiet pareizo paroli, ko LED mirgos.

Ja vēlaties mainīt paroli, mainiet ciparu no koda:

int passExistAdd = 200

Iepriekš minētā rinda ir papildu adrese, kuru mēs iepriekš apspriedām. Mainīt jebkur no 6 uz 1023. 6 ciparu paroles glabāšanai ir rezervētas 0 līdz 5 adreses.

Mainot šo papildu adresi, programma tiks apmānīta, ka parole vēl nav izveidota, un jūs aicināsit izveidot jaunu 6 ciparu paroli.

Ja jums ir kādi jautājumi par šo EEPROM Arduino apmācībā, lūdzu, izsakiet komentāros, jūs varat saņemt ātru atbildi.




Pāri: Pārslodzes strāvas padeve, izmantojot Arduino Nākamais: Mobilā tālruņa vadīta robotu automašīna, izmantojot DTMF moduli