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

  • Peter Holmes
  • 0
  • 944
  • 72
Reklame

Vidste du, at Arduino kan gemme data, når de er slukket? Ikke den skitse, der er gemt i flashhukommelsen. Jeg taler om variable data i EEPROM. Deltag i mig, 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 med Arduino, skal du tjekke vores begynderguide Kom godt i gang med Arduino: En begynderguide Kom godt i gang med Arduino: En begynderguide Arduino er en open source-elektronik-prototypeplatform baseret på fleksibel, brugervenlig hardware og software. Det er beregnet til kunstnere, designere, hobbyister og enhver der er interesseret i at skabe interaktive objekter eller miljøer. .

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, selv med strømmen fjernet (i modsætning til RAM En hurtig og beskidt guide til RAM: Hvad du har brug for at vide En hurtig og beskidt guide til RAM: Hvad du har brug for at vide RAM er en vigtig komponent på enhver computer, men det kan være forvirrende. Vi fordeler det i let at forstå begreber, du forstår., som har brug for elektricitet for at bevare alle data).

EEPROM er indbygget i et utal af processorer, såsom det feltprogrammerbare gate array (FPGA), der bruges i Matrix Creator Matrix Creator til Raspberry Pi Review Matrix Creator for Raspberry Pi Review Matrix Creator er en schweizisk hærkniv til din Pi, med 15 sensorer, en pakke med kommunikationsprotokoller, en ring af RGB-LED'er, en mikrofonarray og mere! Pi HAT. Alle Arduinos har EEPROM til rådighed, men kapaciteten varierer efter model. Sørg for at tage et kig på vores købsguide Arduino Købsguide: Hvilket bord skal du få? Arduino Købsvejledning: Hvilket bord skal du få? Der er så mange forskellige slags Arduino-tavler derude, du vil blive tilgitt for at blive forvirret. Hvilket skal du købe til dit projekt? Lad os hjælpe med denne Arduino-købsguide! for flere detaljer om hvert bord.

Hvordan virker det?

EEPROM slettes og programmeres 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 er binært Hvad er binært? [Teknologi forklaret] Hvad er binært? [Teknologi forklaret] I betragtning af at binære er så absolut grundlæggende for computerenes eksistens, synes det underligt at vi har aldrig behandlet emnet før - så i dag troede jeg, at jeg ville give et kort overblik over, hvad binært ...). Det kan læses, slettes og omskrives elektronisk.

Heldigvis gør Arduino Language det nemt at ændre data, alt uden at have brug for en grad 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. Dette betyder, at du kan skrive og derefter slette / omskrive data 100.000 gange, før EEPROM 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 eneste 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 en masse skriver, men det kan være let at nå denne grænse, hvis du læser og skriver programmatisk (i en løkke, for eksempel). Læsning af data forringer ikke silicium, kun skrivning gør. Du kan læse data fra EEPROM så meget du vil uden frygt!

Det er vigtigt at bemærke, at denne grænse gælder for hvert hukommelsessted. Din Arduino har muligvis 1.000 eller flere hukommelsesplaceringer tilgængelige i EEPROM, så hvis du skriver for mange gange til et sted, er det kun den placering, der er påvirket og ikke nogen af ​​de andre. Senere vil jeg diskutere slidudjævning, hvilket kan reducere EEPROM-slid ved at distribuere data jævnt - noget, som SSD'er Sådan estimerer du den resterende levetid på din SSD Sådan estimerer du den resterende levetid på din SSD Alle SSD'er har en begrænset levetid på grund af skrivecyklusser (skønt denne levetid er meget længere end dig tænker måske). Her er, hvordan du kan estimere, hvor tæt du er til slutningen. gøre brug af.

Hvad er det nyttigt for?

EEPROM er utroligt nyttigt til dine Arduino-projekter. Da den husker data, selv når strømmen fjernes, kan du gemme staten Arduino. Måske kunne du bygge en lasertårn Pew Pew! Sådan bygger du en lasertårn med en Arduino Pew Pew! Sådan bygger du en lasertårn med en Arduino Keder du dig? Kan også bygge en lasertårn. der husker sin position eller hvor meget “ammunition” er tilbage. Du kan bruge det til at styre dine apparater Kontrolapparater fra en Arduino: Starten med hjemmeautomatisering Kontrolapparater fra en Arduino: Starten med hjemmeautomatisering Sidste gang viste jeg dig et par måder at gøre dine Arduino-projekter tale kontrolleret via SiriProxy, OS Xs indbyggede talbare genstande og nogle Automator-scripting eller endda en dedikeret stemmegenkendelseshardware-chip. Jeg…, og logg, 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 Giv dit Arduino-projekt sit eget mini-webserver, med et Ethernet-skjold Giv dit Arduino-projekt sit eget mini-webserver, med et Ethernet-skjold For et stykke tid siden, viste jeg dig hvordan at opsætte et internetkontrolsystem til din Arduino - men det måtte forblive tilsluttet en computer via USB for at opretholde internetforbindelsen ... (med indbygget SD-slot) eller en Raspberry Pi Raspberry Pi: Den uofficielle tutorial Raspberry Pi: Den uofficielle tutorial Uanset om du er en nuværende Pi-ejer, der ønsker at lære mere eller en potentiel ejer af denne enhed med kreditkortstørrelse, er dette ikke en guide, du vil gå glip af. .

Læs og skriv

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

#omfatte 

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). Bemærk, hvordan du ikke kan skrive breve (char) er det kun tilladt med numrene fra nul til 255. Dette er grunden til at EEPROM er ideel til indstillinger eller høj score, men ikke så god til spillernavne 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 bliver nødt til at have flere hukommelsesplaceringer - en placering for hvert bogstav.

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 den maksimale værdi (255).

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

EEPROM.put (2, "12,67");

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

float f = 0,00f; EEPROM.get (2, f);

Værdien fra get gemmes i float f variabel. Bemærk, 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å den opsætter nogle ekstra konfigurationer under kompilering.

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

Brug 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, behøver du muligvis ikke at bekymre dig om dette.

Den enkleste ting, du kan gøre for at bevare EEPROM-livet, er at begrænse dine skrivere 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 det ikke nødvendigt at skrive den igen (husk, at læsning af data skader ikke). Sådan gør du:

int safeWrite (int data, adresse) if (EEPROM.read (adresse)! = data) EEPROM.write (adresse, data); 

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

EEPROM.update (adresse, val);

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

Hvis du har brug for at skrive en masse data og er bekymret for at udslette silicium, kan du holde styr på, hvor mange skriver du gør, selvom dette bruger flere data. Her er en grov implementering i pseudocode:

var adresse = 0 var skriveCount = 0 if (skrivCount> 75.000) writeCount = 0 address + = 1 EEPROM.write (adresse, data)

Du bliver nødt til at gemme adresse og skriveCount i EEPROM (og writeCount skal opdeles på adressen placeringer). Størstedelen af ​​tiden er dette beskyttelsesniveau ikke nødvendigt. Arduinos er også så billige, så du kan finde det lettere at købe en sikkerhedskopi!

Du skal nu vide nok til at lave nogle fantastiske projekter. Fortæl os, hvis du laver noget cool! Kan du genkende alle enhederne på billederne? Efterlad en kommentar nedenfor!




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.