Čo je pamäťový čip a ako programovať mikroobvody. Ako vymazať EEPROM (nezávislá pamäť) Pomocou pamäte eeprom
Minule, keď som písal moju “podrobnú odpoveď na otázku” ako zálohovať firmware z Mega, mi vyčítali, že som nespomenul zálohu EEPROM. Vtedy som to neurobil vedome, pretože... Správne som usúdil, že vo fáze počiatočného „priblíženia sa k projektilu“ nie je potrebné všetko komplikovať. Faktom je, že nie každému je zrejmé, že EEPROM nie je flashovaná pri kompilácii a nahrávaní firmvéru z Arduino IDE. To znamená, že pri nahrávaní firmvéru z IDE sa do EEPROM nenahráva absolútne nič. A manipulácie s EEPROM (ak je jej použitie vo firmvéri vôbec povolené) sa vykonávajú na úplne inej úrovni. A preto zálohovať holý firmvér bez jemné úpravy, ktorý sa MOŽNO (iba snáď) dá uložiť do EEPROM, úplne stačilo uložiť len holý firmware. Ale keďže vyvstala otázka, prečo to „nežuť“. Poďme si to prejsť po poriadku. Čo je EEPROM a prečo o tom hovoriť?
EEPROM - (Electrically Erasable Programmable Read-Only Memory) oblasť stálej pamäte mikrokontroléra, do ktorej je možné zapisovať a čítať informácie. Často sa používa na uloženie nastavení programu, ktoré sa môžu počas prevádzky zmeniť a musia sa uložiť po vypnutí napájania.
Ako 3D tlačiareň využíva EEPROM?
Pozrime sa na Marlin ako príklad.V Marlin Firmware po vybalení sa EEPROM nepoužíva.Parametre konfigurátora (Configuration.h), ktoré zahŕňajú možnosť jeho použitia, sú štandardne zakomentované.
#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT
Ak je povolené používanie EEPROM, tlačiareň môže ukladať a používať nasledujúce nastavenia (špecifikované od buržoázie):
- Počet krokov na milimeter
- Maximálna/minimálna rýchlosť posuvu [mm/s]
- Maximálne zrýchlenie [mm/s^2]
- Zrýchlenie
- Zrýchlenie počas zaťahovania
- Nastavenia PID
- Posun domácej pozície
- Minimálna rýchlosť posuvu počas pohybu [mm/s]
- Minimálny čas sekcie [ms]
- Skok maximálnej rýchlosti osi X-Y[mm/s]
- Maximálna rýchlosť skoku v osi Z [mm/s]
- Uložiť pamäť
- Načítať pamäť
- Obnoviť Failsafe
- M500 Uloží aktuálne nastavenia do EEPROM až do ďalšieho spustenia alebo príkazu M501.
- M501 Číta nastavenia z EEPROM.
- M502 Resetuje nastavenia na predvolené hodnoty špecifikované v Configurations.h. Ak po ňom spustíte M500, do EEPROM sa vložia predvolené hodnoty.
- M503 Zobrazuje aktuálne nastavenia - ""Tie uložené v EEPROM.""
Ako čítať a zapisovať dáta do EEPROM?
Podobne ako pri metóde opísanej v metóde zálohovania firmvéru pomocou kľúča -U. Iba v tomto prípade sa za ním zobrazí ukazovateľ, ktorý naznačuje, že je potrebné prečítať EEPROM.
Tento príkaz načíta dáta EEPROM do súboru "printer_eeprom.eep" Ak bude úspešný, na obrazovke uvidíte niečo ako nasledovné.avrdude.exe -p atmega2560 -c kabeláž -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i
Nahrávanie tiež nie je zložité a vykonáva sa podobným príkazom, ktorý sa líši len tým v klávese -U Nie je to "r", ale "w".
Ak bude úspešný, na obrazovke uvidíte niečo ako nasledujúcu správu.avrdude.exe -p atmega2560 -c kabeláž -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i
Na začiatok: "Prečo to robíte?" Musíte vymazať EEPROM, ak ju používal aj predchádzajúci firmvér a v pamäti môže zostať odpad. Niekde som už narazil na ľudí s problémami, že po prechode z jedného firmvéru na druhý (z Marlina na Repitier EMNIP) sa ich tlačiareň začala správať takpovediac „kreatívne“. Je to spôsobené tým, že rôzne firmvéry ukladajú svoje údaje pod rôzne adresy. A keď sa pokúsite prečítať údaje z nesprávnej adresy, začne pandemonium.
EEPROM môžete vymazať iba programovo z firmvéru, ale na to budete musieť dočasne nahrať špeciálny náčrt do ovládača. Viac si o tom môžete prečítať v oficiálnej dokumentácii Arduina.
Ak je EEPROM vymazaná, nie je Arduino doska a v niektorých abstraktných ovládačoch bude potrebné zmeniť kód náčrtu s ohľadom na veľkosť EEPROM v konkrétnom ovládači na doske. Ak to chcete urobiť, budete musieť zmeniť podmienku ukončenia v slučke "Pre". Napríklad pre ATmega328, ktorý má 1kb EEPROM pamäť, bude cyklus vyzerať takto:
Záver.
Rozprával som sa už dosť dlho, ale načo to všetko je? Aby sme dospeli k záveru, že pri zálohovaní firmvéru je možné uložiť aj EEPROM, ale iba ak potrebujete nastavenia v nej uložené. Ak ste pripravení ich obetovať, zabudnite na to. Tiež, ak zmeníte jeden firmvér na iný alebo prejdete z verzie na inú, nebuďte leniví a pred nahraním vymažte EEPROM nový firmvér. No zároveň sme sa naučili veľa nových vecí.
Náš ovládač pece je takmer pripravený - zatiaľ však zostáva ovládačom „zlatej rybky“, ktorý si pamätá všetky nastavenia iba päť minút pred prvým vypnutím. Pre zapamätanie si našich nastavení, hodnoty nastavenej teploty a kalibračných bodov aj po vypnutí napájania je potrebné použiť energeticky nezávislú pamäť - EEPROM.
Naši priatelia písali veľmi dobre o práci s EEPROM.
Hlavná vec, ktorú musíme vedieť, je to Pamäť EEPROM Je lepšie to považovať nie za „len pamäť“, ale za samostatné interné zariadenie v čipe.
EEPROM oddelený adresný priestor, ktorý nemá nič spoločné s adresným priestorom procesora (FLASH a SRAM); ak chcete získať prístup k údajom na konkrétnej adrese v energeticky nezávislej pamäti, musíte vykonať určitú postupnosť akcie pomocou množstva registrov (adresové registre EEARH a EEARL, dátový register EEDR a riadiaci register EECR).
Podľa údajového listu, aby ste zapísali bajt na konkrétnu adresu do EEPROM, musíte urobiť nasledovné:
- počkajte, kým bude EEPROM pripravená na zapisovanie dát (bit EEPE registra EECR je vynulovaný);
- počkajte na ukončenie zápisu do pamäte FLASH (resetovanie bitu SELFPRGEN registra SPMCSR) - treba to urobiť, ak je v programe prítomný bootloader;
- zapísať Nová adresa do registra EEAR (ak je to potrebné);
- zapísať dátový bajt do registra EEDR (ak je to potrebné);
- nastavte bit EEMPE registra EECR na jednu;
- do štyroch hodinových cyklov po nastavení príznaku EEMPE zapíšeme do bitu EEPE registra EECR logickú jednotku.
Procesor potom preskočí 2 hodinové cykly pred vykonaním ďalšej inštrukcie.
Druhý bod je potrebné vykonať, ak je v programe bootloader - faktom je, že zápis do EEPROM nemožno vykonávať súčasne so zápisom do pamäte FLASH, takže pred zápisom do EEPROM sa musíte uistiť, že programovanie pamäte FLASH je dokončené; ak mikrokontrolér nemá bootloader, potom nikdy nezmení obsah pamäte FLASH (nezabudnite, že avr má architektúru Harvard: pamäť programu (FLASH) a pamäť údajov (SRAM) sú oddelené).
Trvanie nahrávacieho cyklu závisí od frekvencie vnútorného RC oscilátora čipu, napájacieho napätia a teploty; zvyčajne pre modely ATmega48x/88x/168x je to 3,4 ms (!), pre niektoré staršie modely – 8,5 ms (!!!).
Okrem toho pri zápise do EEPROM môžu nastať problémy s volaním prerušení pri vykonávaní vyššie uvedenej sekvencie akcií – preto je lepšie prerušenia pri zápise do EEPROM zakázať.
Čítanie energeticky nezávislej pamäte je o niečo jednoduchšie:
- počkajte, kým bude EEPROM pripravená na čítanie údajov (bit EEWE registra EECR je resetovaný);
- napíšte adresu do registra EEAR;
- nastavte bit EERE registra EECR na jednu;
- čítame údaje z registra EEDR (v skutočnosti sa to stane, keď sa požadované údaje presunú do registra údajov tvrdý reštart bit EERE; ale nie je potrebné sledovať stav tohto bitu, keďže operácia čítania z EEPROM sa vykonáva vždy v jednom hodinovom cykle).
Po nastavení bitu v EERE na jeden procesor preskočí 4 takty pred vykonaním ďalšej inštrukcie.
Ako vidíme, práca s energeticky nezávislá pamäť– proces je časovo náročný; ak často zapisujeme a čítame dáta z EEPROM, program sa môže začať spomaľovať.
Píšeme však program v prostredí IAR a máme šťastie: všetku prácu s čítaním a zápisom z EEPROM vykoná vývojové prostredie - iar má modifikátor „__eeprom“, ktorý vytvára premenné v energeticky nezávislej pamäti - a potom už len budeme musieť čítať z "konštantných" premenných na "aktuálne" (pri inicializácii regulátora), alebo zapisovať z "aktuálnych" premenných do "konštantných" - to znamená, že keď sa zmení aktuálna hodnota, hodnota premenná v energeticky nezávislej pamäti sa musí tiež zmeniť.
Nové premenné budú vyzerať takto:
Eeprom uint16_t EEP_MinTemperature;
Ešte pár všeobecných slov: a hoci nepredpokladáme ukazovatele na premenné eeprom, musíme si uvedomiť, že eeprom je samostatný adresný priestor, a aby sme vytvorili ukazovateľ na eeprom (a kompilátor nám to umožňuje), musíme uveďte, že toto je ukazovateľ na adresu v eeprom:
Uint16_t __eeprom *EEP_MinTemperatureAdr;
Vráťme sa k ovládaču kachlí a EEPROM. V našom prípade neexistuje žiadna EEPROM virtuálny prístroj, samozrejme, sa neočakáva; Okrem toho stojí za zváženie, či je na prácu s energeticky nezávislou pamäťou potrebná samostatná knižnica - sú príliš „roztrúsené“ v nahrávacom programe dôležité nastavenia; ak sa pokúsite vytvoriť samostatnú knižnicu, budete musieť urobiť krížové odkazy: v knižnici pre EEPROM pripojte knižnice ADC, vykurovacieho telesa a globálnych nastavení; a v týchto periférnych knižniciach pripojenie knižnice EEPROM nie je veľmi dobrý prístup.
Ďalšou možnosťou je pridať premennú eeprom do každej knižnice, kde potrebujete uložiť nastavenia, a uložiť príslušné nastavenia priamo do virtuálne stroje. Túto možnosť implementujeme.
Najprv si vypíšme, aké premenné musíme uložiť do EEPROM:
- kalibračné body
- hodnoty maximálnej a minimálnej nastavenej teploty a kroku nastavenia teploty
- nastavenú hodnotu teploty
- Koeficienty PID regulátora
Hodnotu kuchynského časovača neukladáme - budeme predpokladať, že používateľ musí nastaviť časovač sporáka vždy po vypnutí napájania.
Všetky tieto nastavenia nastavuje užívateľ otočením enkodéra a následným krátkym stlačením užívateľského tlačidla. Zároveň nezabúdame, že počet cyklov čítania a zápisu EEPROM je stále obmedzený, takže neprepisujte tie isté informácie znova (napríklad ak používateľ zvolil rovnakú hodnotu niektorého nastavenia, ako bola). Preto pred každou zmenou premennej __eeprom skontrolujeme, či ju netreba prepísať:
//ak sa hodnota zmenila, prepíšte ju v energeticky nezávislej pamäti, ak (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) (ADCTemperature.atMinTemperatureValue = (uint16_t)EPCTere.TemperatureCounter.at. MinTemperatureV hodnota; )
Čítanie nastavení z EEPROM je tiež jednoduché - pri inicializácii „aktuálnych“ nastavení jednoducho načítame hodnotu z energeticky nezávislej pamäte:
ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;
Aby naše zariadenie malo hneď od začiatku nejaké nastavenia v EEPROM, projekt pre prvé spustenie možno skompilovať s inicializovanými týmito premennými:
Eeprom uint16_t EEP_MinTemperature = 20; ... //pole na uloženie kalibračných bodov do energeticky nezávislej pamäte __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));
V tomto prípade kompilátor pred začatím práce s hlavnou funkciou inicializuje premenné __eeprom. Ak chcete získať súbor s energeticky nezávislou pamäťou (.eep), musíte prejsť do nasledujúcich nastavení:
Project->Options..->Linker->Extra Options
Ak nie je začiarknuté políčko „Použiť možnosti príkazového riadka“, začiarknite ho a pridajte riadok
-Ointel-standard,(XDATA)=.eep
Najprv skompilujeme projekt s inicializovanými premennými, samostatne uložíme súbor eep; potom pri vytváraní premenných odstránime inicializáciu.
To je všetko - náš sporák je pripravený!
Arduino je celá rodina rôzne zariadenia na vytváranie elektronických projektov. Mikrokontroléry sú veľmi pohodlné na používanie a ľahko sa ich naučí aj začiatočník. Každý mikrokontrolér sa skladá z dosky, programov na obsluhu a pamäte. Tento článok sa bude zaoberať energeticky nezávislou pamäťou používanou v Arduine.
Popis pamäte EEPROM
Arduino poskytuje svojim používateľom tri typy vstavanej pamäte zariadenia: stacionárnu RAM (pamäť s náhodným prístupom alebo SRAM - statická pamäť s náhodným prístupom) - nevyhnutná na zaznamenávanie a ukladanie údajov počas používania; flash karty – na ukladanie už zaznamenaných vzorov; – na uchovávanie a následné použitie údajov.
Všetky údaje v pamäti RAM sa vymažú, akonáhle sa zariadenie reštartuje alebo sa vypne napájanie. Druhé dva ukladajú všetky informácie pred prepísaním a umožňujú vám ich v prípade potreby získať. Flash disky sú v dnešnej dobe celkom bežné. Pamäť EEPROM stojí za zváženie podrobnejšie.
Skratka znamená Electrically Erasable Programmable Read-Only Memory a v preklade do ruštiny doslova znamená elektricky vymazateľná programovateľná pamäť len na čítanie. Výrobca garantuje bezpečnosť informácií niekoľko desaťročí po poslednom výpadku prúdu (zvyčajne sa udáva doba 20 rokov, v závislosti od rýchlosti, akou klesá nabitie zariadenia).
Musíte však vedieť, že možnosť prepisovania na zariadenie je obmedzená a nie je viac ako 100 000-krát. Preto sa odporúča byť opatrný a pozorný na zadávané údaje a znova ich neprepísať.
Množstvo pamäte je v porovnaní s modernými médiami veľmi malé a pre rôzne mikrokontroléry sa líši. Napríklad pre:
- ATmega328 – 1kB
- ATmega168 a ATmega8 – 512 bajtov,
- a ATmega1280 – 4 kB.
Je navrhnutý týmto spôsobom, pretože každý mikrokontrolér je navrhnutý pre špecifický objem úloh, má iný počet kolíkov na pripojenie, a preto je potrebné iné množstvo pamäte. Navyše táto suma postačuje na bežne vytvárané projekty.
Zápis do EEPROM vyžaduje značné množstvo času – cca. 3 ms. Ak počas nahrávania vypnete napájanie, údaje sa vôbec neuložia alebo sa môžu zaznamenať nesprávne. Vždy je potrebné dodatočne skontrolovať zadané informácie, aby nedošlo k poruchám počas prevádzky. Čítanie údajov je oveľa rýchlejšie a pamäťový zdroj sa nezníži.
Knižnica
Práca s pamäťou EEPROM sa vykonáva pomocou knižnice, ktorá bola špeciálne vytvorená pre Arduino. Medzi hlavné patrí schopnosť zapisovať a čítať dáta. aktivovaný príkazom #include EEPROM.h.
- Pre záznamy– EEPROM.write(adresa, údaje);
- Pre čítanie– EEPROM.read(adresa).
V týchto náčrtoch: adresa – argument s údajmi bunky, do ktorej sa zadávajú údaje druhého argumentu; pri čítaní sa používa jeden argument, adresa, ktorý udáva, odkiaľ sa má informácia čítať.
Funkcia | Účel |
---|---|
prečítať (adresa) | číta 1 bajt z EEPROM; adresa – adresa, z ktorej sa čítajú dáta (bunka začínajúca od 0); |
napísať (adresa, hodnota) | zapíše hodnotu (1 bajt, číslo od 0 do 255) do pamäte na adrese; |
aktualizovať (adresa, hodnota) | nahradí hodnotu na adrese, ak sa jej starý obsah líši od nového; |
získať (adresa, údaje) | načítava údaje zadaného typu z pamäte na adrese; |
vložiť (adresa, údaje) | zapisuje údaje zadaného typu do pamäte na adrese; |
EEPROM | umožňuje použiť identifikátor "EEPROM" ako pole na zapisovanie údajov a čítanie z pamäte. |
Zápis celých čísel
Zápis celých čísel do energeticky nezávislej pamäte EEPROM je celkom jednoduchý. Čísla sa zadávajú pri spustení funkcie EEPROM.write(). Požadované údaje sú uvedené v zátvorkách. V tomto prípade sa čísla od 0 do 255 a čísla nad 255 píšu odlišne. Prvé sa zadávajú jednoducho - ich objem zaberá 1 bajt, teda jednu bunku. Ak chcete zapísať posledný bajt, musíte použiť operátory highByte() pre najvyšší bajt a lowByte() pre najnižší bajt.
Číslo je rozdelené na bajty a zapísané samostatne do buniek. Napríklad číslo 789 bude napísané v dvoch bunkách: prvá bude obsahovať faktor 3 a druhá bude obsahovať chýbajúcu hodnotu. Výsledkom je požadovaná hodnota:
3 * 256 + 21 = 789
Pre « reunion“ platí veľké celé číslo funkcia slova(): int val = slovo (ahoj, nízke). Musíte si prečítať, že maximálne celé číslo pre záznam je 65536 (to znamená 2 na 16). V bunkách, ktoré ešte nemali iné položky, monitor zobrazí čísla 255 v každej z nich.
Zápis čísel a reťazcov s pohyblivou rádovou čiarkou
Čísla s pohyblivou rádovou čiarkou a reťazcové čísla sú formou zápisu reálnych čísel, kde sú reprezentované mantisou a exponentom. Takéto čísla sa zapisujú do energeticky nezávislej pamäte EEPROM aktiváciou funkcie EEPROM.put(), respektíve čítanie, – EEPROM.get().
Pri programovaní sú číselné hodnoty s pohyblivou rádovou čiarkou označené ako float, treba poznamenať, že nejde o príkaz, ale o číslo. Typ znaku (typ znaku) – používa sa na reprezentáciu reťazcov. Proces zápisu čísel na monitor sa spustí pomocou setup(), čítanie - pomocou loop().
Počas procesu sa na obrazovke monitora môžu objaviť hodnoty ovf, čo znamená „preplnené“ a nan, čo znamená „chýbajúce“. číselná hodnota" To znamená, že informácie zapísané do bunky nemožno reprodukovať ako číslo s pohyblivou rádovou čiarkou. Táto situácia nenastane, ak spoľahlivo viete, v ktorej bunke je zaznamenaný typ informácie.
Príklady projektov a náčrtov
Príklad č.1
Skica zapíše až 16 znakov zo sériového portu a vypíše 16 znakov z EEPROM v slučke. Vďaka tomu sa dáta zapisujú do EEPROM a monitoruje sa obsah energeticky nezávislej pamäte.
// kontrola fungovania EEPROM #include
Príklad č.2
Pre lepšie pochopenie môžeme vytvoriť malý náčrt, ktorý pomôže pochopiť, ako pracovať s energeticky nezávislou pamäťou. Počítame všetky bunky tejto pamäte. Ak bunka nie je prázdna - výstup na sériový port. Potom vyplňte bunky medzerami. Potom zadáme text cez monitor sériového portu. Zapíšeme ho do EEPROM a prečítame ho pri ďalšom zapnutí.
#include
Príklad č.3
Zapíše dve celé čísla do pamäte, načíta ich z EEPROM a odošle ich na sériový port. Čísla od 0 do 255 zaberajú pomocou funkcie 1 bajt pamäte EEPROM.write() sa zapíšu do požadovanej bunky. Pre čísla väčšie ako 255 je potrebné ich rozdeliť na bajty pomocou highByte() A lowByte() a zapíšte každý bajt do vlastnej bunky. Maximálny počet je v tomto prípade 65536 (alebo 2 16).
#include
Príklad č.4
Zápis čísel a reťazcov s pohyblivou rádovou čiarkou - metóda EEPROM.put(). Čítanie - EEPROM.get().
#include
Príklad č.5
Použitie EEPROM ako poľa.
#include
Práca s EEPROM
Ako už bolo spomenuté, pamäť EEPROM je obmedzená. Ak chcete predĺžiť životnosť energeticky nezávislej pamäte, namiesto funkcie write() je lepšie použiť funkciu aktualizácie. V tomto prípade sa prepísanie vykoná len pre tie bunky, ktorých hodnota sa líši od novo zapísanej.
Ďalšou užitočnou funkciou predmetnej pamäte mikrokontroléra je schopnosť používať bajtové úložné bunky ako súčasti integrálneho poľa EEPROM. Pri akomkoľvek formáte použitia je potrebné neustále monitorovať integritu zaznamenávaných údajov.
Takáto pamäť na Arduine štandardne ukladá to najdôležitejšie pre chod ovládača a zariadenia. Napríklad, ak je regulátor teploty vytvorený na takomto základe a počiatočné údaje sa ukážu ako chybné, zariadenie bude fungovať „neadekvátne“ existujúcim podmienkam - výrazne podhodnotí alebo nadhodnotí teplotu.
Existuje niekoľko situácií, kedy EEPROM obsahuje nesprávne údaje:
- Pri počiatočnej aktivácii ešte neboli žiadne záznamy.
- Počas nekontrolovaného výpadku prúdu sa niektoré alebo všetky údaje nezaznamenajú alebo sa zaznamenajú nesprávne.
- Po dokončení možných cyklov prepisovania údajov.
Aby sa predišlo nepríjemným následkom, zariadenie môže byť naprogramované na niekoľko možností akcie: použiť údaje núdzového kódu, úplne vypnúť systém, signalizovať poruchu, použiť predtým vytvorenú kópiu alebo iné.
Na kontrolu integrity informácií sa používa systémový riadiaci kód. Vytvára sa na základe pôvodného záznamu údajov a po overení údaje prepočíta. Ak je výsledok iný, ide o chybu. Najbežnejšou verziou takejto kontroly je kontrolný súčet – vykoná sa jednoduchá matematická operácia na sčítanie všetkých hodnôt buniek.
Skúsení programátori pridávajú k tomuto kódu ďalšie „exkluzívne OR“, ako napríklad E5h. Ak sa všetky hodnoty rovnajú nule a systém omylom vynuluje pôvodné údaje, tento trik odhalí chybu.
Toto sú základné princípy práce s energeticky nezávislou pamäťou EEPROM pre mikrokontroléry Arduino. Pre určité projekty sa oplatí používať iba tento typ pamäte. Má to svoje výhody aj nevýhody. Na zvládnutie metód písania a čítania je lepšie začať s jednoduchými úlohami.
Všetky mikrokontroléry z rodiny Mega obsahujú energeticky nezávislú pamäť ( EEPROM Pamäť). Objem tejto pamäte sa pohybuje od 512 bajtov v modeloch ATmega8x až po 4 KB v starších modeloch. EEPROM pamäť sa nachádza vo vlastnom adresnom priestore a podobne ako RAM je usporiadaná lineárne. Pracovať s EEPROM Pamäť využíva tri I/O registre: register adries, register údajov a riadiaci register.
Register adries
Register adries EEPROM Pamäť EEAR (register adries EEPROM) fyzicky umiestnené v dvoch RVV EEARH:EEARL, ktorý sa nachádza pozdĺž
adresy $1F ($3F) a $1E ($3E). Do tohto registra sa načíta adresa bunky, do ktorej sa bude pristupovať. Register adries je zapisovateľný aj čitateľný. Zároveň v registri EEARH používajú sa iba najmenej významné bity (počet použitých bitov závisí od objemu EEPROM Pamäť). Nepoužité bity registra EEARH sú len na čítanie a obsahujú "0".
Register údajov
Register údajov EEPROM Pamäť EEDR (údajový register EEPROM) na $1D ($3D). Pri zápise do tohto registra sa načítajú údaje, ktoré by mali byť vložené EEPROM a pri čítaní sa údaje čítajú z EEPROM.
Kontrolný register
Kontrolný register EEPROM Pamäť EECR (riadiaci register EEPROM) sa nachádza na 1C (3C USD). Tento register slúži na
Riadenie prístupu EEPROM Pamäť. Jeho popis je uvedený v tabuľke nižšie:
Vypúšťanie | názov | Popis |
7..4 | - | nepoužíva sa, čítajte ako "0" |
3 | EERIE | Povoliť prerušenie z EEPROM. Tento bit riadi generovanie prerušenia, ktoré nastane po dokončení cyklu zápisu EEPROM. Ak je tento bit nastavený na "1", prerušenia sú povolené (ak je príznak I v registri SREG je tiež nastavený na "1"). Keď sa bit EEWE vymaže (pozri ďalej v tabuľka) prerušenie sa generuje neustále |
2 | EEMWE | Ovládanie oprávnenia na zápis do EEPROM. Stav tohto bitu určuje činnosť príznaku povolenia zápisu EEWE. Ak je tento bit nastavený na „1“, potom pri zápise do EEWE bitu „1“ sa dáta zapisujú do EEPROM. V opačnom prípade nemá nastavenie EEWE na „1“ žiadny účinok. Po inštalácii softvéru sa bit EEMWE resetuje hardvérom cez 4 strojové cykly |
1 | EEWE | Povoliť zápis do EEPROM. Keď je tento bit nastavený na „1“, dáta sa zapisujú do EEPROM (ak sa EEMWE rovná „1“). |
0 | EERE | Povolenie na čítanie z EEPROM. Po nastavení tohto bitu na „1“ sa dáta načítajú z EEPROM. Po dokončení čítania je tento bit hardvérovo resetovaný |
Na zápis jedného bajtu do EEPROM potrebujete:
1. Počkajte, kým bude EEPROM pripravená na zápis dát (počkajte, kým sa neresetuje príznak EEWE registra EECR).
2. Počkajte na dokončenie zápisu do pamäte programu FLASH (počkajte, kým sa nevynuluje príznak SPMEN registra SPMCR).
3. Vložte dátový bajt do registra EEDR a požadovanú adresu do registra EEAR (ak je to potrebné).
4. Nastavte príznak EEMWE registra EECR na „1“.
5. Zapíšte protokol do bitu EEWE v registri EECR. "1" pre 4 strojové cykly. Po nainštalovaní tohto bitu procesor
preskočí 2 strojové cykly pred vykonaním ďalšej inštrukcie.
Na prečítanie jedného bajtu z EEPROM potrebujete:
1. Skontrolujte stav vlajky EEWE. Faktom je, že kým sa vykonáva operácia zápisu do pamäte EEPROM (je nastavený príznak EEWE), nie je možné vykonať čítanie pamäte EEPROM ani zmenu registra adries.
2. Vložte požadovanú adresu do registra EEAR.
3. Nastavte bit EERE registra EECR na „1“.
Keď sú požadované dáta umiestnené v dátovom registri EEDR, dôjde k hardvérovému resetu tohto bitu. Nie je však potrebné monitorovať stav bitu EERE, aby sa určilo, kedy je operácia čítania dokončená, pretože operácia čítania z EEPROM je vždy dokončená v jednom strojovom cykle. Navyše po nastavení bitu EERE na „1“ procesor pred spustením ďalšej inštrukcie preskočí 4 strojové cykly.
Prostredie AVR Studio GCC má štandardnú knižnicu pre prácu s EEPROM, ktorá sa umožňuje pripojením súboru
Najprv pripojíme knižnice potrebné na prevádzku vrátane EEPROM. Definujte premenné. Premenná "s" ukladá hodnotu pre výstup do indikátora, po stlačení tlačidla SB1 sa táto hodnota zvýši o jednu, ale nie viac ako 10. Premenná eeprom_var bude interagovať s EEPROM. Po zapnutí napájania sa načíta EEPROM, načítané údaje sa priradia premennej „s“, na základe toho sa na indikátore zobrazí určité číslo. Keď stlačíte SB2, údaje z premennej „s“ sa zapíšu do EEPROM a indikátor raz zabliká.
#include
Komentáre
0 AntonChip 5. 2. 2013 22:15
Citujem Max:
Možno si niečo mýlim, ale ak máte indikátor s OA, tak stačí jeden rezistor na 5V linke.Načo montovať prúdové obmedzovacie odpory za prvok, ktorý majú chrániť pred vysokým prúdom??
Len si predstavte, čo sa stane, ak sa jeden segment indikátora uzavrie s touto a inou schémou zapojenia odporu.
0 AntonChip 15.05.2013 11:16
Citujem gydok:
Ako napísať dvojrozmerné pole do eeprom?
kód:
#include
EEMEM unsigned char colors=((1, 2, 3), // Deklarovanie poľa v EEPROM
{4, 5, 6}};
eeprom_write_byte(&farby, 1); // Zápis prvkov poľa do EEPROM
eeprom_write_byte(&farby, 2);
eeprom_write_byte(&farby, 3);
eeprom_write_byte(&farby, 4);
eeprom_write_byte(&farby, 5);
eeprom_write_byte(&farby, 6);
unsigned char temp;
temp = eeprom_read_byte(&farby); // Extrahovanie prvku poľa z EEPROM, 2. riadok (), 1. stĺpec (), t.j. číslo 4
Resetovanie pamäte EEPROM
Príklad prechádza cez všetky pamäťové bunky a zapisuje do nich nuly.
// Pripojenie knižnice na prácu s EEPROM. #include "EEPROM.h" void setup() ( // Prejdite všetky bunky (bajty) a zapíšte do nich nuly. for (int i = 0; i< EEPROM.length(); i++) EEPROM.update(i, 0); } void loop() { // Пустой цикл... }
Obnovenie továrenských nastavení
Ak chcete pamäť vrátiť do továrenského nastavenia, je potrebné nahradiť 0 255, t.j. zapisovať nie nuly, ale číslo 255. V budúcnosti je teda možné pomocou funkcie isNaN() skontrolovať, či sa zápis do pamäte EEPROM vykonal alebo nie.
// Pripojenie knižnice na prácu s EEPROM. #include "EEPROM.h" void setup() ( // Prejdite všetky bunky (bajty) a napíšte do nich čísla 255. for (int i = 0; i< EEPROM.length(); i++) EEPROM.update(i, 255); } void loop() { // Пустой цикл... }
Povedzte nám o nás
Správa
Ak máte skúsenosti s prácou s Arduinom a skutočne máte čas na kreativitu, pozývame každého, aby sa stal autorom článkov publikovaných na našom portáli. Môžu to byť lekcie alebo príbehy o vašich experimentoch s Arduinom. Popis rôznych senzorov a modulov. Rady a návody pre začiatočníkov. Píšte a uverejňujte svoje články