Cum se folosește Arduino EEPROM pentru a salva date între ciclurile de alimentare

Cum se folosește Arduino EEPROM pentru a salva date între ciclurile de alimentare

Știați că Arduino poate stoca date când este oprit? Nu schița stocată în memoria flash. Vorbesc despre date variabile în EEPROM. Alăturați-vă mie, în timp ce vă arăt cum să citiți și să scrieți și ce poate face pentru proiectele dvs.





Dacă sunteți nou în Arduino, asigurați-vă că verificați ghid pentru începători .





Ce este EEPROM?

EEPROM înseamnă memorie de citire programabilă ștearsă electric . Este un tip de memorie nevolatilă. Nu vă faceți griji dacă nu înțelegeți ce înseamnă asta. Stochează pur și simplu datele chiar și cu puterea eliminată (spre deosebire de RAM , care are nevoie de energie electrică pentru a reține orice date).





EEPROM este încorporată într-o multitudine de procesoare, cum ar fi matricea de poartă programabilă în câmp (FPGA) utilizată în Matrix Creator Pi HAT. Toate Arduinos au EEPROM disponibilă, dar capacitatea variază în funcție de model. Asigurați-vă că aruncați o privire la ghidul nostru de cumpărare pentru mai multe detalii pe fiecare tablă.

Cum functioneazã?

EEPROM este șters electric și programat folosind Tunelare Fowler-Nordheim . Nu este nevoie să cunoașteți detaliile tehnice pentru ao putea folosi. Premisa de bază este că electricitatea este utilizată pentru a schimba datele binare (ceea ce este binar). Poate fi citit, șters și rescris electronic.



Din fericire, Limbaj Arduino facilitează schimbarea datelor, fără a avea nevoie de o diplomă în informatică.

Speranța de viață

Deși este ușor de utilizat EEPROM în Arduino, are o viață limitată. EEPROM este specificată pentru a gestiona 100.000 de cicluri de citire / ștergere. Aceasta înseamnă că puteți scrie și apoi șterge / rescrie date de 100.000 de ori înainte ca EEPROM să devină instabilă. In realitate, Atmel (producătorii semiconductoarelor Arduino „Chip”) pot gestiona un număr mai mare sau mai mic de cicluri, în funcție de toleranțele fiecărui procesor.





Odată ce o locație a fost scrisă și ștearsă de prea multe ori poate începe să devină nesigură. Este posibil să nu returneze datele corecte sau să returneze valoarea de la un bit învecinat.

Acest lucru poate suna ca o mulțime de scrieri, dar poate fi ușor să atingi această limită dacă citești și scrii programatic (într-un buclă , de exemplu). Citirea datelor nu degradează siliciul, numai scrisul face . Puteți citi datele din EEPROM oricât doriți fără teamă!





Este important să rețineți că această limită se aplică fiecărei locații de memorie. Arduino-ul dvs. poate avea 1.000 sau mai multe locații de memorie disponibile în EEPROM, deci dacă scrieți de prea multe ori într-o locație, este afectată doar locația respectivă și nu oricare dintre celelalte. Mai târziu voi discuta nivelarea uzurii , care poate reduce uzura EEPROM prin distribuirea uniformă a datelor - lucru pe care SSD-urile îl folosesc.

Pentru ce este util?

EEPROM este incredibil de utilă pentru proiectele dvs. Arduino. Deoarece își amintește datele chiar și atunci când alimentarea este scoasă, puteți stoca starea Arduino. Poate ați putea construi o turelă laser care să-și amintească poziția sau cât de mult „muniție” rămâne. Puteți să-l utilizați pentru a vă controla aparatele și să vă înregistrați de câte ori a fost activat aparatul.

EEPROM este cel mai potrivit pentru lucruri precum setări sau scoruri mari. Dacă doriți să scrieți în mod regulat date complexe, poate luați în considerare un scut Ethernet (cu slot SD încorporat) sau un Raspberry Pi.

Citeste si scrie

Acum că teoria nu mai este în regulă, să ne uităm la modul de citire și scriere a unor date! În primul rând, includeți biblioteca (aceasta vine împreună cu Arduino IDE):

#include

Acum scrieți câteva date:

EEPROM.write(0, 12);

Aceasta scrie numărul 12 la locația EEPROM 0 . Fiecare scriere durează 3,3 milisecunde ( Domnișoară , 1000ms = 1 secundă). Observați cum nu puteți scrie scrisori ( char ), numai numerele de la zero la 255 sunt permise. Acesta este motivul pentru care EEPROM este ideală pentru setări sau scoruri mari, dar nu atât de bună pentru numele sau cuvintele jucătorilor. Este posibil să stocați text folosind această metodă (ați putea asocia fiecare literă a alfabetului la un număr), totuși va trebui să aveți mai multe locații de memorie - o locație pentru fiecare literă.

Iată cum citiți aceste date:

cum să eliminați un obiect în Photoshop
EEPROM.read(0);

Zero este adresa căreia i-ați scris anterior. Dacă nu ați scris până acum la o adresă, aceasta va returna valoarea maximă ( 255 ).

Există câteva metode puțin mai utile disponibile. Spuneți că doriți să stocați o zecimală sau un șir:

EEPROM.put(2,'12.67');

Aceasta scrie datele în mai multe locații - ceva care ar fi ușor de scris, dar la îndemână. Va trebui în continuare să țineți evidența numărului de locații în care s-a scris acest lucru, astfel încât să nu vă suprascrieți accidental datele! Trebuie să utilizați obține metoda de a recupera din nou aceste date:

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

Valoarea de la get este stocată în float f variabil. Observați cum este inițializat acest lucru 0,00f ca valoare. The f anunță compilatorul că este posibil să doriți să stocați un număr mare în această variabilă, așa că configurează câteva configurații suplimentare în timpul compilării.

The Documentație EEPROM pe Site-ul Arduino are multe alte exemple.

Nivelarea uzurii

Nivelarea uzurii este o tehnică utilizată pentru a reduce uzura și a crește durata de viață a EEPROM. Dacă lucrați doar la un proiect mic, este posibil să nu vă faceți griji în legătură cu acest lucru.

Cel mai simplu lucru pe care îl puteți face pentru a păstra viața EEPROM este să vă limitați scrierile la o anumită locație. Puteți face acest lucru citind mai întâi adresa și, dacă valoarea pe care doriți să o scrieți este deja prezentă, nu este nevoie să o scrieți din nou (nu uitați, citirea datelor nu dăunează). Iată cum ați face asta:

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

Acesta este un bit destul de simplu de cod, totuși funcționează doar pentru numere întregi! În loc să reinventați roata, utilizați funcția încorporată în biblioteca Arduino EEPROM:

EEPROM.update(address, val);

Această metodă are exact aceeași semnătură ca scrie metoda, deși poate reduce drastic numărul de scrieri necesare!

Dacă trebuie să scrieți o mulțime de date și sunteți îngrijorat de uzarea siliciului, puteți urmări câte scrieri faceți, deși acest lucru folosește mai multe date. Iată o implementare dură în pseudo cod :

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

Va trebui să stocați adresa și writeCount în EEPROM (iar writeCount va trebui să fie împărțit între locațiile adreselor). De cele mai multe ori, acest nivel de protecție nu va fi necesar. Arduino-urile sunt atât de ieftine, așa că s-ar putea să vă fie mai ușor să cumpărați o copie de rezervă!

Acum ar trebui să știți suficient pentru a face câteva proiecte minunate. Spuneți-ne dacă faceți ceva mișto! Puteți recunoaște toate dispozitivele din imagini? Lasă-ne un comentariu mai jos!

Acțiune Acțiune Tweet E-mail 5 sfaturi pentru a vă supraîncărca mașinile VirtualBox Linux

V-ați săturat de slaba performanță oferită de mașinile virtuale? Iată ce ar trebui să faceți pentru a vă spori performanța VirtualBox.

Citiți în continuare
Subiecte asemănătoare
  • DIY
  • Arduino
  • Electronică
Despre autor Joe Coburn(136 articole publicate)

Joe este absolvent de Informatică de la Universitatea Lincoln, Marea Britanie. Este un dezvoltator de software profesionist și, atunci când nu zboară cu drone sau nu scrie muzică, poate fi găsit adesea făcând fotografii sau producând videoclipuri.

Mai multe de la Joe Coburn

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona
Categorie Diy