Kaip naudoti „Arduino EEPROM“ norint išsaugoti duomenis tarp maitinimo ciklų

Kaip naudoti „Arduino EEPROM“ norint išsaugoti duomenis tarp maitinimo ciklų

Ar žinojote, kad „Arduino“ gali saugoti duomenis, kai jis išjungtas? Ne eskizas, išsaugotas „flash“ atmintyje. Kalbu apie kintamus duomenis EEPROM. Prisijunk prie manęs, nes parodysiu, kaip jam skaityti ir rašyti, ir ką jis gali padaryti tavo projektams.





Jei esate naujas „Arduino“, būtinai peržiūrėkite mūsų pradedančiųjų vadovas .





Kas yra EEPROM?

EEPROM reiškia elektra ištrinama programuojama tik skaitoma atmintis . Tai yra nepastovios atminties rūšis. Nesijaudinkite, jei nesuprantate, ką tai reiškia. Jis tiesiog saugo duomenis net ir išjungęs maitinimą (skirtingai RAM , kuriai reikia elektros energijos, kad būtų išsaugoti visi duomenys).





EEPROM yra integruotas į daugybę procesorių, tokių kaip lauko programuojamas vartų masyvas (FPGA), naudojamas „Matrix Creator Pi HAT“. Visuose „Arduinos“ yra prieinamas EEPROM, tačiau talpa skiriasi priklausomai nuo modelio. Būtinai peržiūrėkite mūsų pirkimo vadovą, kad gautumėte daugiau informacijos apie kiekvieną lentą.

Kaip tai veikia?

EEPROM yra elektra ištrinamas ir užprogramuojamas naudojant Fowler-Nordheim tunelis . Norint juo naudotis, nereikia žinoti techninių detalių. Pagrindinė prielaida yra ta, kad dvejetainiams duomenims (kas yra dvejetainiai) pakeisti naudojama elektros energija. Jį galima skaityti, ištrinti ir perrašyti elektroniniu būdu.



Laimei, Arduino kalba leidžia lengvai keisti duomenis, nereikalaujant informatikos laipsnio.

Gyvenimo trukmė

Nors „Arduino“ lengva naudoti EEPROM, jo tarnavimo laikas yra ribotas. EEPROM skirtas 100 000 skaitymo/ištrynimo ciklų. Tai reiškia, kad galite rašyti ir ištrinti/perrašyti duomenis 100 000 kartų, kol EEPROM taps nestabilus. Realybėje, Atmel („Arduino„ Chip “gamintojai) puslaidininkiai gali apdoroti didesnį ar mažesnį ciklų skaičių, priklausomai nuo kiekvieno procesoriaus leistinų nuokrypių.





Kai vieta buvo parašyta ir ištrinta per daug kartų, ji gali tapti nepatikima. Jis gali negrąžinti teisingų duomenų arba grąžinti vertę iš gretimo bito.

Tai gali atrodyti kaip daug rašymo, tačiau šią ribą gali būti lengva pasiekti, jei programiškai skaitote ir rašote (a kilpa , pavyzdžiui). Duomenų skaitymas nesumažina silicio, tai daro tik rašymas . Galite be baimės skaityti duomenis iš EEPROM tiek, kiek norite!





Svarbu pažymėti, kad ši riba taikoma kiekvienai atminties vietai. Jūsų „Arduino“ gali turėti 1000 ar daugiau atminties vietų EEPROM, taigi, jei rašote per daug kartų į vieną vietą, tai paveikia tik tą vietą, o ne bet kurią kitą. Vėliau aš diskutuosiu susidėvėjimo išlyginimas , kuris gali sumažinti EEPROM nusidėvėjimą tolygiai paskirstydamas duomenis - tuo naudojasi SSD diskai.

Kam tai naudinga?

EEPROM yra neįtikėtinai naudingas jūsų „Arduino“ projektams. Kadangi jis prisimena duomenis net ir išjungus maitinimą, galite išsaugoti „Arduino“ būseną. Galbūt galėtumėte pastatyti lazerinį bokštelį, kuris prisimintų savo padėtį arba kiek liko „šovinių“. Galite jį naudoti savo prietaisams valdyti ir registruoti, kiek kartų jūsų prietaisas buvo įjungtas.

EEPROM geriausiai tinka tokiems dalykams kaip nustatymai ar aukšti balai. Jei norite reguliariai rašyti sudėtingus duomenis, galbūt apsvarstykite eterneto skydą (su įmontuotu SD lizdu) arba „Raspberry Pi“.

Skaityti ir rašyti

Dabar, kai teorija nepasiekiama, pažvelkime, kaip skaityti ir rašyti kai kuriuos duomenis! Pirmiausia įtraukite biblioteką (tai yra „Arduino IDE“):

#include

Dabar parašykite keletą duomenų:

EEPROM.write(0, 12);

Tai rašo skaičių 12 į EEPROM vietą 0 . Kiekvienas įrašas trunka 3,3 milisekundės ( ms , 1000 ms = 1 sekundė). Atkreipkite dėmesį, kaip negalite rašyti raidžių ( anglis ), leidžiami tik skaičiai nuo nulio iki 255. Štai kodėl EEPROM idealiai tinka nustatymams ar aukštiems rezultatams, bet ne taip gerai žaidėjų vardams ar žodžiams. Naudojant šį metodą galima išsaugoti tekstą (kiekvieną abėcėlės raidę galite susieti su skaičiumi), tačiau turėsite turėti kelias atminties vietas - po vieną vietą kiekvienai raidei.

Štai kaip jūs skaitote šiuos duomenis:

kaip rašyti tekstą iš „Android“ planšetinio kompiuterio
EEPROM.read(0);

Nulis yra adresas, kuriuo rašėte anksčiau. Jei anksčiau nerašėte adresu, bus grąžinta didžiausia vertė ( 255 ).

Yra keletas naudingesnių metodų. Tarkime, kad norite išsaugoti dešimtainę vietą arba eilutę:

EEPROM.put(2,'12.67');

Tai įrašo duomenis į kelias vietas - tai būtų lengva parašyti patiems, bet tuo pačiu patogu. Vis tiek turėsite sekti, kiek vietų tai buvo parašyta, kad netyčia neperrašytumėte savo duomenų! Jūs turite naudoti gauti būdas dar kartą atkurti šiuos duomenis:

float f = 0.00f;
EEPROM.get(2, f);

„Get“ vertė išsaugoma plūdėje f kintamasis. Atkreipkite dėmesį, kaip tai inicijuojama 0,00f kaip vertybė. The f leidžia kompiliatoriui žinoti, kad šiame kintamajame galbūt norėsite išsaugoti didelį skaičių, todėl kompiliavimo metu jis nustato keletą papildomų konfigūracijų.

The EEPROM dokumentacija ant „Arduino“ svetainė turi daug daugiau pavyzdžių.

Dėvėkite išlyginimą

Susidėvėjimo išlyginimas yra metodas, naudojamas sumažinti EEPROM nusidėvėjimą ir pailginti jo tarnavimo laiką. Jei dirbate tik su nedideliu projektu, jums gali nereikėti dėl to jaudintis.

Paprasčiausias dalykas, kurį galite padaryti, kad išsaugotumėte EEPROM gyvybę, yra apriboti rašymą tam tikroje vietoje. Tai galite padaryti pirmiausia perskaitę adresą, o jei norima parašyti reikšmė jau yra, nereikia jo rašyti dar kartą (atminkite, kad duomenų skaitymas nekenkia). Štai kaip tai padarytumėte:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Tai gana paprastas kodo bitas, tačiau jis tinka tik sveikiems skaičiams! Užuot išradę ratą, naudokite funkciją, integruotą „Arduino EEPROM“ bibliotekoje:

EEPROM.update(address, val);

Šis metodas turi tą patį parašą kaip ir rašyti metodas, nors jis gali smarkiai sumažinti reikalingų įrašų skaičių!

Jei jums reikia parašyti daug duomenų ir esate susirūpinę dėl silicio susidėvėjimo, galite sekti, kiek rašote, nors tai naudoja daugiau duomenų. Štai grubus įgyvendinimas pseudokodas :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

Adresą ir „writeCount“ turėsite išsaugoti EEPROM (ir „writeCount“ reikės padalyti į adresų vietas). Dažniausiai tokio lygio apsaugos neprireiks. „Arduinos“ taip pat yra labai pigūs, todėl jums gali būti lengviau įsigyti atsarginę kopiją!

Dabar turėtumėte pakankamai žinoti, kad galėtumėte įgyvendinti nuostabius projektus. Praneškite mums, jei sugalvosite ką nors įdomaus! Ar atpažįstate visus paveikslėliuose esančius prietaisus? Palikite mums komentarą žemiau!

Dalintis Dalintis „Tweet“ Paštu 5 patarimai, kaip perkrauti „VirtualBox Linux“ mašinas

Pavargote nuo prastų virtualių mašinų našumo? Štai ką turėtumėte padaryti, kad padidintumėte „VirtualBox“ našumą.

Skaityti toliau
Susijusios temos
  • Pasidaryk pats
  • Arduino
  • Elektronika
Apie autorių Joe Coburn(Paskelbti 136 straipsniai)

Joe yra baigęs informatikos studijas Linkolno universitete, JK. Jis yra profesionalus programinės įrangos kūrėjas, o kai jis neskraido dronais ir nerašo muzikos, jį dažnai galima rasti fotografuojant ar kuriant vaizdo įrašus.

Daugiau iš Joe Coburn

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia