Įvadas į EEPROM „Arduino“

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše mes suprasime, kas yra EEPROM, kaip duomenys saugomi įmontuotame EEPROM „Arduino“ lenta Mikrokontroleris ir praktiškai išbandykite, kaip rašyti ir skaityti duomenis apie EEPROM, pateikdami keletą pavyzdžių.

Įvadas į EEPROM „Arduino“

Kodėl EEPROM?

Prieš klausdami, kas yra EEPROM? Labai svarbu žinoti, kodėl EEPROM pirmiausia naudojamas saugojimui. Taigi, mes gauname aiškią idėją apie EEPROM.



Šiais laikais yra daugybė saugojimo įrenginių, pradedant magnetiniais kaupikliais, tokiais kaip kompiuterio standieji diskai, senosios mokyklos kasetiniai magnetofonai, optinės laikmenos, tokios kaip kompaktiniai diskai, DVD, „Blu-ray“ diskai, ir kietojo kūno atminties, tokios kaip SSD (kietojo kūno diskas). kompiuteriai, atminties kortelės ir kt.

Tai yra masinės atminties įrenginys, kuriame galima saugoti tokius duomenis kaip muzika, vaizdo įrašai, dokumentai ir kt. Nuo kelių iki kelių terabaitų. Tai yra nepastovi atmintis, o tai reiškia, kad duomenis galima išsaugoti net ir nutrūkus maitinimo laikmenai.



Įrenginyje, kuris teikia ausis raminančią muziką ar akį rėžiančius vaizdo įrašus, pvz., Kompiuterį ar išmanųjį telefoną, yra keletas svarbių duomenų, tokių kaip konfigūracijos duomenys, įkrovos duomenys, slaptažodžiai, biometriniai duomenys, prisijungimo duomenys ir kt.

Saugumo sumetimais šie paminėti duomenys negali būti laikomi didelės talpos įrenginiuose, o vartotojai gali netyčia pakeisti šiuos duomenis, o tai gali sukelti įrenginio veikimo sutrikimus.

Šiems duomenims reikia tik kelių baitų iki kelių megabaitų, todėl įprastą atminties įrenginį, pavyzdžiui, magnetinę ar optinę laikmeną, su procesoriaus lustais prijungti nėra ekonomiškai ir fiziškai įmanoma.

Taigi, šie kritiniai duomenys yra saugomi pačiuose apdorojimo lustuose.

„Arduino“ niekuo nesiskiria nuo kompiuterio ar išmaniųjų telefonų. Yra keletas aplinkybių, kai turime saugoti keletą svarbių duomenų, kurie, pavyzdžiui, jutiklio duomenys, negali būti ištrinti net ir išjungus maitinimą.

Dabar jau turėtumėte idėją, kodėl mums reikia EEPROM mikroprocesoriuose ir mikrovaldiklių lustuose.

Kas yra EEPROM?

EEPROM reiškia elektriniu būdu ištrinamą programuojamą tik skaitymo atmintį. Tai taip pat nepastovi atmintis, kurią galima skaityti ir rašyti baitas išmintingas.

Baitų lygio skaitymas ir rašymas skiriasi nuo kitų puslaidininkių atminties. Pavyzdžiui, „flash“ atmintis: duomenų blokinis skaitymas, rašymas ir ištrynimas.

Blokas gali būti nuo kelių šimtų iki tūkstančių bitų, o tai įmanoma masiniam saugojimui, bet ne „tik skaitymo atminties“ operacijoms mikroprocesoriuose ir mikrovaldikliuose, kuriems reikia prieiti prie baitų pagal baitų duomenis.

„Arduino Uno“ plokštėje (ATmega328P) laive yra 1 KB arba 1024 baitai EEPROM. Kiekvieną baitą galima pasiekti atskirai, kiekvieno baito adresas svyruoja nuo 0 iki 1023 (tai yra 1024).

Adresas (0-1023) yra atminties vieta, kurioje bus saugomi mūsų duomenys.

Kiekviename adrese galite saugoti 8 bitų duomenis, skaitinius skaitmenis nuo 0 iki 255. Mūsų duomenys saugomi dvejetainiu pavidalu, taigi, jei į EEPROM įrašysime skaičių 255, jis skaitmenyje išsaugos skaitmenį kaip 11111111, o jei - nulį, jis bus saugomas kaip 00000000.

Taip pat galite įrašyti tekstą, specialiuosius simbolius, raidinius ir skaitmeninius simbolius ir tt, parašydami atitinkamą programą.

Statybos detalės ir darbai čia nėra aptariami, todėl šis straipsnis gali būti ilgas, o mes galime jus apsnūsti. Eikite į „YouTube“ ar „Google“, yra įdomių straipsnių / vaizdo įrašų, susijusių su EEPORM konstrukcija ir darbu.

Nepainiokite EEPROM su EPROM:

Trumpai tariant, EPROM yra elektra programuojama tik skaitymo atmintis, tai reiškia, kad ją galima užprogramuoti (saugoti atmintį) elektra, tačiau jos negalima ištrinti elektra.

Jis naudoja ryškų ultravioletinių spindulių spindesį virš saugojimo lusto, kuris ištrina saugomus duomenis. EEPROM buvo pakeistas EPROM ir dabar beveik nenaudojamas jokiuose elektroniniuose prietaisuose.

Nepainiokite EEPROM „Flash“ atminties:

„Flash“ atmintis yra puslaidininkinė ir nepastovi atmintis, kuri taip pat yra elektra ištrinama ir programuojama, iš tikrųjų „flash“ atmintis gaunama iš EEPROM. Bet blokinė atminties prieiga arba, kitaip tariant, prieiga prie atminties ir jos konstrukcija skiriasi nuo EEPROM.

„Arduino Uno“ (mikrokontroleris „ATmega328P“) taip pat turi 32 KB atminties, skirtos programoms laikyti.

EEPROM gyvenimo trukmė:

Kaip ir bet kuri kita elektroninė laikmena, EEPROM taip pat turi baigtinius skaitymo, rašymo, ištrynimo ciklus. Tačiau problema yra ta, kad jos gyvenimo trukmė yra mažiausia, palyginti su bet kurios kitos rūšies puslaidininkių atmintimi.

„Arduino“ EEPROM programoje „Atmel“ teigė, kad vienoje ląstelėje yra apie 100000 (vienas lakas) rašymo ciklas. Jei jūsų kambario temperatūra žemesnė, tuo didesnė EEPROM gyvenimo trukmė.

Atkreipkite dėmesį, kad duomenų skaitymas iš EEPROM neturi reikšmingos įtakos gyvenimo trukmei.

Yra išoriniai EEPROM IC, kuriuos galima lengvai susieti su „Arduino“, nes atminties talpa svyruoja nuo 8 KB, 128 KB, 256 KB ir kt., O jų gyvenimo trukmė yra apie 1 milijonas rašymo ciklų vienoje ląstelėje.

Tai baigia EEPROM, dabar jūs būtumėte įgiję pakankamai teorinių žinių apie EEPROM.

Kitame skyriuje sužinosime, kaip praktiškai išbandyti EEPROM „arduino“.

Kaip išbandyti EEPROM „Arduino“

Norėdami tai įgyvendinti, jums tereikia USB kabelio ir „Arduino Uno“ plokštės. Jūs esate pasirengę eiti.

Iš pirmiau pateiktų paaiškinimų supratome, kad EEPROM yra adresas, kuriame mes saugome savo duomenis. „Arduino Uno“ galime saugoti nuo 0 iki 1023 vietų. Kiekvienoje vietoje gali būti 8 bitai arba vienas baitas.

Šiame pavyzdyje mes ketiname saugoti duomenis adresu. Kad sumažintume programos sudėtingumą ir kad programa būtų kuo trumpesnė, mes išsaugosime vienaženklį sveikąjį skaičių (0–9) adresu nuo 0 iki 9.

Programos kodas Nr. 1

Dabar įkelkite kodą į „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-------------------//

IŠĖJIMAS:

Įkėlę kodą, atidarykite nuoseklųjį monitorių.

Jis paprašys jūsų įvesti adresą nuo 0 iki 9. Iš pirmiau pateiktos išvesties aš įvedžiau adresą 3. Taigi, vietoje (adresas) 3 išsaugosiu sveiko skaičiaus vertę.

Dabar jis paragins įvesti vieno skaitmens sveikojo skaičiaus vertę nuo 0 iki 9. Iš pirmiau pateiktos išvesties įvedžiau 5 reikšmę.

Taigi, dabar 5 vertė bus saugoma 3 adreso vietoje.

Kai įvesite vertę, ji įrašys vertę į EEPROM.

Tai parodys sėkmės pranešimą, o tai reiškia, kad vertė yra saugoma.

Po poros sekundžių jis perskaitys vertę, kuri yra išsaugota komentuojamame adresu, ir parodys vertę serijiniame monitoriuje.

Apibendrindami, mes parašėme ir perskaitėme „Arduino“ mikrovaldiklio EEPROM vertes.

Dabar slaptažodžiui išsaugoti naudosime EEPROM.

Įvesime šešių skaitmenų (ne mažiau ar ne daugiau) slaptažodį, jis bus saugomas 6 skirtingais adresais (kiekvienas adresas kiekvienam skaitmeniui) ir vienu papildomu adresu „1“ arba „0“ saugojimui.

Įvedus slaptažodį, papildomas adresas išsaugos reikšmę „1“, nurodydamas, kad slaptažodis nustatytas, ir programa paprašys įvesti slaptažodį, kad įjungtumėte šviesos diodą.

Jei papildoma adreso išsaugota reikšmė yra „0“ arba yra bet kokia kita reikšmė, ji paprašys sukurti naują 6 skaitmenų slaptažodį.

Taikant aukščiau nurodytą metodą, programa gali nustatyti, ar jūs jau nustatėte slaptažodį, ar jums reikia sukurti naują slaptažodį.

Jei įvestas slaptažodis yra teisingas, 13 kištuke esantis šviesos diodas šviečia, jei įvestas slaptažodis neteisingas, šviesos diodas nešvies ir nuoseklusis monitorius paragins, kad jūsų slaptažodis neteisingas.

Programos kodas Nr. 2

Dabar įkelkite kodą:
//------------------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---------------//

IŠĖJIMAS:

Atidarykite nuoseklųjį monitorių, kuris paragins jus sukurti 6 skaitmenų numerio slaptažodį.

Įveskite bet kokį 6 skaitmenų slaptažodį, užsirašykite ir paspauskite enter. Dabar slaptažodis buvo išsaugotas.

Galite paspausti atstatymo mygtuką arba atjungti USB laidą nuo kompiuterio, dėl kurio tiekimas į „Arduino“ plokštę nutrūksta.

Dabar vėl prijunkite USB kabelį, atidarykite nuoseklųjį monitorių, kuris paragins jus įvesti išsaugotą 6 skaitmenų slaptažodį.

Įveskite teisingą slaptažodį, kurį šviečia šviesos diodas.

Jei norite pakeisti slaptažodį, pakeiskite skaitmenį iš kodo:

int passExistAdd = 200

Pirmiau nurodyta eilutė yra papildomas adresas, kurį aptarėme anksčiau. Keisti bet kur nuo 6 iki 1023. 6 skaitmenų slaptažodžiui saugoti yra skirti 0–5 adresai.

Pakeitus šį papildomą adresą programa bus apgauta, kad slaptažodis dar nėra sukurtas, ir paragins jus sukurti naują 6 skaitmenų slaptažodį.

Jei turite klausimų dėl šio „EEPROM“ „Arduino“ pamokoje, prašome išreikšti komentaruose, galite gauti greitą atsakymą.




Pora: Viršutinis srovės nutraukimas naudojant „Arduino“ Kitas: mobiliuoju telefonu valdomas robotas, naudojant DTMF modulį