Kako koristiti Arduino EEPROM za spremanje podataka između ciklusa napajanja

Kako koristiti Arduino EEPROM za spremanje podataka između ciklusa napajanja

Jeste li znali da Arduino može pohranjivati ​​podatke kada je isključen? Ne skica pohranjena u flash memoriji. Govorim o promjenjivim podacima u EEPROM -u. Pridružite mi se dok vam pokazujem kako čitati i pisati te što može učiniti za vaše projekte.





Ako ste tek počeli koristiti Arduino, svakako provjerite naš vodič za početnike .





Što je EEPROM?

EEPROM je kratica za električno izbrisiva programabilna memorija samo za čitanje . To je vrsta stalne memorije. Ne brinite ako ne razumijete što to znači. Jednostavno pohranjuje podatke čak i kad je napajanje isključeno (za razliku od radna memorija , kojoj je potrebna električna energija za čuvanje bilo kakvih podataka).





EEPROM je ugrađen u bezbroj procesora, kao što je polje programabilnog polja (FPGA) koje se može programirati u polju i koristi se u Matrix Creator Pi HAT-u. Svi Arduini imaju na raspolaganju EEPROM, ali kapacitet varira ovisno o modelu. Za više pojedinosti o svakoj ploči pogledajte naš vodič za kupnju.

Kako radi?

EEPROM se električno briše i programira pomoću Tuneliranje Fowler-Nordheim . Ne morate znati tehničke pojedinosti da biste ga mogli koristiti. Osnovna je premisa da se električna energija koristi za promjenu binarnih podataka (što je binarno). Može se čitati, brisati i ponovno pisati elektroničkim putem.



Srećom, Arduino jezik olakšava promjenu podataka, sve bez potrebe za diplomom računalnih znanosti.

Životni vijek

Iako je EEPROM jednostavan za korištenje u Arduinu, ipak ima ograničen vijek trajanja. EEPROM je specificiran za rukovanje 100.000 ciklusa čitanja/brisanja. To znači da možete upisivati, a zatim brisati/ponovno pisati podatke 100.000 puta prije nego što EEPROM postane nestabilan. U stvarnosti, Atmel (proizvođači Arduino 'Chip') poluvodiča mogu podnijeti veći ili manji broj ciklusa, ovisno o tolerancijama svakog procesora.





Nakon što je lokacija napisana i izbrisana previše puta, može postati nepouzdana. Možda neće vratiti točne podatke ili vratiti vrijednost iz susjednog bita.

Ovo može zvučati kao puno pisanja, ali može biti lako doseći tu granicu ako čitate i pišete programski (u petlja , na primjer). Čitanje podataka ne razgrađuje silicij, radi samo pisanje . Bez straha možete čitati podatke s EEPROM -a koliko god želite!





Važno je napomenuti da se ovo ograničenje odnosi na svako memorijsko mjesto. Vaš Arduino može imati 1.000 ili više memorijskih mjesta dostupnih u EEPROM -u, pa ako pišete previše puta na jedno mjesto, to utječe samo na to mjesto, a ne na bilo koje drugo. Kasnije ću raspravljati izravnavanje trošenja , koji može smanjiti trošenje EEPROM -a ravnomjernom distribucijom podataka - nešto što SSD -ovi koriste.

Čemu služi?

EEPROM je nevjerojatno koristan za vaše Arduino projekte. Budući da pamti podatke čak i kad je napajanje isključeno, mogli biste pohraniti stanje Arduina. Možda biste mogli izgraditi lasersku kupolu koja pamti njen položaj ili koliko je 'municije' preostalo. Pomoću njega možete kontrolirati svoje uređaje i zabilježiti koliko je puta vaš uređaj bio aktiviran.

EEPROM je najprikladniji za stvari poput postavki ili visokih ocjena. Ako želite redovito pisati složene podatke, razmislite o Ethernet štitu (s ugrađenim SD utorom) ili Raspberry Pi.

Čitati i pisati

Sada kad je teorija na putu, pogledajmo kako čitati i pisati neke podatke! Prvo uključite knjižnicu (dolazi s Arduino IDE -om):

#include

Sada napišite neke podatke:

EEPROM.write(0, 12);

Ovo upisuje broj 12 na mjesto EEPROM -a 0 . Svako pisanje traje 3,3 milisekunde ( ms , 1000 ms = 1 sekunda). Obratite pažnju na to kako ne možete pisati slova ( char ), dopušteni su samo brojevi od nule do 255. Zato je EEPROM idealan za postavke ili visoke rezultate, ali nije tako dobar za imena igrača ili riječi. Ovom metodom moguće je pohraniti tekst (svako slovo abecede možete preslikati u broj), no morat ćete imati više memorijskih lokacija - po jedno mjesto za svako slovo.

Evo kako čitate te podatke:

kako napraviti tablicu u word -u
EEPROM.read(0);

Nula je adresa na koju ste prethodno pisali. Ako prije niste pisali na adresu, ona će vratiti maksimalnu vrijednost ( 255 ).

Dostupne su neke malo korisnije metode. Recimo da želite pohraniti decimalno mjesto ili niz:

EEPROM.put(2,'12.67');

Ovo zapisuje podatke na više lokacija - nešto što bi bilo lako napisati sami, ali svejedno zgodno. I dalje ćete morati pratiti koliko je lokacija pisalo kako ne biste slučajno prepisali svoje podatke! Morate koristiti dobiti način ponovnog dohvaćanja ovih podataka:

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

Vrijednost iz get sprema se u float f promjenjivo. Obratite pozornost na to kako se ovo inicijalizira 0,00 f kao vrijednost. The f omogućuje prevoditelju da zna da biste htjeli pohraniti veliki broj u ovu varijablu, pa postavlja neke dodatne konfiguracije tijekom kompilacije.

The Dokumentacija EEPROM -a na Arduino web mjesto ima još mnogo primjera.

Izravnavanje habanja

Izravnavanje istrošenosti tehnika je koja se koristi za smanjenje trošenja i povećanje vijeka trajanja EEPROM -a. Ako radite samo na malom projektu, možda se nećete morati brinuti o tome.

Najjednostavnija stvar koju možete učiniti kako biste očuvali vijek trajanja EEPROM -a je ograničiti zapise na određeno mjesto. To možete učiniti tako da prvo pročitate adresu, a ako je vrijednost koju želite upisati već prisutna, nema je potrebe ponovno pisati (zapamtite, čitanje podataka ne šteti). Evo kako biste to učinili:

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

To je vrlo jednostavan dio koda, međutim radi samo za cijele brojeve! Umjesto ponovnog pronalaska kotača, upotrijebite funkciju ugrađenu u Arduino EEPROM knjižnicu:

EEPROM.update(address, val);

Ova metoda ima potpuno isti potpis kao i pisati metoda, iako može drastično smanjiti broj potrebnih zapisa!

Ako trebate upisati mnogo podataka i zabrinuti ste zbog istrošenosti silicija, možete pratiti koliko upisujete, iako to koristi više podataka. Evo grube implementacije u pseudokod :

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

Morat ćete pohraniti adresu i writeCount u EEPROM (a writeCount će se morati podijeliti na različite adrese). Većinu vremena ova razina zaštite neće biti potrebna. Arduini su također jeftini, pa će vam možda biti lakše kupiti rezervnu kopiju!

Sada biste trebali znati dovoljno za stvaranje izvrsnih projekata. Javite nam ako napravite nešto super! Možete li prepoznati sve uređaje na slikama? Ostavite nam komentar ispod!

Udio Udio Cvrkut E -pošta 5 savjeta za nadopunu vaših VirtualBox Linux strojeva

Umorni ste od loših performansi koje nude virtualni strojevi? Evo što biste trebali učiniti kako biste povećali performanse VirtualBox -a.

Pročitajte Dalje
Povezane teme
  • Uradi sam
  • Arduino
  • Elektronika
O autoru Joe Coburn(136 objavljenih članaka)

Joe je diplomirao računalne znanosti na Sveučilištu Lincoln, UK. On je profesionalni programer softvera, a kad ne leti bespilotnim letjelicama ili ne piše glazbu, često ga se može zateći kako fotografira ili proizvodi video zapise.

Više od Joea Coburna

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu