- Kaj so varovalke v AVR - podrobna razlaga
- Bit varovalk v Arduinu
- Komponente, potrebne za preizkus varovalk v AVR
- Shema za preizkušanje bitov varovalk v AVR
- Testiranje varovalk v AVR
V tej vadnici bomo govorili o varovalkah. Ko sem študiral na kolidžu in se učil vseh kul stvari v elektroniki, sem prvič slišal izraz varovalka v AVR, moja začetna misel na to temo je bila, oh! znotraj AVR-ja je nekaj, kar bo pihalo, če sem naredil kaj narobe. Takrat na internetu ni bilo na voljo veliko virov. Precej sem iskal, da bi ugotovil, da so se te varovalke nanašale na posebne bite znotraj mikrokrmilnika AVR. Ti deli so kot majhna stikala znotraj AVR-ja in z vklopom / izklopom lahko vklopimo / izklopimo nekatere posebne lastnosti AVR-ja. Vklop in izklop pomeni nastavitev in ponastavitev.
Ob tej priložnosti bomo razpravljali o vsem, kar je o bitih varovalk v AVR. Za poenostavitev bomo uporabili primer plošče Arduino, v kateri je priljubljen mikrokrmilnik ATmega328P. Tukaj boste izvedeli, kako nastaviti te varovalke za vklop in izklop nekaterih od teh funkcij, kar je v resničnih aplikacijah zelo priročno. Torej, pojdimo naravnost v to.
V prejšnjih objavah smo zgradili veliko projektov mikrokrmilnikov AVR, kot sta modul Interfacing GSM z mikrokrmilnikom AVR in Interfacing HC-05 z mikrokrmilnikom AVR. Ogledate si jih lahko, če želite izvedeti več o teh projektih.
Kaj so varovalke v AVR - podrobna razlaga
Kot smo že omenili, so varovalke v mikrokrmilniku kot majhna stikala, ki jih je mogoče vklopiti in izklopiti, da omogočijo ali onemogočijo različne funkcije mikrokrmilnika AVR. To je del, kjer se pojavi naslednje vprašanje, kako torej nastaviti ali ponastaviti te varovalke? Odgovor na to vprašanje je preprost: to storimo s pomočjo registrov varovalk.
V IC ATmega328P je skupno 19 bitov varovalk in so razdeljeni na tri bajte varovalk. Ti so opredeljeni kot "Razširjeni bajti varovalk", "Bajti z visoko varovalko" in "Bajti z nizkimi varovalkami".
Če pogledate tabelo-27 podatkovnega lista ATmega328 / P Rev: 7810D – AVR – 01/15, lahko izveste vse podrobnosti o bitih varovalk. Toda spodnja slika vam bo dala boljšo predstavo o odseku varovalk v obrazcu.
Zdaj, ko ste se že malo naučili o bitih varovalk, pojdimo skozi podatkovni list in ugotovimo vse potrebne podrobnosti o tem IC.
Razširjeni bit varovalke:
Ko kliknete zavihek Fuse Bits in se pomaknete malo navzdol, boste našli tabelo 27-5: tabela prikazuje "Extended Fuse Byte", splošno znano kot " EFUSE". Spodnja slika prikazuje točno to.
V tej tabeli so le trije uporabni biti, ostali trije pa so rezervirani. Ti trije biti obravnavajo stopnjo zaznavanja Brownout. Kot lahko vidite v opombi, če pogledamo tabelo 28-5, lahko o njej najdemo več podrobnosti.
Kot lahko vidite v zgornji tabeli, imamo tabelo za odkrivanje izpustov. Zaznavanje izpadov je funkcija, ki mikrokrmilnik ponastavi, ko napajalna napetost pade pod določeno raven napetosti. V IC ATmega328P lahko popolnoma onemogočimo zaznavanje izpadov ali pa ga nastavimo na ravni, ki so prikazane v zgornji tabeli.
Bajti z visoko varovalko:
Kot lahko vidite na spodnji sliki, tabela 27-6: v obrazcu prikazuje bitove višjih varovalk IC IC ATmega328P.
Varovalka Visoka ukvarjajo z različnimi nalogami znotraj ATmega328 mikrokrmilnike. V tem poglavju bomo govorili o višjih delih varovalk in njihovem delovanju. Začnimo z bitoma BOOTRST, BOOTSZ0 in BOOTSZ1. Ti trije biti so odgovorni za nastavitev velikosti zagona; velikost zagona se nanaša na količino pomnilnika, rezerviranega za namestitev zagonskega nalagalnika.
Zagonski nalagalnik je posebna programska oprema, ki deluje na vrhu mikrokrmilnika in upravlja različne naloge. Toda v primeru Arduina se zagonski nalagalnik uporablja za nalaganje skice Arduino znotraj mikrokrmilnika. V enem od naših prejšnjih člankov smo vam pokazali, kako zažgite zagonski nalagalnik v ATmega328P z uporabo Arduina. To lahko preverite, če vas tema zanima. Če se vrnemo k naši temi, so nameni drugih bitov v visokem bajtu razmeroma jasni, bit EESAVE je ohraniti pomnilnik EEPROM, medtem ko se izvaja cikel brisanja čipa. Bit WDTON mora omogočiti ali onemogočiti Watchdog Timer.
Watchdog timer je poseben časovnik v ATmega328P IC, ki ima svojo ločeno uro in deluje neodvisno. Če je časovni pas časovnika omogočen, ga morate počistiti v določenem obdobju, sicer bo nadzorni časovnik ponastavil mikrokrmilnik. To je uporabna funkcija, ki je v veliko mikrokrmilnikih, če se procesor zatakne; čuvaj ga bo ponastavil, da prepreči škodo na končni aplikaciji.
Bit DWEN je tu, da omogoči žico za odpravljanje napak; to je pripravljalni protokol, ki je interno vgrajen v njihovo strojno opremo in se uporablja za programiranje in odpravljanje napak procesorjev. Če je ta funkcija omogočena, lahko procesor utripate in odpravljate napake z eno samo žico. Za njegovo uporabo pa boste potrebovali posebno strojno opremo, ki je pripravljena na Atmel.
Preostala dva bita sta tista bitja, ki se jim morate izogniti, razen če natančno veste, kaj počnete. To sta bit RSTDISBL-7 in bit SPIEN-5. RSTDISBL (zunanja ponastavitev onemogočena), kot že ime pove, onemogoča zunanji zatič za ponastavitev strojne opreme, bit SPIEN pa se uporablja za onemogočanje programskega vmesnika SPI. Če onemogočite katerega koli od teh dveh bitov, lahko vaš AVR popolnoma opečete; torej, če jih pustite pri miru, je dobra ideja.
Bajti z nizko varovalko:
Kot lahko vidite na spodnji sliki, tabela 27-7: v obrazcu prikazuje bitove spodnje varovalke vmesnika ATmega328P.
Ta bajt varovalke je odgovoren za nastavitev vira ure in nekaterih drugih parametrov ure znotraj AVR-ja. V tem poglavju bomo izvedeli vse to.
7. bit ali zastavico CKDIV8 lahko nastavite tako, da delite vir ure na 8, kar je zelo priročno, kar morda že veste, če ste sami poskusili programirati AVR. Naslednji bit je bit CKOUT in je 6. bit v bajtu z nizko varovalko. Če ga programirate, bi na PORTB0 mikrokrmilnika izstopil signal notranje ure.
Bit-5 in bit-4 SUT1 in SUT0 nadzorujeta čas zagona mikrokrmilnika. To preprečuje kakršna koli zagonska dejanja, ki se lahko zgodijo ali ne, preden lahko napajalna napetost doseže sprejemljivo minimalno raven napetosti. In zadnji štirje bitni CKSEL0 - 4 se uporabljajo za izbiro ure ure mikrokrmilnika. Spodnja tabela vam omogoča boljše razumevanje teh štirih bitov, ki so odgovorni za nastavitev vira ure. To tabelo lahko najdete v razdelku Vir ure v obrazcu.
Zdaj, preden pridemo še naprej, moram še eno stvar, skozi katero bi moral iti, tabelo za zakasnitev zagona oscilatorja. Z zakasnitvijo zagona se sklicujemo na bita 4 in 5 spodnjega bajta varovalke. Zamude je treba nastaviti glede na pogoj, v katerem bo vezje delovalo, in vrsto oscilatorja, ki ga uporabljate. Privzete vrednosti so nastavljene na počasno naraščajočo moč s 6 urnimi cikli, ko se izvede zaporedje vklopa ali izklopa. Nato sledi še ena zakasnitev 14 urnih ciklov s 65 ms zakasnitve po zagonu.
Fuj! To je bilo veliko informacij za prebavo. Preden nadaljujemo, pa zaključimo ta odsek s kratko opombo.
Opomba:
Če ste si podrobno ogledali podatkovni list, ste zagotovo opazili, da programiranje varovalke pomeni, da ga nastavite na nizko vrednost, tj. 0 (nič), kar je nasprotno od tega, kar običajno naredimo za visoko ali nizko vrata. To morate upoštevati pri konfiguraciji varovalk.
Bit varovalk v Arduinu
V zgornjem poglavju smo veliko govorili o varovalkah, v tem poglavju pa se pogovorimo o tem, kako jih konfigurirati in kako jih zapisati v mikrokrmilnik. Za to bomo potrebovali orodje z imenom Avrdude. To je orodje, ki se lahko uporablja za branje, pisanje in spreminjanje pomnilnika v mikrokrmilnikih AVR. Deluje s SPI in ima dolg seznam podpore za različne vrste programerjev. orodje lahko prenesete s spodnje povezave. Uporabili bomo tudi naš najljubši mikrokrmilnik Arduino.
- Prenesite Avrdude različice 6.3 Windows-ming32
Zdaj, ko imate Avrdude, ga morate izvleči in odpreti ukazno okno v tej mapi. Če jo nameravate uporabljati pozneje, lahko pot mape dodate v odsek spremenljivke okolja Windows. Toda postavil ga bom na namizje in tam odprl ukazno okno. Ko bomo to storili, bomo programator USBasp povezali z računalnikom in se prepričali, da imamo ustrezen gonilnik za programator USBasp. Ko to storimo, smo pripravljeni iti in najprej bomo prebrali privzeto vrednost varovalke. Če želite to narediti, morate zagnati naslednji ukaz.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Če je vse v redu, bo ta ukaz prebral bajte varovalk in jih postavil v tri ločene besedilne datoteke. Spodnja slika vam bo dala boljšo predstavo o postopku.
Kot lahko vidite, je Avrdude prebral bit varovalk na Arduino nano in jih shranil v tri ločene besedilne datoteke. Zdaj smo jih odprli in dobili tri vrednosti; za EFUSE: 0xFD, za HFUSE: 0XDA, za LFUSE: 0xFF. To je bila privzeta vrednost varovalke, ki smo jo dobili za Arduino nano. Zdaj pa pretvorimo te bite v binarne in jih primerjamo s privzeto vrednostjo iz podatkovnega lista. Spodnja tabela prikazuje točno to.
Za udobje so bitji varovalk zapisani v šestnajstiških vrednostih, če pa jih pretvorimo v binarne vrednosti in primerjamo s podatkovnim listom, bomo vedeli, kaj se dogaja. Začnimo z bajtom spodnje varovalke. Kot lahko vidite iz zgornjega niza, je nastavljen na 0XFF in binarna vrednost bi bila 0B11111111.
Primerjava nižjih bajtov varovalk z Arduino:
Bajt z nizko varovalko |
Št. |
Privzeta vrednost v AVR |
Privzeta vrednost Arduino |
CKDIV8 |
7. |
0 (programirano) |
1 (neprogramirano) |
IZDELEK |
6. |
1 (neprogramirano) |
1 (neprogramirano) |
SUT1 |
5. |
1 (neprogramirano) |
1 (neprogramirano) |
SUT0 |
4. |
0 (programirano) |
1 (neprogramirano) |
CKSEL3 |
3. |
0 (programirano) |
1 (neprogramirano) |
CKSEL2 |
2. |
0 (programirano) |
1 (neprogramirano) |
CKSEL1 |
1. |
1 (neprogramirano) |
1 (neprogramirano) |
CKSEL0 |
0 |
0 (programirano) |
1 (neprogramirano) |
Bajt višje varovalke je nastavljen na 0XDA v binarni obliki, ki je 0B11011010.
Višji bajt varovalke v binarni obliki:
Bajt z visoko varovalko |
Št. |
Privzeta vrednost v AVR |
Privzeta vrednost Arduino |
RSTDISBL |
7. |
1 (neprogramirano) |
1 (neprogramirano) |
DWEN |
6. |
1 (neprogramirano) |
1 (neprogramirano) |
ŠPIJEN |
5. |
0 (programirano) |
0 (programirano) |
WDTON |
4. |
1 (neprogramirano) |
1 (neprogramirano) |
EESAVE |
3. |
1 (neprogramirano) |
1 (neprogramirano) |
BOOTSZ1 |
2. |
0 (programirano) |
0 (programirano) |
BOOTSZ0 |
1. |
0 (programirano) |
1 (neprogramirano) |
BOOTRST |
0 |
1 (neprogramirano) |
0 (programirano)) |
Nastavitev za razširjeni bajt varovalke je nastavljena na 0XFD, v binarni obliki je 0B11111101.
Razširjeni bajt varovalke v binarni obliki:
Razširjeni bajt varovalke |
Št. |
Privzeta vrednost v AVR |
Privzeta vrednost Arduino |
- |
7. |
1. |
1. |
- |
6. |
1. |
1. |
- |
5. |
1. |
1. |
- |
4. |
1. |
1. |
- |
3. |
1. |
1. |
BODLEVEL2 |
2. |
1 (neprogramirano) |
1 (neprogramirano) |
BODLEVEL1 |
1. |
1 (neprogramirano) |
0 (programirano) |
BODLEVEL0 |
0 |
1 (neprogramirano) |
1 (neprogramirano) |
Zdaj je to konec tega odseka. Od zdaj smo že veliko izvedeli o mikrokrmilniku AVR in njegovih delih varovalk. Torej, zaključimo ta članek tako, da preizkusimo svojo teorijo s spreminjanjem in eksperimentiranjem nekaterih bitov varovalk v Arduino Nano.
Komponente, potrebne za preizkus varovalk v AVR
V zgornjem delu smo veliko govorili o varovalkah. Za nadaljevanje članka pa potrebujemo nekaj komponent strojne opreme in nekaj programskih orodij. V tem poglavju bomo govorili o teh. Seznam zahtevanih komponent s slikami je prikazan spodaj.
- Breadboard - 1
- Arduino Nano - 1
- Programer AVR USBasp - 1
- Kabel USB - 1
- Pretvornik AVR 10-pinski v 6- pinski - 1
- Avrdude (programsko orodje za programiranje AVR)
- LED - 1
- 330R upor - 1
- Jumper kabli
Shema za preizkušanje bitov varovalk v AVR
Namestitev preizkusa strojne opreme je prikazana spodaj v tej nastavitvi. Arduino Nano smo na računalnik povezali s kablom USB, na računalnik pa smo priključili tudi programator USBasp. Cilj tega članka je programirati bite varovalk v AVR. Iz tega razloga smo programator USBasp povezali z Arduinom. Spodnja slika vam bo dala boljšo predstavo o nastavitvi.
Testiranje varovalk v AVR
Nastavitev testiranja je prikazana spodaj. Kot lahko vidite, smo Arduino in programer USBasp povezali na USB mojega prenosnika.
Zdaj pa odprimo Arduino IDE in naložimo osnovno skico utripanja. Vsebina osnovne skice utripanja je samoumevna, zato o njej nisem navedel podrobnosti.
V videu boste videli, da led na zatiču št. 13 utripa, kot bi moral. Zdaj nastavimo nastavitve varovalk in jih nastavimo na privzete vrednosti. In kot smo že videli v obrazcu; EFUSE je 0XFF; HFUSE je D9; LFUSE je: 62. Zdaj pa ga konfigurirajte z Avrdude, utripajte in poglejte, kaj se bo zgodilo. Koda, ki jo bomo uporabljali, je
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Ko to naredim, boste videli, da bo LED dioda utripala izredno počasi, ker smo izračunali in programirali vrednost za uro 16Mhz, po izgorevanju varovalk pa gre le še za 1MHz RC oscilator. Zato LED utripa tako počasi. Zdaj pa poskusimo še enkrat naložiti skico. Videli bomo, da Arduino prikaže napako in koda ni naložena. Ker smo s spreminjanjem varovalk pokvarili tudi nastavitve zagonskega nalagalnika. To lahko vidite na spodnji sliki.
Da bi to popravili in Arduino postavili nazaj, kot je bilo prej, moramo samo speči zagonski nalagalnik za Arduino. Če želite to narediti, pojdite na Orodja -> Programer - USBasp , in ko to storimo, lahko spet odpremo orodja in kliknemo možnost zapisovanja zagonskega nalagalnika. To bo spet zažgalo založnik zalog na vašem Arduinu in vse se bo vrnilo v prejšnje stanje.
Ko se je zagonski nalagalnik vrnil nazaj v Arduino, se je vrnil v prvotno stanje in zadnja slika prikazuje utripajočo LED-lučko po ponovnem zagonu zagonskega nalagalnika.
In to pomeni konec tega članka. Upam, da vam je bil članek všeč in ste se naučili kaj novega. Če imate kakršna koli vprašanja v zvezi s člankom, ne oklevajte in spodaj dajte komentar.