Hur man använder Arduino EEPROM för att spara data mellan strömcykler

Hur man använder Arduino EEPROM för att spara data mellan strömcykler

Visste du att Arduino kan lagra data när den är avstängd? Inte skissen lagrad i flashminne. Jag pratar om variabel data i EEPROM. Följ med mig när jag visar dig hur du läser och skriver till den och vad den kan göra för dina projekt.





Om du är ny på Arduino, se till att kolla in vår nybörjarguide .





Vad är EEPROM?

EEPROM står för elektriskt raderbart programmerbart skrivskyddsminne . Det är en typ av icke-flyktigt minne. Oroa dig inte om du inte förstår vad det betyder. Det lagrar helt enkelt data även om strömmen är borttagen (till skillnad från Bagge , som behöver elektricitet för att behålla data).





EEPROM är inbyggt i en myriad av processorer, till exempel den fältprogrammerbara grindmatrisen (FPGA) som används i Matrix Creator Pi HAT. Alla Arduinos har EEPROM tillgängligt, men kapaciteten varierar per modell. Se till att ta en titt på vår köpguide för mer information om varje bräda.

Hur fungerar det?

EEPROM raderas och programmeras elektriskt med Fowler-Nordheim tunnel . Du behöver inte känna till de tekniska detaljerna för att kunna använda den. Den grundläggande förutsättningen är att elektricitet används för att ändra binära data (vad som är binärt). Den kan läsas, raderas och skrivas om elektroniskt.



Lyckligtvis är 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 det en begränsad livslängd. EEPROM är specificerat för att hantera 100 000 läs/radera cykler. Det betyder 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 närliggande bit.

Det 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 kislet, bara skrivandet 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 för varje minnesplats. Din Arduino kan ha 1000 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 ska jag diskutera slitageutjämning , vilket kan minska EEPROM -slitage genom att fördela data jämnt - något som SSD -enheter använder.

Vad är det användbart för?

EEPROM är otroligt användbart för dina Arduino -projekt. Eftersom den kommer ihåg data även när strömmen är borttagen kan du lagra tillståndet för Arduino. Kanske kan du bygga ett lasertorn som minns dess position eller hur mycket 'ammunition' som återstår. Du kan använda den för att styra dina apparater och logga hur många gånger din apparat har aktiverats.

EEPROM är bäst lämpad för saker som inställningar eller höga poäng. Om du regelbundet vill skriva komplexa data kan du överväga en ethernet-sköld (med inbyggd SD-kortplats) eller en Raspberry Pi.

Läsa och skriva

Nu när teorin är ur vägen, låt oss titta på hur man läser och skriver lite data! Inkludera först biblioteket (detta följer med Arduino IDE):

#include

Skriv nu lite data:

EEPROM.write(0, 12);

Detta skriver numret 12 till EEPROM -plats 0 . Varje skrivning tar 3,3 millisekunder ( Fröken , 1000 ms = 1 sekund). Lägg märke till hur du inte kan skriva bokstäver ( röding ), är endast siffrorna från noll till 255 tillåtna. Det är därför EEPROM är perfekt för inställningar eller höga poäng, men inte så bra för spelarnamn eller ord. Det är möjligt att lagra text med den här metoden (du kan mappa varje bokstav i alfabetet till ett tal), men du måste ha flera minnesplatser - en plats för varje bokstav.

Så här läser du den informationen:

aero glas tema för windows 10
EEPROM.read(0);

Noll är adressen du skrev till tidigare. Om du inte har skrivit till en adress tidigare returnerar det maximala värdet ( 255 ).

Det finns några lite mer användbara metoder. 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 kommer fortfarande att behöva hålla reda på hur många platser detta har skrivit till, så att du inte råkar skriva över dina data! Du måste använda skaffa sig metod för att hämta dessa data igen:

float 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,00 f som värdet. De f låter kompilatorn veta att du kanske vill lagra ett stort antal i denna variabel, så det ställer in några ytterligare konfigurationer under kompilering.

De EEPROM -dokumentationArduinos webbplats har många fler exempel.

Bärnivellering

Slitutjämning är en teknik som används för att minska slitage och öka livslängden för EEPROM. Om du bara arbetar med ett litet projekt behöver du inte oroa dig för detta.

Det enklaste du kan göra för att bevara EEPROM -liv är att begränsa dina skrivningar till en viss plats. Du kan göra detta genom att läsa adressen först, och om värdet du vill skriva redan finns finns det ingen anledning att skriva det 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(address, data);
}
}

Det är en ganska enkel kod, men den fungerar bara för heltal! Istället för att uppfinna hjulet igen, använd funktionen inbyggd i Arduino EEPROM-biblioteket:

EEPROM.update(address, val);

Denna metod har exakt samma signatur som skriva metod, även om det kan drastiskt minska antalet skrivningar som behövs!

Om du behöver skriva mycket data och är orolig för att slita ut kislet kan du hålla reda på hur många skriver du gör, även om det använder mer data. Här är en grov implementering i pseudokod :

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

Du måste lagra adress och writeCount i EEPROM (och writeCount måste delas upp över adressplatser). Majoriteten av tiden kommer denna skyddsnivå inte att vara nödvändig. Arduinos är också så billiga, så du kan ha lättare att köpa en backup!

Du borde nu veta tillräckligt för att göra några fantastiska projekt. Låt oss veta om du gör något coolt! Känner du igen alla enheter på bilderna? Lämna oss en kommentar nedan!

Dela med sig Dela med sig Tweet E-post 5 tips för att ladda dina VirtualBox Linux -maskiner

Trött på den dåliga prestanda som erbjuds av virtuella maskiner? Här är vad du bör göra för att öka din VirtualBox -prestanda.

Läs Nästa
Relaterade ämnen
  • DIY
  • Arduino
  • Elektronik
Om författaren Joe Coburn(136 artiklar publicerade)

Joe är utbildad 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 hittas ta foton eller producera videor.

Mer från Joe Coburn

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera