Slik bruker du Arduino EEPROM for å lagre data mellom effektsykluser

Slik bruker du Arduino EEPROM for å lagre data mellom effektsykluser / DIY

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

Hvis du er ny hos Arduino, må du sjekke ut vår nybegynnerveiledning Komme i gang med Arduino: En nybegynnersveiledning Komme i gang med Arduino: En nybegynnersguide Arduino er en åpen prototypeplan for åpen kildekode basert på fleksibel, brukervennlig maskinvare og programvare. Det er ment for 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 sletbart 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 bare data selv med strømmen fjernet (i motsetning til RAM En rask og skitten guide til RAM: Hva du trenger å vite En rask og skitten guide til RAM: Hva du trenger å vite RAM er en avgjørende komponent i hver datamaskin, men det kan være forvirrende for å forstå om du ikke er en teknisk guru. I dette innlegget bryter vi det ned i enkle forhold. Les mer, som trenger strøm for å beholde data).

EEPROM er bygd inn i en myriade av prosessorer, som den feltprogrammerbare gate-arrayen (FPGA) som brukes i Matrix Creator Matrix Creator for Raspberry Pi Review Matrix Creator for Raspberry Pi Review Matrix Creator er en sveitsisk Army Knife for Pi, med 15 sensorer, en serie kommunikasjonsprotokoller, en ring av RGB LED, en mikrofon array og mer! Les mer Pi HAT. Alle Arduinos har EEPROM tilgjengelig, men kapasiteten varierer per modell. Pass på at du tar en titt på vår kjøpeguide Arduino Kjøpsguide: Hvilket styre bør du få? Arduino Kjøpsguide: Hvilket styre bør du få? Det er så mange forskjellige typer Arduino boards der ute, du vil bli tilgitt for å være forvirret. Hvilken bør du kjøpe for prosjektet ditt? La oss hjelpe, med denne Arduino kjøpesiden! Les mer for mer informasjon om hvert brett.

Hvordan virker det?

EEPROM er elektrisk slettet og programmert med Fowler-Nordheim tunneling. Du trenger ikke å vite de tekniske detaljene for å kunne bruke den. Den grunnleggende forutsetningen er at elektrisitet brukes til å endre binære data (hva er binært Hva er binært? [Teknologi forklart] Hva er binært? [Teknologi forklart] Gitt at binær er så helt grunnleggende for eksistensen av datamaskiner, virker det merkelig at Vi har aldri taklet emnet før - så i dag trodde jeg at jeg ville gi en kort oversikt over hva binær ... Les mer). Den kan leses, slettes og skrives på nytt elektronisk.

Heldigvis gjør Arduino Language det enkelt å endre data, alt uten å ha en grad i datavitenskap.

Forventet levealder

Mens det er lett å bruke EEPROM i Arduino, har det et begrenset liv. EEPROM er spesifisert for å håndtere 100.000 lese / slette sykluser. Dette betyr at du kan skrive og deretter slette / skrive om data 100 000 ganger før EEPROM blir ustabil. I virkeligheten er 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. Det kan ikke returnere de riktige dataene, eller returnere verdien fra en nærliggende bit.

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 sløyfe, for eksempel). Lesing av data forringer ikke silisiumet, bare skriving gjør. Du kan lese data fra EEPROM så mye du vil uten frykt!

Det er viktig å merke seg at denne grensen gjelder for hvert minnested. Din 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 slitasje, som kan redusere EEPROM slitasje ved å distribuere data jevnt - noe som SSDs Hvordan Estimere gjenværende levetid på SSD Slik vurderer gjenværende levetid på SSD-en din SSD har en begrenset levetid på grunn av skrive sykluser (selv om denne levetiden er mye lenger enn deg kan tro). Slik kan du anslå hvor nært du er til slutten. Les mer gjør bruk av.

Hva er det nyttig for?

EEPROM er utrolig nyttig for dine Arduino-prosjekter. Da det husker data selv når strømmen er fjernet, kan du lagre tilstanden til Arduino. Kanskje du kan bygge en laser turret Pew Pew! Hvordan bygge en laserturret med en Arduino Pew Pew! Hvordan bygge en laserturret med en arduino kjeder du deg? Kan også bygge et lasertårn. Les mer som husker sin posisjon eller hvor mye “ammo” er igjen. Du kan bruke den til å styre apparatene dine. Kontroll Apparater fra en Arduino: Starten av hjemmeautomatiseringsapparater fra en Arduino: Starten av hjemmeautomatisering Sist gang viste jeg deg noen måter å lage dine Arduino-prosjekter på talestyrt via SiriProxy, OS Xs innebygde talbare elementer, og noen Automator-skripting, eller til og med en dedikert maskinvarechip for talegjenkjenning. Jeg ... Les mer, og logg inn hvor mange ganger apparatet ble aktivert.

EEPROM passer best for ting som innstillinger eller highscores. Hvis du vil skrive komplekse data regelmessig, kan du kanskje vurdere et Ethernet-skjold. Gi Arduino-prosjektet sin egen Mini-Webserver, med et Ethernet-skjold. Gi Arduino-prosjektet sin egen Mini-Webserver, med et Ethernet-skjold For en stund siden viste jeg deg hvordan å sette opp et Internett-kontrollsystem for din Arduino - men det måtte forbli tilkoblet en datamaskin via USB for å opprettholde Internett-tilkoblingen ... Les mer (med innebygd SD-kort) eller en Raspberry Pi Raspberry Pi: Den uoffisielle Tutorial Raspberry Pi: Den uoffisielle opplæringen Om du er en nåværende Pi-eier som ønsker å lære mer eller en potensiell eier av denne kredittkortstørrelsesenheten, er dette ikke en guide du vil savne. Les mer .

Lese og skrive

Nå som teorien er ute, la oss se på hvordan du leser og skriver 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 skrive tar 3,3 millisekunder (ms, 1000ms = 1 sekund). Legg merke til hvordan du ikke kan skrive bokstaver (røye), bare tallene fra null til 255 er tillatt. Dette er grunnen til at EEPROM er ideell for innstillinger eller høy score, men ikke så bra for spillers navn eller ord. Det er mulig å lagre tekst ved hjelp av denne metoden (du kan kartlegge hvert bokstav i alfabetet til et tall), men du må ha flere minnesteder - ett sted for hvert brev.

Slik leser du disse dataene:

EEPROM.read (0);

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

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

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

Dette skriver dataene til flere steder - noe som ville være enkelt å 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 er lagret 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, så det setter opp noen flere konfigurasjoner under kompilering.

EEPROM-dokumentasjonen på Arduino-nettstedet har mange flere eksempler.

Bruk nivellering

Bruk nivellering er en teknikk som brukes til å 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 skriveren 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 det igjen (husk, lesing av data gjør ingen skade). Slik gjør du det:

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

Det er ganske enkelt litt kode, men det fungerer bare for heltall! I stedet for å oppfinne hjulet igjen, bruk funksjonen som er innebygd i Arduino EEPROM-biblioteket:

EEPROM.update (adresse, val);

Denne metoden har nøyaktig samme signatur som skrive metode, selv om det kan drastisk redusere antall skrivinger som trengs!

Hvis du trenger å skrive mye data, og er bekymret for å ha på seg silikonet, kan du holde oversikt over hvor mange skriver du gjør, selv om dette bruker flere data. Her er en grov implementering i pseudokode:

var adresse = 0 var writeCount = 0 hvis (writeCount> 75,000) writeCount = 0 adresse + = 1 EEPROM.write (adresse, data)

Du må lagre adressen og writeCount i EEPROM (og writeCount må deles over adresselokalene). Mesteparten av tiden vil dette beskyttelsesnivået ikke være nødvendig. Arduinos er så billige også, så du kan finne det lettere å kjøpe en sikkerhetskopi!

Du burde nå vite nok til å lage noen fantastiske prosjekter. Gi oss beskjed hvis du gjør noe kul! Kan du gjenkjenne alle enhetene i bildene? Gi oss en kommentar nedenfor!

Utforsk mer om: Arduino, Elektronikk.