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

Vidste du, at Arduino kan gemme data, når den er slukket? Jeg taler om EEPROM, så kom med mig, da jeg viser dig, hvordan man læser og skriver til den.

Vidste du, at Arduino kan gemme data, når den er slukket?  Jeg taler om EEPROM, så kom med mig, da jeg viser dig, hvordan man læser og skriver til den.
Reklame

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

Hvis du er ny til Arduino, skal du sørge for at tjekke vores begynderguide. Kom godt i gang med Arduino: En nybegyndervejledning Kom i gang med Arduino: En nybegyndervejledning. Arduino er en open source elektronik prototypeplanlægning baseret på fleksibel, brugervenlig hardware og software. Det er beregnet til kunstnere, designere, hobbyister og alle interesserede i at skabe interaktive objekter eller miljøer. Læs mere .

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 det betyder. Det gemmer simpelthen data selv med den fjernede strøm (i modsætning til RAM En hurtig og beskidt guide til RAM: Hvad du behøver at vide En hurtig og beskidt guide til RAM: Hvad du behøver at vide RAM er en afgørende komponent i hver computer, men det kan være forvirrende for at forstå, om du ikke er en tech guru. I dette indlæg bryder vi det ned i enkle forståelsesbetingelser. Læs mere, som har brug for elektricitet til at gemme data).

EEPROM eksempel skudt

EEPROM er indbygget i et utal af processorer, såsom det feltprogrammerbare gate array (FPGA), der anvendes i Matrix Creator Matrix Creator til Raspberry Pi Review Matrix Creator til Raspberry Pi Review Matrix Creator er en schweizisk Army Knife til din Pi, med 15 sensorer, en række kommunikationsprotokoller, en ring af RGB LED'er, en mikrofon array og meget mere! Læs mere Pi HAT. Alle Arduinos har EEPROM til rådighed, men kapaciteten varierer pr. Model. Sørg for, at du kigger på vores købsguide Arduino Købsvejledning: Hvilket bord skal du få? Arduino Købsvejledning: Hvilket bestyrelse skal du få? Der er så mange forskellige slags Arduino boards derude, du ville blive tilgivet for at være forvirret. Hvad skal du købe til dit projekt? Lad os hjælpe med denne Arduino købeguide! Læs mere for flere detaljer om hvert bord.

Hvordan virker det?

EEPROM er elektrisk slettet og programmeret ved brug af Fowler-Nordheim tunneling . Du behøver ikke at kende de tekniske detaljer for at kunne bruge det. Den grundlæggende forudsætning er, at elektricitet er brugt til at ændre binære data (hvad er binær Hvad er binært? [Teknologi forklaret] Hvad er binært? [Teknologi forklaret] Da binær er så absolut fundamentalt for eksistensen af ​​computere, forekommer det mærkeligt, at Vi har aldrig tacklet emnet før - så i dag tænkte jeg, jeg ville give et kort overblik over, hvad binær ... Læs mere). Den kan læses, slettes og genskrives elektronisk.

Heldigvis gør Arduino Sprog det nemt at ændre data, alle uden at behøve en grad i datalogi.

EEPROM Close Up

Forventede levealder

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

EEPROM Close Up

Når en placering er blevet skrevet og slettet for mange gange, kan den begynde at blive upålidelig. Det kan ikke returnere de korrekte data eller returnere værdien fra en nærliggende bit.

Det kan lyde som en masse skriver, men det er nemt at nå denne grænse, hvis man læser og skriver programmatisk (f.eks. I en loop ). Læsning af data forringer ikke silicium, kun skrivning gør . Du kan læse data fra EEPROM så meget som du kan lide uden frygt!

Det er vigtigt at bemærke, at denne grænse gælder for hver hukommelsesplacering. Din Arduino kan have 1.000 eller flere hukommelsespladser tilgængelige i EEPROM, så hvis du skriver for mange gange til et sted, er det kun den pågældende placering, der er påvirket, og ikke nogen af ​​de andre. Senere skal jeg diskutere slidniveauer, hvilket kan reducere EEPROM slid ved at distribuere data jævnt - noget, som SSD'er. Sådan vurderer du den resterende levetid i din SSD Sådan vurderer du den resterende levetid i din SSD Alle SSD'er har en begrænset levetid på grund af at skrive cykler (selvom denne levetid er meget længere, end du måske tror). Sådan kan du vurdere, hvor tæt du er til slutningen. Læs mere gør brug af.

Hvad er det nyttigt for?

EEPROM er utrolig nyttigt for dine Arduino projekter. Da det husker data, selvom strømmen er fjernet, kan du gemme tilstanden til Arduino. Måske kunne du opbygge en laser turret Pew Pew! Sådan bygger du en laserturret med en Arduino Pew Pew! Hvordan man opbygger en laserturret med en Arduino Er du keder dig? Kan lige så godt bygge et lasertårn. Læs mere, der husker sin position eller hvor meget "ammunition" er tilbage. Du kan bruge den til at styre dine apparater. Kontroller apparater fra en Arduino: Starten af ​​hjemmeautomatikstyringsapparater fra en Arduino: Starten af ​​hjemmeautomatisering Sidste gang viste jeg dig et par måder at gøre dine Arduino-projekter talestyrede via SiriProxy, OS Xs indbyggede talbare genstande, og nogle Automator-scripting eller endda en dedikeret hardwaregenkendelse af stemmegenkendelse. Jeg ... Læs mere, og log på, hvor mange gange dit apparat blev aktiveret.

EEPROM passer bedst til ting som indstillinger eller highscores. Hvis du regelmæssigt vil skrive komplekse data, kan du overveje et ethernet-skjold Giv dit Arduino-projekt sin egen mini-webserver med et Ethernet-skjold Giv dit Arduino-projekt sin egen Mini-Webserver med et Ethernet-skjold For en tid siden viste jeg dig hvordan at oprette et internetkontrolsystem til din Arduino - men det skulle forblive forbundet til en computer via USB for at opretholde internetforbindelsen .... Læs mere (med indbygget SD-slot) eller en Raspberry Pi Raspberry Pi: The Uofficiel selvstudie Hindbær Pi: ​​Den uofficielle vejledning Uanset om du er en nuværende Pi-ejer, der ønsker at lære mere eller en potentiel ejer af denne kreditkortstørrelsesenhed, er dette ikke en guide, du vil gå glip af. Læs mere .

EEPROM Close Up

Læs og skriv

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

#include 

Skriv nu nogle data:

 EEPROM.write(0, 12); 

Dette skriver nummer 12 til EEPROM placering 0 . Hver skrivning tager 3, 3 millisekunder ( ms, 1000ms = 1 sekund). Bemærk, hvordan du ikke kan skrive bogstaver ( char ), kun tallene fra nul til 255 er tilladt. Derfor er EEPROM ideel til indstillinger eller highscores, men ikke så godt til spillernes navne eller ord. Det er muligt at gemme tekst ved hjælp af denne metode (du kan kortlægge hvert bogstav i alfabetet til et tal), men du skal have flere hukommelsessteder - et sted for hvert brev.

Sådan læser du disse data:

 EEPROM.read(0); 

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

Der er nogle lidt mere nyttige metoder til rådighed. Sig, du ønskede at gemme en decimal eller en streng:

 EEPROM.put(2, "12.67"); 

Dette skriver dataene til flere steder - noget, der ville være nemt at skrive selv, men praktisk alligevel. Du skal stadig holde øje med, hvor mange steder det er skrevet til, så du ikke overskriver dine data ved et uheld. Du skal bruge get- metoden til at hente disse data igen:

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

Værdien fra get er gemt i float f- variablen. Bemærk, hvordan dette initialiseres med 0, 00f som værdien. F'en lader kompilatoren vide, at du måske vil gemme et stort nummer i denne variabel, så det opstiller nogle yderligere konfigurationer under kompilering.

EEPROM-dokumentationen på Arduino-webstedet indeholder mange flere eksempler.

Slidniveau

Brug nivellering er en teknik, der bruges til at reducere slid og øge EEPROMs levetid. Hvis du kun arbejder på et lille projekt, behøver du måske ikke at bekymre sig om dette.

EEPROM Close Up

Det enkleste, du kan gøre for at bevare EEPROM-livet, er at begrænse dine skrivninger til et bestemt sted. Du kan gøre dette ved først at læse adressen, og hvis den værdi, du vil skrive, allerede er til stede, er der ikke behov for at skrive det igen (husk at læsning af data ikke gør noget). Sådan gør du det:

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

Det er ganske enkelt en smule kode, men det virker kun for heltal! I stedet for at opfinde hjulet igen, brug funktionen indbygget i Arduino EEPROM-biblioteket:

 EEPROM.update(address, val); 

Denne metode har nøjagtig samme underskrift som skrivemetoden, selvom det kan reducere antallet af skrivninger drastisk.

Hvis du har brug for at skrive mange data, og er bekymret for at bære siliconen ud, kan du holde øje med, hvor mange skriver du gør, selvom det 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 deles på tværs af adresselokaler). Størstedelen af ​​tiden vil dette beskyttelsesniveau ikke være nødvendigt. Arduinos er også så billige, så du kan finde det lettere at købe en backup!

Du skal nu vide nok til at lave nogle fantastiske projekter. Lad os vide, hvis du laver noget cool! Kan du genkende alle enhederne i billederne? Forlad os en kommentar nedenfor!

In this article