Hvordan bruke Arduino EEPROM til å lagre data mellom strømsykluser

Hvordan bruke Arduino EEPROM til å lagre data mellom strømsykluser

Visste du at Arduino kan lagre data når den er slått av? Ikke skissen lagret i flashminne. Jeg snakker om variable data i EEPROM. Bli med meg mens jeg viser deg hvordan du leser og skriver til det, og hva det kan gjøre for prosjektene dine.





Hvis du er ny i Arduino, må du sjekke ut vår nybegynnerguide .





Hva er EEPROM?

EEPROM står for elektrisk slettbart, programmerbart skrivebeskyttet minne . Det er en type ikke-flyktig minne. Ikke bekymre deg hvis du ikke forstår hva det betyr. Den lagrer ganske enkelt data selv om strømmen er fjernet (i motsetning til RAM , som trenger strøm for å beholde eventuelle data).





EEPROM er innebygd i et mylder av prosessorer, for eksempel feltprogrammerbar gate array (FPGA) som brukes i Matrix Creator Pi HAT. Alle Arduinos har EEPROM tilgjengelig, men kapasiteten varierer per modell. Sørg for å ta en titt på vår kjøpsguide for mer informasjon om hvert brett.

Hvordan virker det?

EEPROM slettes og programmeres elektrisk ved hjelp av Fowler-Nordheim tunneling . Du trenger ikke å vite de tekniske detaljene for å kunne bruke den. Den grunnleggende forutsetningen er at elektrisitet brukes til å endre de binære dataene (det som er binært). Den kan leses, slettes og skrives på nytt elektronisk.



Heldigvis er Arduino språk gjør det enkelt å endre data, alt uten at du trenger en grad i informatikk.

Forventet levealder

Selv om det er enkelt å bruke EEPROM i Arduino, har det en begrenset levetid. EEPROM er spesifisert for å håndtere 100 000 lese/slette sykluser. Dette betyr at du kan skrive og deretter slette/skrive data på nytt 100.000 ganger før EEPROM blir ustabil. I virkeligheten, Atmel (produsentene av Arduino 'Chip') halvledere kan håndtere et høyere eller lavere antall sykluser, avhengig av toleransene til hver prosessor.





Når et sted er skrevet og slettet for mange ganger, kan det begynne å bli upålitelig. Den kan ikke returnere riktige data, eller returnere verdien fra en nabobit.

Dette kan høres ut som mange skriv, men det kan være lett å nå denne grensen hvis du leser og skriver programmatisk (i en Løkke , for eksempel). Å lese data forringer ikke silisium, bare skriving gjør det . Du kan lese data fra EEPROM så mye du vil uten frykt!





Det er viktig å merke seg at denne grensen gjelder for hvert minnested. Arduino kan ha 1000 eller flere minnesteder tilgjengelig i EEPROM, så hvis du skriver for mange ganger til ett sted, er det bare den plasseringen som påvirkes, og ikke noen av de andre. Senere skal jeg diskutere slitasjeutjevning , som kan redusere EEPROM -slitasje ved å distribuere data jevnt - noe SSD -er bruker.

Hva er det nyttig for?

EEPROM er utrolig nyttig for dine Arduino -prosjekter. Siden den husker data selv når strømmen er fjernet, kan du lagre tilstanden til Arduino. Kanskje du kan bygge et lasertårn som husker posisjonen eller hvor mye 'ammunisjon' som gjenstår. Du kan bruke den til å kontrollere apparatene dine, og logge hvor mange ganger apparatet ble aktivert.

EEPROM er best egnet for ting som innstillinger eller høy score. Hvis du regelmessig vil skrive komplekse data, kan du vurdere et ethernet-skjold (med innebygd SD-spor) eller en Raspberry Pi.

Lese og skrive

Nå som teorien er ute av veien, la oss se på hvordan du leser og skriver noen data! Inkluder først biblioteket (dette følger med Arduino IDE):

#include

Skriv nå noen data:

EEPROM.write(0, 12);

Dette skriver tallet 12 til EEPROM -plassering 0 . Hver skriving tar 3,3 millisekunder ( ms , 1000 ms = 1 sekund). Legg merke til hvordan du ikke kan skrive bokstaver ( røye ), er bare tallene fra null til 255 tillatt. Dette er grunnen til at EEPROM er ideell for innstillinger eller høy score, men ikke så bra for spillernavn eller ord. Det er mulig å lagre tekst ved hjelp av denne metoden (du kan tilordne hver bokstav i alfabetet til et tall), men du må ha flere minnesteder - ett sted for hver bokstav.

Slik leser du disse dataene:

se filmer online gratis uten å registrere deg
EEPROM.read(0);

Null er adressen du skrev til tidligere. Hvis du ikke har skrevet til en adresse før, returnerer den maksimalverdien ( 255 ).

Det er noen litt mer nyttige metoder tilgjengelig. Si at du ønsket å lagre en desimal eller streng:

EEPROM.put(2,'12.67');

Dette skriver dataene til flere steder - noe som ville være lett å skrive selv, men praktisk likevel. Du må fortsatt holde oversikt over hvor mange steder dette har skrevet til, slik at du ikke ved et uhell overskriver dataene dine! Du må bruke metode for å hente disse dataene igjen:

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

Verdien fra get lagres i flottøren f variabel. Legg merke til hvordan dette initialiseres med 0,00 f som verdien. De f lar kompilatoren vite at du kanskje vil lagre et stort antall i denne variabelen, så det setter opp noen flere konfigurasjoner under kompilering.

De EEPROM dokumentasjonArduino nettsted har mange flere eksempler.

Slitasjeutjevning

Slitasjeutjevning er en teknikk som brukes for å redusere slitasjen og øke levetiden til EEPROM. Hvis du bare jobber med et lite prosjekt, trenger du ikke å bekymre deg for dette.

Det enkleste du kan gjøre for å bevare EEPROM -livet, er å begrense skrivingene dine til et bestemt sted. Du kan gjøre dette ved å lese adressen først, og hvis verdien du vil skrive allerede er tilstede, er det ikke nødvendig å skrive den igjen (husk, å lese data gjør ingen skade). Slik gjør du det:

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

Det er en ganske enkel bit kode, men den fungerer bare for heltall! I stedet for å finne opp hjulet på nytt, bruk funksjonen som er innebygd i Arduino EEPROM-biblioteket:

EEPROM.update(address, val);

Denne metoden har nøyaktig samme signatur som skrive metoden, selv om den drastisk kan redusere antall skriv som trengs!

Hvis du trenger å skrive mye data, og er bekymret for å slite ut silisiumet, kan du holde oversikt over hvor mange skriver du gjør, selv om dette bruker mer 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 må lagre adresse og writeCount i EEPROM (og writeCount må deles på tvers av adresseplasser). Mesteparten av tiden vil dette beskyttelsesnivået ikke være nødvendig. Arduinos er også så billige, så det kan være lettere å kjøpe en sikkerhetskopi!

Du burde nå vite nok til å lage noen fantastiske prosjekter. Gi oss beskjed hvis du lager noe kult! Kan du gjenkjenne alle enhetene på bildene? Legg igjen en kommentar nedenfor!

Dele Dele kvitring E -post 5 tips for å overbelaste VirtualBox Linux -maskinene dine

Lei av den dårlige ytelsen som tilbys av virtuelle maskiner? Her er hva du bør gjøre for å øke VirtualBox -ytelsen.

Les neste
Relaterte temaer
  • DIY
  • Arduino
  • Elektronikk
Om forfatteren Joe Coburn(136 artikler publisert)

Joe er utdannet i informatikk fra University of Lincoln, Storbritannia. Han er en profesjonell programvareutvikler, og når han ikke flyr droner eller skriver musikk, kan han ofte bli funnet å ta bilder eller produsere videoer.

Mer fra Joe Coburn

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere