Ako používať Arduino EEPROM na ukladanie údajov medzi výkonovými cyklami

Ako používať Arduino EEPROM na ukladanie údajov medzi výkonovými cyklami

Vedeli ste, že Arduino môže ukladať údaje, keď je vypnuté? Nie náčrt uložený vo flash pamäti. Hovorím o variabilných údajoch v EEPROM. Pripojte sa ku mne a ukážem vám, ako ho čítať a písať a čo môže urobiť pre vaše projekty.





Ak ste v Arduine nováčik, vyskúšajte náš sprievodca pre začiatočníkov .





Čo je to EEPROM?

EEPROM znamená elektricky vymazateľná programovateľná pamäť iba na čítanie . Je to typ energeticky nezávislej pamäte. Ak nerozumiete, čo to znamená, nie je dôvod sa znepokojovať. Jednoducho ukladá údaje aj vtedy, keď je odpojené napájanie (na rozdiel od RAM , ktorá na uchovanie akýchkoľvek údajov potrebuje elektrickú energiu).





EEPROM je zabudovaná do nespočetného množstva procesorov, ako je napríklad pole programovateľné brány (FPGA) používané v programe Matrix Creator Pi HAT. Všetky Arduino majú k dispozícii EEPROM, ale kapacita sa líši podľa modelu. Nezabudnite sa pozrieť na nášho nákupného sprievodcu, kde nájdete ďalšie podrobnosti o každej doske.

Ako to funguje?

EEPROM je elektricky vymazaná a naprogramovaná pomocou Tunelovanie Fowler-Nordheim . Na to, aby ste ho mohli používať, nepotrebujete poznať technické detaily. Základným predpokladom je, že na zmenu binárnych údajov (čo je binárne) sa používa elektrina. Je možné ho čítať, vymazávať a prepisovať elektronicky.



Našťastie Jazyk Arduino uľahčuje zmenu údajov, a to všetko bez toho, aby ste potrebovali titul z počítačovej vedy.

Dĺžka života

Aj keď je ľahké používať EEPROM v Arduine, má obmedzenú životnosť. EEPROM je špecifikovaná na spracovanie 100 000 cyklov čítania/vymazania. To znamená, že môžete zapísať a potom vymazať/znova zapisovať údaje 100 000 krát, kým sa stane EEPROM nestabilná. V realite, Atmel (Výrobcovia polovodičov Arduino „Chip“) môžu zvládnuť vyšší alebo nižší počet cyklov v závislosti od tolerancií každého procesora.





Akonáhle je miesto mnohokrát zapísané a vymazané, môže začať byť nespoľahlivé. Nesmie vrátiť správne údaje alebo vrátiť hodnotu zo susedného bitu.

Môže to znieť ako veľa zápisov, ale dosiahnuť tento limit môže byť ľahké, ak budete programovo čítať a písať (v slučka , napríklad). Čítanie údajov nedegraduje kremík, robí iba písanie . Bez obáv môžete čítať údaje z EEPROM, koľko chcete!





Je dôležité si uvedomiť, že tento limit platí pre každé miesto v pamäti. Vaše Arduino môže mať v EEPROM k dispozícii 1 000 alebo viac pamäťových miest, takže ak píšete príliš často na jedno miesto, ovplyvní to iba toto miesto, nie žiadne iné. Neskôr budem diskutovať vyrovnanie opotrebenia , ktoré môže znížiť opotrebovanie EEPROM rovnomernou distribúciou dát - niečo, čo SSD disky využívajú.

Na čo je to užitočné?

EEPROM je neuveriteľne užitočná pre vaše projekty Arduino. Pretože si pamätá údaje, aj keď je odpojené napájanie, môžete si uložiť stav Arduina. Možno by ste mohli postaviť laserovú vežu, ktorá by si pamätala svoju polohu alebo koľko munície zostáva. Môžete ho použiť na ovládanie svojich spotrebičov a zaznamenávanie, koľkokrát bol váš spotrebič aktivovaný.

EEPROM je najvhodnejšia na veci, ako sú nastavenia alebo vysoké skóre. Ak chcete pravidelne písať komplexné údaje, zvážte ethernetový štít (so vstavaným slotom SD) alebo Raspberry Pi.

Čítaj a píš

Teraz, keď je teória mimo cesty, pozrime sa na to, ako čítať a zapisovať niektoré údaje! Najprv zahrňte knižnicu (dodáva sa s IDE Arduino):

#include

Teraz napíšte niekoľko údajov:

EEPROM.write(0, 12);

Toto napíše číslo 12 na miesto EEPROM 0 . Každý zápis trvá 3,3 milisekundy ( pani , 1000 ms = 1 sekunda). Všimnite si, ako nemôžete písať listy ( char ), povolené sú iba čísla od nuly do 255. Preto je EEPROM ideálna pre nastavenia alebo vysoké skóre, ale nie je taká dobrá pre mená alebo slová hráčov. Touto metódou je možné ukladať text (každé písmeno abecedy môžete namapovať na číslo), budete však musieť mať viac pamäťových miest - jedno miesto pre každé písmeno.

Údaje čítate takto:

najlacnejšie internetové obchody v usa
EEPROM.read(0);

Nula je adresa, na ktorú ste predtým písali. Ak ste predtým nepísali na adresu, vráti maximálnu hodnotu ( 255 ).

Existuje niekoľko o niečo užitočnejších metód. Povedzme, že chcete uložiť desatinné miesto alebo reťazec:

EEPROM.put(2,'12.67');

To zapisuje údaje na viacero miest - niečo, čo by ste sami ľahko napísali, ale napriek tomu to bolo praktické. Stále budete musieť sledovať, do koľkých miest sa to zapísalo, aby ste omylom neprepísali svoje údaje! Musíte použiť dostať metóda na opätovné načítanie týchto údajov:

float f = 0.00f;
EEPROM.get(2, f);

Hodnota z get je uložená do plaváka f premenná. Všimnite si, ako je to inicializované pomocou 0,00 f ako hodnotu. The f umožňuje kompilátoru vedieť, že do tejto premennej budete chcieť uložiť veľké množstvo, takže počas kompilácie nastaví niekoľko ďalších konfigurácií.

The Dokumentácia EEPROM na Webová stránka Arduino má oveľa viac príkladov.

Noste vyrovnávanie

Vyrovnávanie opotrebovania je technika používaná na zníženie opotrebenia a predĺženie životnosti EEPROM. Ak pracujete iba na malom projekte, nemusíte si s tým robiť starosti.

Najjednoduchšia vec, ktorú môžete urobiť, aby ste zachovali životnosť EEPROM, je obmedziť zápis na konkrétne miesto. Môžete to urobiť tak, že najskôr prečítate adresu a ak je hodnota, ktorú chcete napísať, už k dispozícii, nie je potrebné ju písať znova (pamätajte, že čítanie údajov neškodí). Postupujete takto:

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

Je to celkom jednoduchý kód, ale funguje iba pre celé čísla! Namiesto opätovného vynájdenia kolesa použite funkciu zabudovanú v knižnici EEPROM Arduino:

EEPROM.update(address, val);

Táto metóda má úplne rovnaký podpis ako písať metóda, aj keď môže drasticky znížiť počet potrebných zápisov!

Ak potrebujete zapísať veľa údajov a obávate sa opotrebovania kremíka, môžete sledovať, koľko zápisov urobíte, aj keď sa na to používa viac údajov. Tu je hrubá implementácia v pseudokód :

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

Budete musieť uložiť adresu a writeCount do EEPROM (a writeCount bude potrebné rozdeliť medzi adresy). Väčšinu času nebude táto úroveň ochrany potrebná. Arduino je tiež lacné, takže nákup zálohy bude pre vás jednoduchšie!

Teraz by ste mali vedieť dosť na to, aby ste mohli robiť úžasné projekty. Dajte nám vedieť, ak vyrobíte niečo skvelé! Rozpoznáte všetky zariadenia na obrázkoch? Zanechajte nám komentár nižšie!

zdieľam zdieľam Tweet E -mail 5 tipov, ako nabiť svoje počítače VirtualBox Linux

Ste unavení z nízkeho výkonu, ktorý ponúkajú virtuálne počítače? Tu je to, čo by ste mali urobiť, aby ste zvýšili výkon svojho VirtualBoxu.

Čítajte ďalej
Súvisiace témy
  • DIY
  • Arduino
  • Elektronika
O autorovi Joe Coburn(136 publikovaných článkov)

Joe je absolventom počítačových vied na University of Lincoln, UK. Je profesionálnym softvérovým vývojárom a keď nelieta s dronmi alebo nepíše hudbu, často ho zastihne fotografovanie alebo vytváranie videí.

Viac od Joe Coburn

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber
Kategórie Diy