Annons
Visste du att Arduino kan lagra data när den är avstängd? Inte skissen lagrad i flashminnet. Jag talar om variabla data i EEPROM. Gå med mig när jag visar hur du läser och skriver till det och vad det kan göra för dina projekt.
Om du är ny på Arduino, se till att du kolla in vår nybörjarguide Komma igång med Arduino: En nybörjarguideArduino är en open-source elektronikprototypplattform baserad på flexibel, lättanvänd hårdvara och mjukvara. Den är avsedd för konstnärer, designers, hobbyister och alla som är intresserade av att skapa interaktiva objekt eller miljöer. Läs mer .
Vad är EEPROM?
EEPROM står för elektriskt raderbart programmerbart skrivminne. Det är en typ av icke-flyktigt minne. Oroa dig inte om du inte förstår vad något av det betyder. Det lagrar helt enkelt data även med strömmen bort (till skillnad från Bagge En snabb och smutsig guide till RAM: Vad du behöver vetaRAM är en avgörande komponent i varje dator, men det kan vara förvirrande. Vi delar upp det i lättfattliga termer du förstår. Läs mer , som behöver el för att behålla alla data).
EEPROM är inbyggd i ett myriad av processorer, till exempel det fältprogrammerbara gate-arrayet (FPGA) som används i Matrix Creator Matrix Creator för Raspberry Pi ReviewMatrix Creator är en schweizisk armékniv för din Pi, med 15 sensorer, en svit med kommunikationsprotokoll, en ring med RGB-lysdioder, en mikrofonuppsättning och mer! Läs mer Pi HAT. Alla Arduinos har EEPROM tillgängliga, men kapaciteten varierar per modell. Se till att du tittar på vår köpguide Arduino Buying Guide: Vilket styrelse ska du få?Det finns så många olika typer av Arduino-brädor där ute, du skulle bli förlåten för att du är förvirrad. Vilket ska du köpa för ditt projekt? Låt oss hjälpa till med denna Arduino-köpguide! Läs mer för mer information om varje styrelse.
Hur fungerar det?
EEPROM raderas och programmeras elektriskt med Fowler-Nordheim tunneling. Du behöver inte veta de tekniska detaljerna för att kunna använda dem. Grundförutsättningen är att el används för att ändra binära data (vad är binärt Vad är binärt? [Teknisk förklaring]Med tanke på att binär är så absolut grundläggande för att det finns datorer, verkar det konstigt att vi aldrig har behandlat ämnet förut - så idag trodde jag att jag skulle ge en kort överblick över vilken binär ... Läs mer ). Det kan läsas, raderas och skrivas om elektroniskt.
Lyckligtvis Arduino språk gör det enkelt att ändra data, allt utan att behöva en examen i datavetenskap.
Förväntad livslängd
Även om det är lätt att använda EEPROM i Arduino har den en begränsad livslängd. EEPROM specificeras för att hantera 100 000 läs / radera cykler. Detta innebär att du kan skriva och sedan radera / skriva om data 100 000 gånger innan EEPROM blir instabil. I verkligheten, Atmel (tillverkarna av Arduino “Chip”) halvledare kan hantera ett högre eller lägre antal cykler, beroende på toleranserna för varje processor.
När en plats har skrivits och raderats för många gånger kan den börja bli opålitlig. Det kanske inte returnerar rätt data eller returnerar värdet från en angränsande bit.
Detta kan låta som många skrivningar, men det kan vara lätt att nå denna gräns om du läser och skriver programmatiskt (i en slinga, till exempel). Att läsa data försämrar inte kiseln, bara skrivning gör. Du kan läsa data från EEPROM så mycket du vill utan rädsla!
Det är viktigt att notera att denna gräns gäller varje minnesplats. Din Arduino kan ha 1 000 eller fler minnesplatser tillgängliga i EEPROM, så om du skriver för många gånger till en plats är det bara den platsen som påverkas och inte någon av de andra. Senare kommer jag att diskutera slitstyrka, vilket kan minska slitaget av EEPROM genom att distribuera data jämnt - något som SSD Hur man uppskattar den återstående livslängden för din SSDAlla SSD: er har en begränsad livslängd på grund av skrivcykler (även om denna livslängd är mycket längre än du kanske tror). Så här kan du uppskatta hur nära du är till slutet. Läs mer använda.
Vad är det användbart för?
EEPROM är oerhört användbart för dina Arduino-projekt. Eftersom den kommer ihåg data även när strömmen tas bort, kan du lagra Arduino-tillståndet. Du kanske kan bygga en lasertorn Pew Pew! Hur man bygger en lasertorn med en ArduinoÄr du uttråkad? Kan också bygga en lasertorn. Läs mer som kommer ihåg sin position eller hur mycket "ammo" som återstår. Du kan använda den till kontrollera dina apparater Kontrollera apparater från en Arduino: Starten med hemmeautomationFörra gången visade jag dig några sätt att göra dina Arduino-projekt tal styrda via SiriProxy, OS X inbyggda talbara artiklar och vissa Automator-skript, eller till och med en särskild hårdvara för röstigenkänning chip. I ... Läs mer , och logga hur många gånger din apparat aktiverades.
EEPROM passar bäst för saker som inställningar eller hög poäng. Om du regelbundet vill skriva komplexa data kan du tänka på en Ethernet-sköld Ge ditt Arduino-projekt sin egen mini-webserver, med ett Ethernet-sköldFör ett tag sedan visade jag hur du konfigurerar ett internetkontrollsystem för din Arduino - men det var tvungen att hålla kontakten till en dator via USB för att behålla internetanslutningen ... Läs mer (med inbyggd SD-kortplats) eller a Raspberry Pi Raspberry Pi: Den inofficiella självstudienOavsett om du är en nuvarande Pi-ägare som vill lära dig mer eller en potentiell ägare av denna kreditkortsstorlek, är detta inte en guide du vill missa. Läs mer .
Läsa och skriva
Nu när teorin är ute, låt oss titta på hur man läser och skriver lite data! Inkludera först biblioteket (detta kommer med Arduino IDE):
#inkludera
Skriv nu lite data:
EEPROM. Skriv (0, 12);
Detta skriver numret 12 till EEPROM-platsen 0. Varje skrivning tar 3,3 millisekunder (Fröken1000 ms = 1 sekund). Lägg märke till hur du inte kan skriva brev (röding), är endast siffrorna från noll till 255 tillåtna. Det är därför EEPROM är idealisk för inställningar eller hög poäng, men inte så bra för spelarens namn eller ord. Det är möjligt att lagra text med den här metoden (du kan kartlägga varje bokstav i alfabetet till ett nummer), men du måste ha flera minnesplatser - en plats för varje bokstav.
Så här läser du informationen:
EEPROM.read (0);
Noll är adressen du skrev till tidigare. Om du inte har skrivit till en adress tidigare kommer det att returnera det maximala värdet (255).
Det finns några mer användbara metoder tillgängliga. Säg att du ville lagra en decimal eller sträng:
EEPROM.put (2, "12,67");
Detta skriver data till flera platser - något som skulle vara lätt att skriva själv, men ändå praktiskt. Du måste fortfarande hålla reda på hur många platser det här har skrivits till, så att du inte skriver över dina data av misstag! Du måste använda skaffa sig metod för att hämta dessa data igen:
flottör f = 0,00f; EEPROM.get (2, f);
Värdet från get lagras i flottören f variabel. Lägg märke till hur detta initieras med 0.00f som värdet. De f låter kompilatorn veta att du kanske vill lagra ett stort antal i denna variabel, så den ställer in några ytterligare konfigurationer under sammanställningen.
De EEPROM-dokumentation på Arduino webbplats har många fler exempel.
Bärnivå
Nivåutjämning är en teknik som används för att minska slitaget och öka livslängden på EEPROM. Om du bara arbetar på ett litet projekt kanske du inte behöver oroa dig för det här.
Det enklaste du kan göra för att bevara EEPROM-livet är att begränsa dina skrivningar till en viss plats. Du kan göra det genom att läsa adressen först, och om värdet du vill skriva redan finns finns det inget behov av att skriva den igen (kom ihåg att läsa data gör ingen skada). Så här skulle du göra det:
int safeWrite (int data, address) {if (EEPROM.read (address)! = data) {EEPROM.write (adress, data); } }
Det är en ganska enkel kod, men det fungerar bara för heltal! Istället för att återuppfinna hjulet, använd funktionen inbyggd i Arduino EEPROM-biblioteket:
EEPROM.update (adress, val);
Denna metod har exakt samma signatur som skriva metoden, även om det drastiskt kan minska antalet skrivningar som behövs!
Om du behöver skriva mycket data och är orolig för att bära ut kisel kan du hålla reda på hur många skrivningar du gör, även om det använder mer data. Här är en grov implementering i pseudokod:
var adress = 0. var writeCount = 0 if (writeCount> 75,000) writeCount = 0 address + = 1 EEPROM.write (adress, data)
Du måste lagra adress och skrivaCount i EEPROM (och writeCount måste delas mellan adressplatser). Merparten av tiden kommer denna skyddsnivå inte att vara nödvändig. Arduinos är också så billiga, så du kanske tycker det är lättare att köpa en säkerhetskopia!
Du bör nu veta nog för att göra några fantastiska projekt. Låt oss veta om du gör något coolt! Kan du känna igen alla enheter på bilderna? Lämna en kommentar nedan!
Joe är en examen i datavetenskap från University of Lincoln, Storbritannien. Han är en professionell mjukvaruutvecklare, och när han inte flyger drönare eller skriver musik kan han ofta hitta foton eller producera videor.