Kaj je pomnilniški čip in kako programirati mikrovezja. Kako počistiti EEPROM (obstojni pomnilnik) z uporabo pomnilnika eeprom
Zadnjič, ko sem pisal svoj "podroben odgovor na vprašanje" o tem, kako narediti varnostno kopijo firmware-a iz Mega, so mi očitali, da nisem omenil varnostne kopije EEPROM-a. Takrat tega nisem naredila zavestno, ker ... Pravilno sem presodil, da v fazi začetnega "približevanja projektilu" ni treba vsega komplicirati. Dejstvo je, da ni vsakomur očitno, da se EEPROM ne utripa pri prevajanju in nalaganju vdelane programske opreme iz Arduino IDE. To pomeni, da se popolnoma nič ne naloži v EEPROM, ko se vdelana programska oprema naloži iz IDE. In manipulacije z EEPROM (če je njegova uporaba sploh omogočena v vdelani programski opremi) se izvajajo na povsem drugi ravni. In zato za varnostno kopiranje gole vdelane programske opreme brez fine nastavitve, ki se MOGOČE (samo morda) lahko shrani v EEPROM, je bilo čisto dovolj, da se shrani le goli firmware. Ampak, ker se je pojavilo vprašanje, zakaj ga ne bi "prežvečili". Pojdimo skozi to po vrsti. Kaj je EEPROM in zakaj o njem govoriti?
EEPROM - (Electrically Erasable Programmable Read-Only Memory) področje obstojnega pomnilnika mikrokontrolerja, v katerega je mogoče zapisovati in brati informacije. Pogosto se uporablja za shranjevanje programskih nastavitev, ki se lahko spremenijo med delovanjem in jih je treba shraniti, ko je napajanje izklopljeno.
Kako 3D tiskalnik uporablja EEPROM?
Oglejmo si Marlin kot primer. V Marlin Firmware takoj po namestitvi se EEPROM ne uporablja. Parametri konfiguratorja (Configuration.h), ki vključujejo možnost uporabe, so privzeto zakomentirani.
#define EEPROM_SETTINGS
#define EEPROM_CHITCHAT
Če je omogočena uporaba EEPROM-a, lahko tiskalnik shrani in uporablja naslednje nastavitve (določene iz buržoazije):
- Število korakov na milimeter
- Največja/najmanjša hitrost podajanja [mm/s]
- Največji pospešek [mm/s^2]
- Pospešek
- Pospešek med umikom
- Nastavitve PID
- Odmik domačega položaja
- Najmanjša hitrost podajanja med premikanjem [mm/s]
- Najmanjši čas odseka [ms]
- Skok največje hitrosti osi X-Y[mm/s]
- Največji skok hitrosti v osi Z [mm/s]
- Shranite spomin
- Naloži pomnilnik
- Obnovi Failsafe
- M500 Shrani trenutne nastavitve v EEPROM do naslednjega zagona ali ukaza M501.
- M501 Prebere nastavitve iz EEPROM-a.
- M502 Ponastavi nastavitve na privzete vrednosti, določene v Configurations.h. Če za njim izvedete M500, bodo privzete vrednosti vnesene v EEPROM.
- M503 Prikaže trenutne nastavitve - ""Tiste, posnete v EEPROM.""
Kako brati in pisati podatke v EEPROM?
Podobno metodi, opisani v metodi varnostnega kopiranja vdelane programske opreme z uporabo ključa -U. Samo v tem primeru bo za njim kazalec, ki označuje, da je treba prebrati EEPROM.
Ta ukaz prebere podatke EEPROM v datoteko "printer_eeprom.eep". Če je uspešen, boste na zaslonu videli nekaj podobnega naslednjemu.avrdude.exe -p atmega2560 -c ožičenje -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i
Snemanje tudi ni zapleteno in se izvaja s podobnim ukazom, ki se razlikuje le v ključu -U Ni "r", ampak "w".
Če uspe, boste na zaslonu videli nekaj podobnega naslednjemu sporočilu.avrdude.exe -p atmega2560 -c ožičenje -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i
Za začetek, "zakaj to storiti?" EEPROM morate izbrisati, če ga je uporabljala tudi prejšnja vdelana programska oprema in je lahko v pomnilniku ostala smeti. Nekje sem že naletel na ljudi s težavami, da se je njihov tiskalnik po prehodu z enega firmware-a na drugega (z Marlina na Repitier EMNIP) začel obnašati tako rekoč “kreativno”. To je posledica dejstva, da različna vdelana programska oprema shranjuje svoje podatke pod različne naslove. In ko poskušate prebrati podatke z napačnega naslova, se začne pandemonij.
EEPROM lahko izbrišete samo programsko iz vdelane programske opreme, vendar boste za to morali začasno naložiti posebno skico v krmilnik. Več o tem lahko preberete v uradni dokumentaciji Arduino.
Če je EEPROM izbrisan, ni v Arduino plošča, v nekaterih abstraktnih krmilnikih pa bo treba kodo skice spremeniti ob upoštevanju velikosti EEPROM-a v določenem krmilniku na plošči. Če želite to narediti, boste morali spremeniti končni pogoj v zanki "Za". Na primer, za ATmega328, ki ima 1 kb pomnilnika EEPROM, bo cikel videti takole:
Zaključek.
Že kar nekaj časa blodim, ampak čemu vse to? Da bi prišli do zaključka, da se pri varnostnem kopiranju firmware-a lahko shrani tudi EEPROM, vendar le, če potrebujete nastavitve, shranjene v njem. Če ste jih pripravljeni žrtvovati, potem pozabite na to. Tudi če spremenite eno vdelano programsko opremo v drugo ali preklopite z ene različice na drugo, ne bodite leni in počistite EEPROM pred nalaganjem nova strojna programska oprema. No, hkrati pa smo izvedeli veliko novega.
Naš krmilnik peči je že skoraj pripravljen - vendar za zdaj ostaja krmilnik "zlate ribice", ki si vse nastavitve zapomni le pet minut pred prvim izklopom. Če si želite zapomniti naše nastavitve, vrednost nastavljene temperature in kalibracijske točke tudi po izklopu napajanja, morate uporabiti obstojni pomnilnik - EEPROM.
Naši prijatelji so zelo dobro pisali o delu z EEPROM.
Glavna stvar, ki jo moramo vedeti, je, da EEPROM pomnilnik Bolje je, da ga ne obravnavamo kot "samo pomnilnik", ampak kot ločeno notranjo napravo v čipu.
EEPROM ločen naslovni prostor, ki nima nobene zveze z naslovnim prostorom procesorja (FLASH in SRAM); če želite dostopati do podatkov na določenem naslovu v obstojnem pomnilniku, morate izvesti določeno zaporedje dejanj z uporabo številnih registrov (naslovna registra EEARH in EEARL, podatkovni register EEDR in kontrolni register EECR).
V skladu s podatkovnim listom morate za pisanje bajta na določen naslov v EEPROM narediti naslednje:
- počakajte, da je EEPROM pripravljen za zapisovanje podatkov (bit EEPE registra EECR se ponastavi);
- počakajte na konec pisanja v pomnilnik FLASH (ponastavitev bita SELFPRGEN registra SPMCSR) - to je treba storiti, če je v programu prisoten zagonski nalagalnik;
- zapisati nov naslov v register EEAR (če je potrebno);
- zapisati podatkovni bajt v register EEDR (če je potrebno);
- nastavite bit EEMPE registra EECR na ena;
- v štirih taktih po nastavitvi zastavice EEMPE zapišemo logično enoto v bit EEPE registra EECR.
Procesor nato preskoči 2 takta, preden izvede naslednji ukaz.
Drugo točko je treba izvesti, če je v programu zagonski nalagalnik - dejstvo je, da pisanja v EEPROM ni mogoče izvajati hkrati s pisanjem v pomnilnik FLASH, zato se morate pred pisanjem v EEPROM prepričati, da je programiranje pomnilnika FLASH končano; če mikrokrmilnik nima zagonskega nalagalnika, potem nikoli ne spreminja vsebine pomnilnika FLASH (ne pozabite, da ima avr arhitekturo Harvard: programski pomnilnik (FLASH) in podatkovni pomnilnik (SRAM) sta ločena).
Trajanje snemalnega cikla je odvisno od frekvence notranjega RC oscilatorja čipa, napajalne napetosti in temperature; običajno za modele ATmega48x/88x/168x je to 3,4 ms (!), za nekatere starejše modele – 8,5 ms (!!!).
Poleg tega se lahko pri pisanju v EEPROM pojavijo težave s klicanjem prekinitev med izvajanjem zaporedja dejanj zgoraj - zato je bolje onemogočiti prekinitve med pisanjem v EEPROM.
Branje obstojnega pomnilnika je nekoliko preprostejše:
- počakajte, da bo EEPROM pripravljen za branje podatkov (bit EEWE registra EECR se ponastavi);
- vpišite naslov v register EEAR;
- nastavite bit EERE registra EECR na ena;
- beremo podatke iz registra EEDR (dejansko, ko se zahtevani podatki premaknejo v register podatkov, se zgodi trda ponastavitev bit EERE; vendar ni potrebe po spremljanju stanja tega bita, saj se operacija branja iz EEPROM-a vedno izvede v enem taktu).
Po nastavitvi bita v EERE na ena procesor preskoči 4 takte pred izvedbo naslednjega ukaza.
Kot vidimo, delo z obstojni pomnilnik– postopek je dolgotrajen; če pogosto pišemo in beremo podatke iz EEPROM-a, se lahko program začne upočasnjevati.
Vendar pa pišemo program v okolju IAR in imamo srečo: vse delo z branjem in pisanjem iz EEPROM-a bo opravilo razvojno okolje - iar ima modifikator "__eeprom", ki ustvarja spremenljivke v obstojnem pomnilniku - in takrat bomo morali samo prebrati iz "trajnih" spremenljivk v "trenutne" (pri inicializaciji krmilnika) ali pisati iz "trenutnih" spremenljivk v "konstantne" - to je, ko se trenutna vrednost spremeni, vrednost spremeniti je treba tudi spremenljivko v obstojnem pomnilniku.
Nove spremenljivke bodo videti takole:
Eeprom uint16_t EEP_MinTemperature;
Še nekaj splošnih besed: in čeprav ne predvidevamo kazalcev na spremenljivke eeprom, se moramo spomniti, da je eeprom ločen naslovni prostor, in če želimo ustvariti kazalec na eeprom (in prevajalnik nam to omogoča), moramo mora navesti, da je to kazalec na naslov v eepromu:
Uint16_t __eeprom *EEP_MinTemperatureAdr;
Vrnimo se k krmilniku peči in EEPROM-u. V našem primeru ni EEPROM-a navidezni stroj, seveda ni pričakovati; Poleg tega je vredno razmisliti, ali je za delo z obstojnim pomnilnikom potrebna ločena knjižnica - preveč so "razpršene" po snemalnem programu pomembne nastavitve; če poskušate narediti ločeno knjižnico, boste morali narediti navzkrižne reference: v knjižnici za EEPROM povežite knjižnice ADC, grelnega elementa in globalnih nastavitev; in v teh perifernih knjižnicah povezovanje knjižnice EEPROM ni zelo dober pristop.
Druga možnost je, da dodate spremenljivko eeprom v vsako knjižnico, kjer morate shraniti nastavitve, in shranite ustrezne nastavitve neposredno v virtualni stroji. To možnost bomo izvedli.
Najprej naštejmo, katere spremenljivke moramo shraniti v EEPROM:
- kalibracijske točke
- vrednosti najvišje-minimalne nastavljene temperature in koraka nastavitve temperature
- nastavljena vrednost temperature
- Koeficienti PID regulatorja
Vrednosti kuhinjskega časovnika ne shranjujemo - predvidevali bomo, da mora uporabnik nastaviti časovnik štedilnika vsakič po izklopu električnega toka.
Vse te nastavitve nastavi uporabnik z vrtenjem kodirnika in nato s kratkim pritiskom na uporabniško tipko. Ob tem se spomnimo, da je število bralno-pisalnih ciklov EEPROM-a še vedno omejeno, zato istih informacij ne prepisujte znova (na primer, če je uporabnik izbral enako vrednost neke nastavitve, kot je bila). Zato pred vsako spremembo spremenljivke __eeprom preverimo, ali jo je treba prepisati:
//če se je vrednost spremenila, jo prepišite v obstojnem pomnilniku if (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) ( ADCTemperature.atMinTemperatureValue = (uint16_t)VMEncoderCounter.ecntValue; EEP_MinTemperature = ADCTemperature.at Najmanjša vrednost temperature; )
Tudi branje nastavitev iz EEPROM-a je preprosto - pri inicializaciji "trenutnih" nastavitev preprosto preberemo vrednost iz obstojnega pomnilnika:
ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;
Da bi imela naša naprava nekaj nastavitev v EEPROM-u že od samega začetka, lahko projekt za prvi zagon prevedemo s temi inicializiranimi spremenljivkami:
Eeprom uint16_t EEP_MinTemperature = 20; ... //matrika za shranjevanje kalibracijskih točk v obstojnem pomnilniku __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));
V tem primeru prevajalnik inicializira spremenljivke __eeprom, preden začne delati z glavno funkcijo. Če želite pridobiti datoteko s trajnim pomnilnikom (.eep), morate iti v naslednje nastavitve:
Projekt->Možnosti..->Povezovalnik->Dodatne možnosti
Če potrditveno polje »Uporabi možnosti ukazne vrstice« ni potrjeno, ga označite in dodajte vrstico
-Ointel-standard,(XDATA)=.eep
Najprej prevedemo projekt z inicializiranimi spremenljivkami, datoteko eep shranimo posebej; potem odstranimo inicializacijo pri ustvarjanju spremenljivk.
To je vse - naša peč je pripravljena!
Arduino je cela družina razne naprave za izdelavo elektronskih projektov. Mikrokontrolerji so zelo priročni za uporabo in jih je enostavno naučiti tudi začetnik. Vsak mikrokontroler je sestavljen iz plošče, programov za delovanje in pomnilnika. Ta članek bo obravnaval obstojni pomnilnik, ki se uporablja v Arduinu.
Opis pomnilnika EEPROM
Arduino svojim uporabnikom ponuja tri vrste vgrajenega pomnilnika naprave: stacionarni RAM (pomnilnik z naključnim dostopom ali SRAM - statični pomnilnik z naključnim dostopom) - potreben za snemanje in shranjevanje podatkov med uporabo; flash kartice – za shranjevanje že posnetih vzorcev; – za shranjevanje in kasnejšo uporabo podatkov.
Vsi podatki v RAM-u se izbrišejo takoj, ko napravo znova zaženete ali izklopite. Druga dva shranita vse informacije pred prepisovanjem in vam omogočata, da jih po potrebi prikličete. Flash diski so danes precej pogosti. Vredno je podrobneje razmisliti o pomnilniku EEPROM.
Okrajšava pomeni Electrically Erasable Programmable Read-Only Memory in prevedena v ruščino dobesedno pomeni električno izbrisljiv programabilni pomnilnik samo za branje. Proizvajalec zagotavlja varnost informacij več desetletij po zadnjem izpadu električne energije (običajno je navedeno obdobje 20 let, odvisno od hitrosti upadanja napolnjenosti naprave).
Vendar morate vedeti, da je možnost prepisovanja v napravo omejena in ni več kot 100.000-krat. Zato je priporočljivo biti previden in pozoren na vnesene podatke ter jih ne prepisovati ponovno.
Količina pomnilnika je v primerjavi s sodobnimi mediji zelo majhna in se razlikuje za različne mikrokontrolerje. Na primer za:
- ATmega328 – 1kB
- ATmega168 in ATmega8 – 512 bajtov,
- in ATmega1280 – 4 kB.
Zasnovan je tako, ker je vsak mikrokrmilnik zasnovan za točno določen obseg opravil, ima različno število pinov za priklop in temu primerno zahteva različno količino pomnilnika. Poleg tega ta znesek zadostuje za skupno ustvarjene projekte.
Zapisovanje v EEPROM zahteva veliko časa - pribl. 3 ms. Če med snemanjem izklopite napajanje, se podatki sploh ne bodo shranili ali pa bodo morda napačno posneti. Vedno je potrebno dodatno preveriti vnesene podatke, da preprečimo napake med delovanjem. Branje podatkov je veliko hitrejše, pomnilniški vir pa se ne zmanjša.
Knjižnica
Delo s pomnilnikom EEPROM se izvaja s knjižnico, ki je bila ustvarjena posebej za Arduino. Glavne so zmožnost pisanja in branja podatkov. aktiviran z ukazom #vključi EEPROM.h.
- Za zapisi– EEPROM.write(naslov, podatki);
- Za branje– EEPROM.branje(naslov).
Na teh skicah: naslov – argument s podatki celice, kjer so vpisani podatki drugega argumenta; pri branju se uporablja en argument, naslov, ki označuje, od kod naj se informacija prebere.
funkcija | Namen |
---|---|
branje (naslov) | prebere 1 bajt iz EEPROM-a; naslov – naslov, s katerega se berejo podatki (celica se začne z 0); |
napiši (naslov, vrednost) | zapiše vrednost (1 bajt, število od 0 do 255) v pomnilnik na naslovu; |
posodobitev (naslov, vrednost) | zamenja vrednost na naslovu, če se njegova stara vsebina razlikuje od nove; |
pridobi (naslov, podatki) | prebere podatke določene vrste iz pomnilnika na naslovu; |
daj (naslov, podatki) | zapiše podatke podane vrste v pomnilnik na naslovu; |
EEPROM | vam omogoča uporabo identifikatorja "EEPROM" kot polja za zapisovanje podatkov in branje iz pomnilnika. |
Pisanje celih števil
Zapisovanje celih števil v obstojni pomnilnik EEPROM je precej preprosto. Vnos številk se izvede, ko se funkcija zažene EEPROM.write(). Zahtevani podatki so navedeni v oklepajih. V tem primeru se števila od 0 do 255 in števila nad 255 zapišejo drugače. Prve se vnesejo preprosto - njihova prostornina zavzame 1 bajt, to je eno celico. Za pisanje slednjega morate uporabiti operatorja highByte() za najvišji bajt in lowByte() za najnižji bajt.
Število je razdeljeno na bajte in zapisano ločeno v celicah. Na primer, število 789 bo zapisano v dveh celicah: prva bo vsebovala faktor 3, druga pa manjkajočo vrednost. Rezultat je zahtevana vrednost:
3 * 256 + 21 = 789
Za « ponovno združitev« velja veliko celo število besedna funkcija(): int val = beseda (hi, nizko). Prebrati morate, da je največje celo število za snemanje 65536 (to je 2 na potenco 16). V celicah, ki še niso imele drugih vnosov, bo monitor prikazal številke 255 v vsaki.
Pisanje števil in nizov s plavajočo vejico
Številke s plavajočo vejico in nizi so oblika zapisa realnih števil, kjer so predstavljena z mantiso in eksponentom. Takšne številke se z aktiviranjem funkcije zapišejo v obstojni pomnilnik EEPROM EEPROM.put(), branje oziroma, – EEPROM.get().
Pri programiranju so številske vrednosti s plavajočo vejico označene kot float; treba je omeniti, da to ni ukaz, ampak število. Vrsta znaka (vrsta znaka) – uporablja se za predstavitev nizov. Postopek zapisovanja številk na monitor se zažene z uporabo setup(), branje - z uporabo loop().
Med postopkom se lahko na zaslonu monitorja prikažeta vrednosti ovf, kar pomeni "prenapolnjeno" in nan, kar pomeni "manjkajoče". številčna vrednost" To pomeni, da informacij, zapisanih v celico, ni mogoče reproducirati kot število s plavajočo vejico. Do te situacije ne bo prišlo, če zanesljivo veste, v kateri celici je zapisana vrsta informacije.
Primeri projektov in skic
Primer št. 1
Skica bo zapisala do 16 znakov iz serijskih vrat in izpisala 16 znakov iz EEPROM-a v zanki. Zahvaljujoč temu se podatki zapisujejo v EEPROM in spremljajo vsebino obstojnega pomnilnika.
// preverite delovanje EEPROM #include
Primer št. 2
Za boljše razumevanje lahko ustvarimo majhno skico, ki bo pomagala razumeti, kako delati z obstojnim pomnilnikom. Preštejemo vse celice tega spomina. Če celica ni prazna - izhod v serijska vrata. Nato celice napolnite s presledki. Nato vnesemo besedilo prek monitorja serijskih vrat. Zapišemo ga v EEPROM in preberemo ob naslednjem vklopu.
#vključi
Primer št. 3
Zapiše dve celi števili v pomnilnik, ju prebere iz EEPROM-a in ju pošlje v serijska vrata. Številke od 0 do 255 zasedejo 1 bajt pomnilnika z uporabo funkcije EEPROM.write() se zapišejo v želeno celico. Za števila, večja od 255, jih je treba razdeliti v bajte z uporabo highByte() in lowByte() in zapišite vsak bajt v svojo celico. Največje število v tem primeru je 65536 (ali 2 16).
#vključi
Primer št. 4
Zapis števil in nizov s plavajočo vejico - metoda EEPROM.put(). Branje – EEPROM.get().
#vključi
Primer št. 5
Uporaba EEPROM-a kot polja.
#vključi
Delo z EEPROM
Kot smo že omenili, je pomnilnik EEPROM omejen. Za podaljšanje življenjske dobe obstojnega pomnilnika je namesto funkcije write() bolje uporabiti funkcijo posodobitve. V tem primeru se prepis izvede samo za tiste celice, kjer se vrednost razlikuje od na novo zapisane.
Druga uporabna funkcija zadevnega pomnilnika mikrokrmilnika je zmožnost uporabe celic za shranjevanje bajtov kot delov integralnega polja EEPROM. Pri vsakem formatu uporabe je potrebno stalno spremljanje celovitosti zapisanih podatkov.
Tak pomnilnik na Arduinu standardno hrani najpomembnejše za delovanje krmilnika in naprave. Na primer, če je regulator temperature ustvarjen na takšni podlagi in se začetni podatki izkažejo za napačne, bo naprava delovala "neustrezno" obstoječim pogojem - močno bo podcenila ali precenila temperaturo.
Obstaja več primerov, ko EEPROM vsebuje napačne podatke:
- Ob prvi aktivaciji še ni bilo vnosov.
- Med nenadzorovanim izpadom električne energije nekateri ali vsi podatki ne bodo zabeleženi ali pa bodo zabeleženi nepravilno.
- Po zaključku možnih ciklov prepisovanja podatkov.
Da bi se izognili neprijetnim posledicam, lahko napravo programirate za več možnosti delovanja: uporabite podatke kode za nujne primere, popolnoma izklopite sistem, signalizirajte okvaro, uporabite predhodno ustvarjeno kopijo ali druge.
Za nadzor celovitosti informacij se uporablja sistemska nadzorna koda. Ustvari se na podlagi izvirnega zapisa podatkov in ob preverjanju ponovno izračuna podatke. Če je rezultat drugačen, je to napaka. Najpogostejša različica takega preverjanja je kontrolna vsota - izvede se preprosta matematična operacija za seštevanje vseh vrednosti celic.
Izkušeni programerji tej kodi dodajo dodaten "izključni ALI", na primer E5h. Če so vse vrednosti enake nič in je sistem pomotoma ponastavil prvotne podatke, bo ta trik razkril napako.
To so osnovni principi dela z obstojnim pomnilnikom EEPROM za mikrokontrolerje Arduino. Za določene projekte se splača uporabljati samo to vrsto pomnilnika. Ima tako svoje prednosti kot slabosti. Če želite obvladati metode pisanja in branja, je bolje začeti s preprostimi nalogami.
Vsi mikrokrmilniki družine Mega vključujejo obstojni pomnilnik ( EEPROM spomin). Prostornina tega pomnilnika sega od 512 bajtov pri modelih ATmega8x do 4 KB pri starejših modelih. EEPROM pomnilnik se nahaja v lastnem naslovnem prostoru in je tako kot RAM organiziran linearno. Za delo EEPROM Pomnilnik uporablja tri V/I registre: naslovni register, podatkovni register in kontrolni register.
Naslovni register
Naslovni register EEPROM spomin EEAR (register naslovov EEPROM) fizično nahajajo v dveh RVV EEARH:EEARL, ki se nahaja ob
naslovi $1F ($3F) oziroma $1E ($3E). Ta register je naložen z naslovom celice, do katere bo dostopen. Naslovni register je berljiv in zapisljiv. Hkrati pa v registru EEARH uporabljeni so le najmanj pomembni biti (število vključenih bitov je odvisno od glasnosti EEPROM spomin). Neuporabljeni registrski biti EEARH so samo za branje in vsebujejo "0".
Register podatkov
Register podatkov EEPROM spomin EEDR (register podatkov EEPROM) ki se nahaja na $1D ($3D). Pri zapisovanju v ta register se naložijo podatki, ki jih je treba vnesti EEPROM, pri branju pa prebrani podatki iz EEPROM.
Nadzorni register
Nadzorni register EEPROM spomin EECR (kontrolni register EEPROM) ki se nahaja na $1C ($3C). Ta register se uporablja za
nadzor dostopa EEPROM spomin. Njegov opis je prikazan v spodnji tabeli:
praznjenje | Ime | Opis |
7..4 | - | ni uporabljeno, beri kot "0" |
3 | JEZIČNO | Omogoči prekinitev iz EEPROM-a. Ta bit nadzoruje generiranje prekinitve, ki se pojavi, ko je cikel pisanja EEPROM končan. Če je ta bit nastavljen na "1", so prekinitve omogočene (če je zastavica I registra SREG je tudi nastavljen na "1"). Ko je bit EEWE počiščen (glejte nadaljevanje v tabela) se prekinitev generira stalno |
2 | EEMWE | Nadzor dovoljenja za pisanje v EEPROM. Stanje tega bita določa delovanje zastavice za omogočanje pisanja EEWE. Če je ta bit nastavljen na "1", potem se pri pisanju v EEWE bit "1" podatki zapišejo v EEPROM. V nasprotnem primeru nastavitev EEWE na "1" nima učinka. Po namestitvi programske opreme bit EEMWE ponastavi strojna oprema prek 4 strojni cikli |
1 | EEWE | Dovoli pisanje v EEPROM. Ko je ta bit nastavljen na "1", se podatki zapišejo v EEPROM (če je EEMWE enak "1") |
0 | EERE | Dovoljenje za branje iz EEPROM-a. Po nastavitvi tega bita na "1" se podatki preberejo iz EEPROM-a. Po končanem branju strojna oprema ponastavi ta bit |
Za zapis enega bajta v EEPROM potrebujete:
1. Počakajte, da bo EEPROM pripravljen za pisanje podatkov (počakajte, da se zastavica EEWE registra EECR ponastavi).
2. Počakajte na zaključek pisanja v programski pomnilnik FLASH (počakajte, da se zastavica SPMEN registra SPMCR ponastavi).
3. Naložite podatkovni bajt v register EEDR in zahtevani naslov v register EEAR (če je potrebno).
4. Nastavite zastavico EEMWE registra EECR na "1".
5. Zapišite dnevnik v bit EEWE registra EECR. "1" za 4 strojne cikle. Po namestitvi tega bita se procesor
preskoči 2 strojna cikla pred izvedbo naslednjega ukaza.
Za branje enega bajta iz EEPROM-a potrebujete:
1. Preverite stanje zastavice EEWE. Dejstvo je, da med izvajanjem pisalne operacije v pomnilnik EEPROM (nastavljena je zastavica EEWE) ni mogoče izvesti niti branja pomnilnika EEPROM niti spreminjanja naslovnega registra.
2. Naložite zahtevani naslov v register EEAR.
3. Nastavite bit EERE registra EECR na "1".
Ko so zahtevani podatki postavljeni v podatkovni register EEDR, bo prišlo do strojne ponastavitve tega bita. Vendar pa ni potrebno spremljati stanja bita EERE, da bi ugotovili, kdaj je branje zaključeno, saj se branje iz EEPROM-a vedno zaključi v enem strojnem ciklu. Poleg tega po nastavitvi bita EERE na "1" procesor preskoči 4 strojne cikle, preden začne z naslednjim ukazom.
Okolje AVR Studio GCC ima standardno knjižnico za delo z EEPROM, ki jo omogočimo s povezavo datoteke
Najprej povežemo knjižnice, potrebne za delovanje, vključno z EEPROM. Določite spremenljivke. Spremenljivka "s" shrani vrednost za prikaz na indikatorju; ko pritisnete gumb SB1, se ta vrednost poveča za eno, vendar ne več kot 10. Spremenljivka eeprom_var bo delovala z EEPROM. Ko je napajanje vklopljeno, se EEPROM prebere, prebrani podatki so dodeljeni spremenljivki "s", na podlagi tega se na indikatorju prikaže določeno število. Ko pritisnete SB2, se podatki iz spremenljivke “s” zapišejo v EEPROM in indikator enkrat utripne.
#vključi
Komentarji
0 AntonChip 5.2.2013 22:15
Citiram Maxa:
Mogoče kaj zamešam, ampak če imaš indikator z OA, potem je dovolj en upor na liniji 5V.Zakaj vgrajevati tokovno omejevalne upore za elementom, ki naj bi ga ščitili pred velikim tokom??
Samo predstavljajte si, kaj se bo zgodilo, če se en segment indikatorja zapre s to in drugo shemo povezovanja upora.
0 AntonChip 15.5.2013 11:16
Citiram gydoka:
Kako zapisati dvodimenzionalno matriko v eeprom?
Koda:
#vključi
EEMEM unsigned char colors=((1, 2, 3), // Deklariraj matriko v EEPROM-u
{4, 5, 6}};
eeprom_write_byte(&barve, 1); // Zapis elementov polja v EEPROM
eeprom_write_byte(&barve, 2);
eeprom_write_byte(&barve, 3);
eeprom_write_byte(&barve, 4);
eeprom_write_byte(&barve, 5);
eeprom_write_byte(&barve, 6);
nepredznačena temp.
temp = eeprom_read_byte(&barve); // Ekstrahiraj element polja iz EEPROM-a, 2nd row(), 1st column(), tj. številka 4
Ponastavitev pomnilnika EEPROM
Primer preleti vse pomnilniške celice in vanje zapiše ničle.
// Povezovanje knjižnice za delo z EEPROM. #include "EEPROM.h" void setup() ( // Pojdi skozi vse celice (bajte) in vanje zapiši ničle. for (int i = 0; i< EEPROM.length(); i++) EEPROM.update(i, 0); } void loop() { // Пустой цикл... }
Tovarniška ponastavitev
Če želite pomnilnik vrniti na tovarniške nastavitve, morate 0 zamenjati z 255, tj. ne zapišite ničle, ampak številko 255. Tako je v prihodnosti s funkcijo isNaN() mogoče preveriti, ali je bil zapis v pomnilnik EEPROM opravljen ali ne.
// Povezovanje knjižnice za delo z EEPROM. #include "EEPROM.h" void setup() ( // Pojdite skozi vse celice (bajte) in vanje zapišite številke 255. for (int i = 0; i< EEPROM.length(); i++) EEPROM.update(i, 255); } void loop() { // Пустой цикл... }
Povejte nam o nas
Sporočilo
Če imate izkušnje z Arduinom in dejansko imate čas za ustvarjalnost, vabimo vse, da postanete avtorji člankov, objavljenih na našem portalu. To so lahko lekcije ali zgodbe o vaših poskusih z Arduinom. Opis različnih senzorjev in modulov. Nasveti in navodila za začetnike. Pišite in objavljajte svoje članke na