Annonse
Visste du at Arduino kan lagre data når de er slått av? Ikke skissen som er lagret i flashminnet. Jeg snakker om variable data i EEPROM. Bli med meg når jeg viser deg hvordan du kan lese og skrive til det, og hva det kan gjøre for prosjektene dine.
Hvis du er ny på Arduino, må du sjekke ut vår nybegynnerguide Komme i gang med Arduino: En nybegynnerguideArduino er en åpen kildekode-prototypeplattform for elektronikk basert på fleksibel, brukervennlig maskinvare og programvare. Den er beregnet på kunstnere, designere, hobbyister og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer .
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 noe av det betyr. Det lagrer ganske enkelt data selv med strømmen fjernet (i motsetning til RAM En rask og skitten guide til RAM: Hva du trenger å viteRAM er en avgjørende komponent i hver datamaskin, men det kan være forvirrende. Vi deler det ned i lettfattelige termer du vil forstå. Les mer
, 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 Matrix Creator for Raspberry Pi ReviewMatrix Creator er en sveitsisk hærkniv for din Pi, med 15 sensorer, en serie kommunikasjonsprotokoller, en ring med RGB-LED-er, en mikrofonserie og mer! Les mer Pi HAT. Alle Arduinos har EEPROM tilgjengelig, men kapasiteten varierer per modell. Sørg for at du tar en titt på vår kjøpsguide Arduino kjøpeguide: Hvilket brett bør du få?Det er så mange forskjellige typer Arduino-brett der ute, du vil bli tilgitt for å bli forvirret. Hvilket bør du kjøpe for prosjektet ditt? La oss hjelpe med denne Arduino-kjøpsguiden! Les mer for mer informasjon om hvert brett.
Hvordan virker det?
EEPROM blir slettet og programmert elektrisk ved hjelp av Fowler-Nordheim tunneling. Du trenger ikke å vite de tekniske detaljene for å kunne bruke dem. Den grunnleggende forutsetningen er at strøm brukes til å endre de binære dataene (hva er binært Hva er binær? [Teknologi forklart]Gitt at binær er så absolutt grunnleggende for datamaskinens eksistens, virker det rart at vi aldri har taklet temaet før - så i dag hadde jeg trodd at jeg ville gi en kort oversikt over hva binær ... Les mer ). Det kan leses, slettes og skrives på nytt elektronisk.
Heldigvis Arduino språk gjør det enkelt å endre data, alt uten å trenge en grad i informatikk.
Forventet levealder
Selv om det er enkelt å bruke EEPROM i Arduino, har den 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 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 enkelt prosessor.
Når et sted har blitt skrevet og slettet for mange ganger, kan det begynne å bli upålitelig. Det kan ikke hende at de returnerer de riktige dataene, eller returnerer verdien fra en nabobit.
Dette kan høres ut som mange skriver, men det kan være lett å nå denne grensen hvis du leser og skriver programmatisk (i en Løkke, for eksempel). Lesing av data forringer ikke silisiumet, 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 minneplass. Arduino-enheten din har kanskje 1000 eller flere minneplasseringer tilgjengelige i EEPROM, så hvis du skriver for mange ganger til ett sted, er det bare det stedet påvirket, og ikke noen av de andre. Senere skal jeg diskutere utjevning av slitasje, som kan redusere slitasje av EEPROM ved å distribuere data jevnt - noe som SSD Slik estimerer du den gjenværende levetiden til SSD-en dinAlle SSD-er har en begrenset levetid på grunn av skrivesykluser (selv om denne levetiden er mye lengre enn du kanskje tror). Slik kan du estimere hvor nær du er mot slutten. Les mer benytte seg av.
Hva er det nyttig for?
EEPROM er utrolig nyttig for Arduino-prosjektene dine. Ettersom den husker data selv når strømmen er fjernet, kan du lagre staten Arduino. Kanskje du kan bygge en lasertårn Pew Pew! Slik bygger du en lasertårn med en ArduinoKjeder du deg? Kan også lage en lasertårn. Les mer som husker posisjonen eller hvor mye “ammo” som er igjen. Du kan bruke den til kontroller apparater Kontroller apparater fra en Arduino: Starten med automatisering av hjemmetForrige gang viste jeg deg noen få måter å gjøre dine Arduino-prosjekter tale kontrollert via SiriProxy, OS X-er innebygde snakbare elementer, og noen Automator-skripting, eller til og med en dedikert stemmegjenkjenningsmaskinvare chip. JEG... Les mer , og logg hvor mange ganger apparatet ditt ble aktivert.
EEPROM er best egnet for ting som innstillinger eller høy score. Hvis du regelmessig vil skrive komplekse data, kan du vurdere å gjøre det Ethernet-skjold Gi ditt Arduino-prosjekt sin egen mini-webserver, med et Ethernet-skjoldFor en stund siden viste jeg deg hvordan du konfigurerer et internettkontrollsystem for Arduino - men det måtte holde kontakten til en datamaskin via USB for å opprettholde internettforbindelsen ... Les mer (med innebygd SD-spor) eller a Bringebær Pi Raspberry Pi: Den uoffisielle opplæringenEnten du er en nåværende Pi-eier som vil lære mer eller potensiell eier av denne enheten med kredittkortstørrelse, er dette ikke en guide du vil gå glipp av. Les mer .
Lese og skrive
Nå som teorien er ute, la oss se på hvordan vi kan lese og skrive noen data! Først inkluderer biblioteket (dette følger med Arduino IDE):
#inkludere
Skriv nå noen data:
EEPROM.write (0, 12);
Dette skriver nummeret 12 til EEPROM plassering 0. Hver skriving tar 3,3 millisekunder (ms, 1000 ms = 1 sekund). Legg merke til hvordan du ikke kan skrive brev (røye), er det bare tall fra null til 255 som er 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 kartlegge hver bokstav i alfabetet til et tall), men du må ha flere minneposisjoner - ett sted for hver bokstav.
Slik leser du dataene:
EEPROM.read (0);
Null er adressen du skrev til tidligere. Hvis du ikke har skrevet til en adresse før, vil den returnere maksimalverdien (255).
Det er noen litt mer nyttige metoder tilgjengelig. Si at du ville lagre en desimal eller streng:
EEPROM.put (2, "12.67");
Dette skriver dataene til flere lokasjoner - noe som ville være enkelt å skrive selv, men praktisk likevel. Du må fortsatt følge med på hvor mange steder dette har skrevet til, slik at du ikke overskriver dataene dine ved et uhell! Du må bruke få metode for å hente disse dataene igjen:
flyte f = 0,00 f; EEPROM.get (2, f);
Verdien fra get lagres i flottøren f variabel. Legg merke til hvordan dette initialiseres med 0.00f som verdien. De f lar kompilatoren vite at du kanskje vil lagre et stort antall i denne variabelen, slik at den setter opp noen ekstra konfigurasjoner under kompilering.
De EEPROM dokumentasjon på Arduino nettsted har mange flere eksempler.
Bruk nivellering
Slitasjeutjevning er en teknikk som brukes for å redusere slitasje og øke levetiden til EEPROM. Hvis du bare jobber med et lite prosjekt, trenger du kanskje ikke å bekymre deg for dette.
Det enkleste du kan gjøre for å bevare EEPROM-livet er å begrense skrivene dine til et bestemt sted. Du kan gjøre dette ved å lese adressen først, og hvis verdien du vil skrive allerede er til stede, er det ikke nødvendig å skrive den igjen (husk at lesing av data ikke skader). Slik gjør du det:
int safeWrite (int data, address) {if (EEPROM.read (address)! = data) {EEPROM.write (address, data); } }
Det er ganske enkel kode, men det fungerer bare for heltall! I stedet for å finne opp hjulet på nytt, bruk funksjonen innebygd i Arduino EEPROM-biblioteket:
EEPROM.update (adresse, val);
Denne metoden har nøyaktig samme signatur som skrive metoden, selv om det kan redusere antall skrivere som trengs drastisk!
Hvis du trenger å skrive mye data, og er opptatt av å slite ut silisiumet, kan du følge med på hvor mange skriver du gjør, selv om dette bruker mer data. Her er en grov implementering i pseudo:
var adresse = 0. var writeCount = 0 if (writeCount> 75,000) writeCount = 0 address + = 1 EEPROM.write (address, data)
Du må lagre adresse og skriveCount i EEPROM (og writeCount må deles på adresseadresser). Det meste av tiden, dette beskyttelsesnivået vil ikke være nødvendig. Arduinos er så billige i tillegg, så du kan synes det er lettere å kjøpe en sikkerhetskopi!
Du bør 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!
Joe er utdannet innen informatikk fra University of Lincoln, Storbritannia. Han er en profesjonell programvareutvikler, og når han ikke flyr droner eller skriver musikk, kan han ofte finne bilder og produsere videoer.