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 begynderguideArduino er en open source-elektronikprototypeplatform baseret på fleksibel, letanvendelig hardware og software. Det er beregnet til kunstnere, designere, hobbyister og enhver, der er interesseret 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 noget af det betyder. Det gemmer simpelthen data, selv med strømmen fjernet (i modsætning til vædder En hurtig og beskidt guide til RAM: Hvad du skal videRAM er en vigtig komponent på enhver computer, men det kan være forvirrende. Vi fordeler det på let at forstå, du forstår. Læs mere

, som har brug for elektricitet for at bevare eventuelle data).

EEPROM-eksempel skudt

EEPROM er indbygget i et utal af processorer, såsom den feltprogrammerbare gate array (FPGA), der bruges i Matrix Creator Matrix Creator for Raspberry Pi ReviewMatrix Creator er en schweizisk hærkniv til din Pi med 15 sensorer, en pakke med kommunikationsprotokoller, en ring af RGB-LED'er, en mikrofonopstilling og mere! Læs 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ø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! Læs mere 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 der er binært Hvad er binær? [Teknologi forklaret]I betragtning af at binære er så absolut grundlæggende for eksistensen af ​​computere, synes det underligt, at vi aldrig har behandlet emnet før - så i dag havde jeg troet, jeg ville give et kort overblik over, hvad binært ... Læs mere ). Det kan læses, slettes og omskrives elektronisk.

Heldigvis Arduino sprog gør det nemt at ændre data, alt uden at have brug for en grad i datalogi.

EEPROM Nærbillede

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”) halvlederne håndterer muligvis et højere eller lavere antal cykler afhængigt af tolerancerne for hver enkelt processor.

EEPROM Nærbillede

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 loop, 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 der SSD'er Sådan estimerer du den resterende levetid på din SSDAlle SSD'er har en begrænset levetid på grund af skrivecyklusser (skønt denne levetid er meget længere end du måske tror). Her er, hvordan du kan estimere, hvor tæt du er til slutningen. Læs mere gøre brug af.

Hvad er det nyttigt til?

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 ArduinoKeder du dig? Kan også bygge en lasertårn. Læs mere der husker sin position eller hvor meget ”ammo” der er tilbage. Du kan bruge det til styr dine apparater Styr apparater fra en Arduino: Starten med automatisering af hjemmetSidste gang viste jeg dig et par måder at gøre dine Arduino-projekter tale kontrolleret via SiriProxy, OS X's indbyggede talbare genstande og nogle Automator-scripting eller endda en dedikeret stemmegenkendelseshardware chip. JEG... Læs mere , og log, hvor mange gange dit apparat blev aktiveret.

EEPROM er bedst egnet til ting som indstillinger eller høj score. Hvis du regelmæssigt vil skrive komplekse data, kan du overveje en Ethernet-skjold Giv dit Arduino-projekt sit eget mini-webserver med et Ethernet-skjoldFor et stykke tid siden viste jeg dig, hvordan du opsætter et internetkontrolsystem til din Arduino - men det måtte forblive tilsluttet en computer via USB for at opretholde internetforbindelsen ... Læs mere (med indbygget SD-slot) eller a Hindbær Pi Raspberry Pi: Den uofficielle tutorialUanset om du er en nuværende Pi-ejer, der vil 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 mere .

EEPROM Nærbillede

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 (Frk1000 ms = 1 sekund). Bemærk, hvordan du ikke kan skrive breve (char), er det kun tal fra nul til 255, der er tilladt. Derfor er EEPROM 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 konfigurerer nogle ekstra konfigurationer under kompilering.

Det EEPROM-dokumentation på den Arduino websted 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 bekymre dig om dette.

EEPROM Nærbillede

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 der ikke behov for 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 pseudokode:

var adresse = 0. var writeCount = 0 if (writeCount> 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å adresseadresser). 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!

Joe er uddannet inden for datalogi fra University of Lincoln, UK. Han er en professionel softwareudvikler, og når han ikke flyver droner eller skriver musik, kan han ofte finde billeder og producerer videoer.