Advertentie
Wist je dat de Arduino gegevens kan opslaan wanneer deze is uitgeschakeld? Niet de schets die is opgeslagen in het flashgeheugen. Ik heb het over variabele gegevens in de EEPROM. Doe met me mee terwijl ik je laat zien hoe je ernaar kunt lezen en ernaar kunt schrijven en wat het voor je projecten kan doen.
Als je nieuw bent bij Arduino, kijk dan eens naar onze beginners gids Aan de slag met Arduino: een beginnershandleidingArduino is een open-source prototypeplatform voor elektronica, gebaseerd op flexibele, gebruiksvriendelijke hardware en software. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder .
Wat is EEPROM?
EEPROM staat voor elektrisch verwijderbaar programmeerbaar leesbaar geheugen. Het is een type niet-vluchtig geheugen. Maak je geen zorgen als je niet begrijpt wat dat allemaal betekent. Het slaat eenvoudig gegevens op, zelfs als de stroom is verwijderd (in tegenstelling tot
RAM Een snelle en vuile handleiding voor RAM: wat u moet wetenRAM is een cruciaal onderdeel van elke computer, maar het kan verwarrend zijn. We splitsen het op in gemakkelijk te begrijpen termen die u zult begrijpen. Lees verder , die elektriciteit nodig heeft om gegevens te bewaren).
EEPROM is ingebouwd in een groot aantal processors, zoals de field-programmable gate array (FPGA) die wordt gebruikt in de Matrix Creator Matrix Creator voor Raspberry Pi ReviewDe Matrix Creator is een Zwitsers zakmes voor je Pi, met 15 sensoren, een reeks communicatieprotocollen, een ring van RGB-leds, een microfoonarray en meer! Lees verder Pi HOED. Alle Arduino's hebben EEPROM beschikbaar, maar de capaciteit verschilt per model. Bekijk zeker eens onze koopgids Arduino Koopgids: welk bord moet je kopen?Er zijn zoveel verschillende soorten Arduino-kaarten dat het je vergeven zou worden als je in de war bent. Welke moet je kopen voor je project? Laat ons helpen met deze Arduino-koopgids! Lees verder voor meer informatie over elk bord.
Hoe werkt het?
EEPROM wordt elektrisch gewist en geprogrammeerd met Fowler-Nordheim-tunneling. U hoeft de technische details niet te kennen om er gebruik van te kunnen maken. Het uitgangspunt is dat elektriciteit wordt gebruikt om de binaire gegevens (wat is binair Wat is binair? [Technologie uitgelegd]Aangezien binair zo absoluut fundamenteel is voor het bestaan van computers, lijkt het vreemd dat we het onderwerp nog nooit eerder hebben aangepakt - dus vandaag dacht ik dat ik een kort overzicht zou geven van wat binair is ... Lees verder ). Het kan elektronisch worden gelezen, gewist en herschreven.
Gelukkig is de Arduino-taal maakt het gemakkelijk om gegevens te wijzigen, allemaal zonder dat je een diploma informatica nodig hebt.

Levensverwachting
Hoewel het gemakkelijk is om EEPROM in de Arduino te gebruiken, heeft het een beperkte levensduur. EEPROM is gespecificeerd om 100.000 lees- / wiscycli te verwerken. Dit betekent dat u gegevens 100.000 keer kunt schrijven en vervolgens kunt wissen / herschrijven voordat de EEPROM onstabiel wordt. In werkelijkheid, Atmel (de fabrikanten van de Arduino "Chip") halfgeleiders kunnen een hoger of lager aantal cycli aan, afhankelijk van de toleranties van elke processor.

Als een locatie te vaak is geschreven en gewist, kan deze onbetrouwbaar worden. Mogelijk worden niet de juiste gegevens geretourneerd of wordt de waarde van een naburig bit geretourneerd.
Dit klinkt misschien als veel schrijven, maar het kan gemakkelijk zijn om deze limiet te bereiken als programmatisch lezen en schrijven (in een lus, bijvoorbeeld). Het lezen van gegevens tast het silicium niet aan, alleen schrijven doet. U kunt de gegevens van EEPROM zoveel lezen als u wilt, zonder angst!
Het is belangrijk op te merken dat deze limiet van toepassing is op elke geheugenlocatie. Uw Arduino heeft mogelijk 1.000 of meer geheugenlocaties beschikbaar in EEPROM, dus als u te vaak naar één locatie schrijft, heeft dit alleen gevolgen voor die locatie en niet voor de andere. Later zal ik bespreken draag nivellering, wat de EEPROM-slijtage kan verminderen door gegevens gelijkmatig te verdelen - iets dat SSD's Hoe u de resterende levensduur van uw SSD kunt schattenAlle SSD's hebben een beperkte levensduur door schrijfcycli (al is deze levensduur veel langer dan je zou denken). Hier ziet u hoe u kunt inschatten hoe dicht u bij het einde bent. Lees verder gebruikmaken van.
Waar is het nuttig voor?
EEPROM is ongelooflijk handig voor uw Arduino-projecten. Omdat het gegevens onthoudt, zelfs als de stroom is verwijderd, kunt u de staat van de Arduino opslaan. Misschien kun je een lasertoren Pew Pew! Hoe een lasertorentje te bouwen met een ArduinoVerveel je je? Kan net zo goed een lasertoren bouwen. Lees verder die zijn positie onthoudt of hoeveel "munitie" er nog over is. Je zou het kunnen gebruiken uw apparaten bedienen Bedien apparaten vanaf een Arduino: het begin van domoticaDe vorige keer liet ik je een paar manieren zien om je Arduino-projecten spraakgestuurd te maken via SiriProxy, OS X's ingebouwde spraakbare items en sommige Automator-scripts, of zelfs een speciale hardware voor spraakherkenning chip. IK... Lees verder en registreer hoe vaak uw apparaat is geactiveerd.
EEPROM is het meest geschikt voor zaken als instellingen of hoge scores. Als u regelmatig complexe gegevens wilt schrijven, overweeg dan een ethernet schild Geef uw Arduino-project zijn eigen mini-webserver, met een Ethernet ShieldEen tijdje geleden liet ik je zien hoe je een internetcontrolesysteem voor je Arduino instelt, maar het moest via USB verbonden blijven met een computer om de internetverbinding te behouden ... Lees verder (met ingebouwde SD-sleuf) of een Raspberry Pi Raspberry Pi: The Unofficial TutorialOf je nu een huidige Pi-eigenaar bent die meer wil leren of een potentiële eigenaar van dit apparaat op creditcardformaat, dit is geen gids die je wilt missen. Lees verder .

Lezen en schrijven
Nu de theorie uit de weg is, gaan we kijken hoe we wat gegevens kunnen lezen en schrijven! Voeg eerst de bibliotheek toe (deze wordt geleverd met de Arduino IDE):
#include
Schrijf nu wat gegevens:
EEPROM.write (0, 12);
Dit schrijft het nummer 12 naar EEPROM-locatie 0. Elke schrijfactie duurt 3,3 milliseconden (Mevrouw1000 ms = 1 seconde). Merk op hoe je geen brieven kunt schrijven (char), alleen de getallen van nul tot 255 zijn toegestaan. Daarom is EEPROM ideaal voor instellingen of hoge scores, maar niet zo goed voor spelersnamen of woorden. Het is mogelijk om tekst op te slaan met deze methode (u zou elke letter van het alfabet aan een nummer kunnen toewijzen), maar u moet meerdere geheugenlocaties hebben - één locatie voor elke letter.
Hier leest u hoe u die gegevens leest:
EEPROM.read (0);
Nul is het adres waar u eerder naar schreef. Als u nog niet eerder naar een adres hebt geschreven, wordt de maximale waarde geretourneerd (255).
Er zijn enkele iets nuttiger methoden beschikbaar. Stel dat u een decimaal of tekenreeks wilt opslaan:
EEPROM.put (2, "12.67");
Hiermee worden de gegevens naar meerdere locaties geschreven - iets dat gemakkelijk zelf te schrijven is, maar toch handig. U moet nog steeds bijhouden naar hoeveel locaties dit is geschreven, dus u overschrijft uw gegevens niet per ongeluk! Je moet de gebruiken krijgen methode om deze gegevens opnieuw op te halen:
zweven f = 0,00f; EEPROM.get (2, f);
De waarde van get wordt opgeslagen in de float f variabel. Merk op hoe dit wordt geïnitialiseerd 0.00f als waarde. De f laat de compiler weten dat je misschien een groot aantal in deze variabele wilt opslaan, dus het stelt enkele aanvullende configuraties in tijdens het compileren.
De EEPROM-documentatie op de Arduino-website heeft nog veel meer voorbeelden.
Draag nivellering
Slijtage-nivellering is een techniek die wordt gebruikt om de slijtage te verminderen en de levensduur van EEPROM te verlengen. Als u alleen aan een klein project werkt, hoeft u zich daar geen zorgen over te maken.

Het eenvoudigste dat u kunt doen om de levensduur van de EEPROM te behouden, is door uw schrijfbewerkingen te beperken tot een bepaalde locatie. U kunt dit doen door eerst het adres te lezen en als de waarde die u wilt schrijven al aanwezig is, hoeft u deze niet opnieuw te schrijven (onthoud dat het lezen van gegevens geen kwaad kan). Hier is hoe je dat zou doen:
int safeWrite (int data, adres) {if (EEPROM.read (adres)! = data) {EEPROM.write (adres, data); } }
Dat is een vrij eenvoudig stukje code, maar het werkt alleen voor gehele getallen! In plaats van het wiel opnieuw uit te vinden, gebruikt u de functie die is ingebouwd in de Arduino EEPROM-bibliotheek:
EEPROM.update (adres, val);
Deze methode heeft exact dezelfde handtekening als de schrijven methode, hoewel dit het aantal benodigde schrijfbewerkingen drastisch kan verminderen!
Als u veel gegevens moet schrijven en u zich zorgen maakt over het verslijten van het silicium, kunt u bijhouden hoeveel schrijfbewerkingen u doet, hoewel dit meer gegevens gebruikt. Hier is een ruwe implementatie in pseudocode:
var adres = 0. var writeCount = 0 if (writeCount> 75.000) writeCount = 0 adres + = 1 EEPROM.write (adres, gegevens)
U moet adres en writeCount opslaan in EEPROM (en writeCount moet worden verdeeld over adreslocaties). Meestal is dit beschermingsniveau niet nodig. Arduino's zijn ook zo goedkoop, dus het kan gemakkelijker zijn om een back-up te kopen!
Je zou nu genoeg moeten weten om een aantal geweldige projecten te maken. Laat het ons weten als je iets gaafs maakt! Herken je alle apparaten op de foto's? Laat hieronder een reactie achter!
Joe is afgestudeerd in computerwetenschappen aan de universiteit van Lincoln, VK. Hij is een professionele softwareontwikkelaar en als hij niet met drones vliegt of muziek schrijft, kan hij vaak foto's of video's maken.