Kako uporabljati Arduino EEPROM za shranjevanje podatkov med napajalnimi cikli

Kako uporabljati Arduino EEPROM za shranjevanje podatkov med napajalnimi cikli

Ali ste vedeli, da lahko Arduino shrani podatke, ko je izklopljen? Ne skica, shranjena v pomnilniku flash. Govorim o spremenljivih podatkih v EEPROM -u. Pridružite se mi, ko vam bom pokazal, kako brati in pisati, ter kaj lahko naredi za vaše projekte.





Če ste novi v Arduinu, si oglejte našo vodnik za začetnike .





Kaj je EEPROM?

EEPROM je kratica za električno izbrisljiv programabilni pomnilnik samo za branje . To je vrsta nehlapnega spomina. Ne skrbite, če ne razumete, kaj vse to pomeni. Preprosto shranjuje podatke tudi pri izklopljenem napajanju (za razliko od tega Oven , ki za shranjevanje podatkov potrebuje elektriko).





EEPROM je vgrajen v nešteto procesorjev, kot je polje programabilnih vrat (FPGA), ki se uporablja v Matrix Creator Pi HAT. Vsi Arduini imajo na voljo EEPROM, vendar se zmogljivost razlikuje glede na model. Za več podrobnosti o vsaki plošči si oglejte naš priročnik za nakup.

Kako deluje?

EEPROM se električno izbriše in programira z uporabo Predor Fowler-Nordheim . Za uporabo vam ni treba poznati tehničnih podrobnosti. Osnovno izhodišče je, da se električna energija uporablja za spreminjanje binarnih podatkov (kaj je binarno). Lahko ga preberete, izbrišete in ponovno napišete v elektronski obliki.



Na srečo je Arduinski jezik omogoča enostavno spreminjanje podatkov, ne da bi potrebovali diplomo iz računalništva.

Pričakovana življenjska doba

Čeprav je EEPROM enostaven za uporabo v Arduinu, ima omejeno življenjsko dobo. EEPROM je določen za obdelavo 100.000 ciklov branja/brisanja. To pomeni, da lahko 100.000-krat zapišete in nato izbrišete/znova zapišete podatke, preden postane EEPROM nestabilen. V resnici pa Atmel (proizvajalci Arduinovih 'čipov') polprevodnikov lahko obravnavajo večje ali manjše število ciklov, odvisno od toleranc vsakega procesorja.





Ko je lokacija prevečkrat napisana in izbrisana, lahko postane nezanesljiva. Morda ne vrne pravilnih podatkov ali vrne vrednosti iz sosednjega bita.

To se morda sliši kot veliko pisanja, vendar je lahko preprosto doseči to mejo, če programsko berete in pišete (v zanka , na primer). Branje podatkov ne razgradi silicija, to počne samo pisanje . Brez strahu lahko berete podatke iz EEPROM -a, kolikor želite!





Pomembno je omeniti, da ta omejitev velja za vsako pomnilniško mesto. Vaš Arduino ima lahko v EEPROM -u na voljo 1000 ali več pomnilniških mest, zato če na eno lokacijo pišete prevečkrat, vpliva le na to lokacijo in ne na katero koli drugo. Kasneje bom razpravljal izravnavanje obrabe , ki lahko z enakomerno porazdelitvijo podatkov zmanjša obrabo EEPROM -a, kar uporabljajo SSD diski.

Za kaj je koristno?

EEPROM je neverjetno uporaben za vaše Arduino projekte. Ker si zapomni podatke, tudi ko je napajanje izklopljeno, lahko shranite stanje Arduina. Morda bi lahko zgradili laserski stolp, ki si zapomni svoj položaj ali koliko 'streliva' ostane. Z njim lahko upravljate svoje naprave in zabeležite, kolikokrat je bila vaša naprava vklopljena.

EEPROM je najbolj primeren za stvari, kot so nastavitve ali visoke ocene. Če želite redno pisati zapletene podatke, razmislite o ethernetnem ščitu (z vgrajeno režo SD) ali o Raspberry Pi.

Beri in piši

Zdaj, ko je teorija na poti, poglejmo, kako prebrati in zapisati nekaj podatkov! Najprej vključite knjižnico (priloženo je Arduino IDE):

#include

Zdaj napišite nekaj podatkov:

EEPROM.write(0, 12);

To zapiše številko 12 na lokacijo EEPROM 0 . Vsako pisanje traja 3,3 milisekunde ( gospa , 1000 ms = 1 sekunda). Upoštevajte, kako ne morete pisati črk ( char ), so dovoljene samo številke od nič do 255. Zato je EEPROM idealen za nastavitve ali visoke rezultate, vendar ni tako dober za imena ali besede igralcev. Besedilo je mogoče shraniti s to metodo (vsako črko abecede lahko preslikate v številko), vendar boste morali imeti več pomnilniških mest - eno mesto za vsako črko.

Takole berete te podatke:

kako zaobiti geslo za windows xp
EEPROM.read(0);

Nič je naslov, na katerega ste prej pisali. Če prej niste pisali na naslov, bo vrnil največjo vrednost ( 255 ).

Na voljo je nekaj nekoliko bolj uporabnih metod. Recimo, da želite shraniti decimalno mesto ali niz:

EEPROM.put(2,'12.67');

Tako se podatki zapišejo na več lokacij - nekaj, kar bi lahko sami napisali, a vseeno priročno. Še vedno boste morali spremljati, na koliko lokacij je to zapisano, da ne boste pomotoma prepisali svojih podatkov! Morate uporabiti dobiti način ponovnega pridobivanja teh podatkov:

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

Vrednost iz get je shranjena v float f spremenljivka. Upoštevajte, kako se to inicializira 0,00 f kot vrednost. The f prevajalniku sporoči, da boste morda želeli shraniti veliko število v to spremenljivko, zato med sestavljanjem nastavi nekaj dodatnih konfiguracij.

The Dokumentacija EEPROM na Spletno mesto Arduino ima še veliko primerov.

Izravnavanje obrabe

Izravnavanje obrabe je tehnika, ki se uporablja za zmanjšanje obrabe in podaljšanje življenjske dobe EEPROM -a. Če delate le na majhnem projektu, vam morda ne bo treba skrbeti za to.

Najenostavnejša stvar, ki jo lahko storite, da ohranite življenjsko dobo EEPROM -a, je, da omejite svoje zapise na določeno lokacijo. To lahko storite tako, da najprej preberete naslov, in če je vrednost, ki jo želite zapisati, že prisotna, je ni treba ponovno zapisati (ne pozabite, da branje podatkov ne škodi). Takole bi to storili:

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

To je precej preprosta koda, vendar deluje le za cela števila! Namesto da znova izumite kolo, uporabite funkcijo, vgrajeno v knjižnico Arduino EEPROM:

EEPROM.update(address, val);

Ta metoda ima popolnoma enak podpis kot pisati metodo, čeprav lahko drastično zmanjša število potrebnih zapisov!

Če morate napisati veliko podatkov in ste zaskrbljeni zaradi izrabe silicija, lahko spremljate, koliko zapisov delate, čeprav to uporablja več podatkov. Tukaj je groba izvedba v psevdokoda :

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

Naslov in writeCount boste morali shraniti v EEPROM (in writeCount bo treba razdeliti po lokacijah naslovov). V večini primerov ta raven zaščite ne bo potrebna. Arduini so tudi tako poceni, zato boste morda lažje kupili varnostno kopijo!

Zdaj bi morali vedeti dovolj za ustvarjanje čudovitih projektov. Sporočite nam, če naredite kaj kul! Ali lahko prepoznate vse naprave na slikah? Pustite nam komentar spodaj!

Deliti Deliti Cvrkutati E-naslov 5 nasvetov za polnjenje vaših strojev VirtualBox Linux

Ste naveličani slabe zmogljivosti, ki jo ponujajo virtualni stroji? Tukaj je tisto, kar morate storiti za povečanje zmogljivosti VirtualBox.

Preberite Naprej
Sorodne teme
  • DIY
  • Arduino
  • Elektronika
O avtorju Joe Coburn(136 objavljenih člankov)

Joe je diplomiral iz računalništva na Univerzi v Lincolnu v Veliki Britaniji. Je poklicni razvijalec programske opreme in ko ne leti z brezpilotnimi letali ali ne piše glasbe, ga pogosto najdejo pri fotografiranju ali ustvarjanju videoposnetkov.

Več od Joea Coburna

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, če se želite naročiti
Kategorija Diy