Sådan bruges Arduino EEPROM til at gemme data mellem strømcyklusser

Sådan bruges Arduino EEPROM til at gemme data mellem strømcyklusser

Vidste du, at Arduino kan gemme data, når den er slukket? Ikke skitsen, der er gemt i flash -hukommelse. Jeg taler om variable data i EEPROM. Følg med, mens jeg viser dig, hvordan du læser og skriver til det, og hvad det kan gøre for dine projekter.





Hvis du er ny i Arduino, skal du tjekke vores begynderguide .





Hvad er EEPROM?

EEPROM står for elektrisk sletbar programmerbar skrivebeskyttet hukommelse . Det er en type ikke-flygtig hukommelse. Bare rolig, hvis du ikke forstår, hvad noget af det betyder. Det gemmer simpelthen data, selvom strømmen er fjernet (i modsætning til vædder , som har brug for elektricitet for at gemme alle data).





EEPROM er indbygget i et utal af processorer, f.eks. Det feltprogrammerbare gate array (FPGA), der bruges i Matrix Creator Pi HAT. Alle Arduinos har EEPROM til rådighed, men kapaciteten varierer fra model til model. Sørg for at tage et kig på vores købsguide for flere detaljer om hvert bord.

Hvordan virker det?

EEPROM slettes og programmeres elektrisk ved hjælp af Fowler-Nordheim tunneling . Du behøver ikke at kende de tekniske detaljer for at kunne bruge dem. Den grundlæggende forudsætning er, at elektricitet bruges til at ændre de binære data (hvad der er binært). Det kan læses, slettes og omskrives elektronisk.



Heldigvis er Arduino sprog gør det let at ændre data, alt sammen uden at skulle have en uddannelse i datalogi.

Forventede levealder

Selvom det er let at bruge EEPROM i Arduino, har det en begrænset levetid. EEPROM er specificeret til at håndtere 100.000 læse/slette cyklusser. Det betyder, at du kan skrive og derefter slette/genskrive data 100.000 gange, før EEPROM'en bliver ustabil. I virkeligheden, Atmel (producenterne af Arduino 'Chip') halvledere kan håndtere et højere eller lavere antal cyklusser afhængigt af tolerancerne for hver processor.





Når et sted er blevet skrevet og slettet for mange gange, kan det begynde at blive upålideligt. Det returnerer muligvis ikke de korrekte data eller returnerer værdien fra en nabobit.

Dette lyder måske som mange skrivninger, men det kan være let at nå denne grænse, hvis man læser og skriver programmatisk (i en sløjfe , for eksempel). Læsning af data nedbryder ikke silicium, kun skrivning gør . Du kan læse data fra EEPROM så meget som du vil uden frygt!





Det er vigtigt at bemærke, at denne grænse gælder for hvert hukommelsessted. Din Arduino kan have 1.000 eller flere hukommelsessteder tilgængelige i EEPROM, så hvis du skriver for mange gange til et sted, er det kun den placering, der påvirkes, og ikke nogen af ​​de andre. Senere vil jeg diskutere slidudjævning , som kan reducere EEPROM -slid ved at distribuere data jævnt - noget som SSD'er gør brug af.

Hvad er det nyttigt til?

EEPROM er utrolig nyttig til dine Arduino -projekter. Da den husker data, selv når strømmen er fjernet, kan du gemme Arduino -tilstanden. Måske kunne du bygge et lasertårn, der husker dets position, eller hvor meget 'ammunition' der er tilbage. Du kan bruge det til at styre dine apparater og logge på, hvor mange gange dit apparat blev aktiveret.

EEPROM er bedst egnet til ting som indstillinger eller high-scores. Hvis du regelmæssigt vil skrive komplekse data, kan du overveje et ethernet-skjold (med indbygget SD-slot) eller en Raspberry Pi.

Læs og skriv

Nu hvor teorien er ude af vejen, lad os se på, hvordan man læser og skriver nogle data! Inkluder først biblioteket (dette følger med Arduino IDE):

#include

Skriv nu nogle data:

EEPROM.write(0, 12);

Dette skriver nummeret 12 til EEPROM -placering 0 . Hver skrivning tager 3,3 millisekunder ( Frk , 1000 ms = 1 sekund). Læg mærke til, hvordan du ikke kan skrive bogstaver ( forkælelse ), er kun tallene fra nul til 255 tilladt. Det er derfor, EEPROM er ideel til indstillinger eller høje scores, men ikke så god til spillernavne eller ord. Det er muligt at gemme tekst ved hjælp af denne metode (du kan knytte hvert bogstav i alfabetet til et tal), men du skal have flere hukommelsessteder - et sted for hvert bogstav.

Sådan læser du disse data:

sjove ting at spørge google mini
EEPROM.read(0);

Nul er den adresse, du tidligere skrev til. Hvis du ikke har skrevet til en adresse før, returnerer den den maksimale værdi ( 255 ).

Der findes nogle lidt mere nyttige metoder. Sig, at du ønskede at gemme et decimal eller en streng:

EEPROM.put(2,'12.67');

Dette skriver dataene til flere steder - noget der ville være let at skrive selv, men praktisk alligevel. Du skal stadig holde styr på, hvor mange steder dette har skrevet til, så du ikke ved et uheld overskriver dine data! Du skal bruge metode til at hente disse data igen:

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

Værdien fra get gemmes i flyderen f variabel. Læg mærke til hvordan dette initialiseres med 0,00f som værdien. Det f lader kompilatoren vide, at du måske vil gemme et stort antal i denne variabel, så det opsætter nogle yderligere konfigurationer under kompilering.

Det EEPROM dokumentation på den Arduino websted har mange flere eksempler.

Slid nivellering

Slidudjævning er en teknik, der bruges til at reducere slid og øge levetiden for EEPROM. Hvis du kun arbejder på et lille projekt, skal du muligvis ikke bekymre dig om dette.

Den enkleste ting, du kan gøre for at bevare EEPROM -livet, er at begrænse dine skriverier til et bestemt sted. Du kan gøre dette ved at læse adressen først, og hvis den værdi, du vil skrive, allerede er til stede, er det ikke nødvendigt at skrive den igen (husk, at læse data gør ingen skade). Sådan gør du det:

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

Det er en ganske simpel bit kode, men det fungerer kun for heltal! I stedet for at genopfinde hjulet, skal du bruge funktionen, der er indbygget i Arduino EEPROM-biblioteket:

EEPROM.update(address, val);

Denne metode har nøjagtig den samme signatur som skrive metode, selvom det kan reducere antallet af nødvendige skrivninger drastisk!

Hvis du har brug for at skrive en masse data og er bekymret for slid af silicium, kan du holde styr på, hvor mange skriver du laver, selvom dette bruger flere data. Her er en grov implementering i pseudokode :

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

Du skal gemme adresse og writeCount i EEPROM (og writeCount skal opdeles på adresseplaceringer). Størstedelen af ​​tiden vil dette beskyttelsesniveau ikke være nødvendigt. Arduinos er også så billige, så du kan have lettere ved at købe en backup!

Du burde nu vide nok til at lave nogle fantastiske projekter. Lad os vide, hvis du laver noget fedt! Kan du genkende alle enhederne på billederne? Efterlad os en kommentar herunder!

Del Del Tweet E -mail 5 tips til at overlade dine VirtualBox Linux -maskiner

Træt af den dårlige ydelse, der tilbydes af virtuelle maskiner? Her er hvad du skal gøre for at øge din VirtualBox -ydeevne.

Læs Næste
Relaterede emner
  • gør det selv
  • Arduino
  • Elektronik
Om forfatteren Joe Coburn(136 artikler udgivet)

Joe er uddannet i datalogi fra University of Lincoln, UK. Han er en professionel softwareudvikler, og når han ikke flyver med droner eller skriver musik, kan han ofte findes tage fotos eller producere videoer.

Mere fra Joe Coburn

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere