- Čo sú poistky v AVR - podrobné vysvetlenie
- Poistkové bity v Arduine
- Súčasti potrebné na testovanie poistiek v AVR
- Schéma testovania poistkových bitov v AVR
- Testovanie poistiek v AVR
V tomto návode si povieme niečo o poistkách. Keď som bol na vysokej škole a učil som sa o všetkých skvelých veciach v elektronike, počul som prvýkrát výraz fuse v AVR, moja prvotná myšlienka na túto tému bola, ach! vo vnútri AVR je niečo, čo vybuchne, ak som urobil niečo zle. V tom čase nebolo na internete k dispozícii veľa zdrojov, cez ktoré by bolo možné prejsť. Dosť som hľadal, aby som zistil, že tieto poistky odkazovali na niektoré špeciálne bity vo vnútri mikrokontroléra AVR. Tieto bity sú ako malé prepínače vo vnútri AVR a ich zapnutím / vypnutím môžeme zapnúť / vypnúť niektoré špeciálne funkcie AVR. Zapnutie a vypnutie znamená nastavenie a resetovanie.
Využime túto príležitosť a prediskutujeme všetko, čo sa tu týka bitov Fuse v AVR. Pre jednoduchosť si vezmeme príklad dosky Arduino, ktorá obsahuje populárny mikrokontrolér ATmega328P. Tu sa naučíte, ako nastaviť tieto poistky na zapínanie a vypínanie niektorých z týchto funkcií, čo sa v praktických aplikáciách naozaj hodí. Poďme teda na to.
V našich predchádzajúcich príspevkoch sme vytvorili veľa projektov mikrokontrolérov AVR, ako je modul GSM Interfacing s mikrokontrolérom AVR a Interfacing HC-05 s mikrokontrolérom AVR. Môžete sa na ne pozrieť, ak sa chcete o týchto projektoch dozvedieť viac.
Čo sú poistky v AVR - podrobné vysvetlenie
Ako sme už diskutovali, poistky v mikrokontroléri sú ako malé spínače, ktoré je možné zapnúť a vypnúť, čím sa aktivujú a deaktivujú rôzne funkcie v mikrokontroléri AVR. Toto je časť, kde vyvstáva naša ďalšia otázka, tak ako nastavíme alebo zresetujeme tieto poistky? Odpoveď na túto otázku je jednoduchá: Robíme to pomocou poistkových registrov.
V ATmega328P IC je celkovo 19 poistkových bitov a sú rozdelené do troch poistkových bajtov. Definujú sa ako „rozšírené bajty poistky“, „bajt vysokej poistky“ a „bajt nízkej poistky“.
Ak sa pozriete na tabuľku 27 údajového listu ATmega328 / P, Rev: 7810D – AVR – 01/15, môžete zistiť všetky podrobnosti o poistkových bitoch. Nasledujúci obrázok vám ale poskytne lepšiu predstavu o sekcii poistkových bitov v údajovom liste.
Teraz, keď ste sa dozvedeli niečo o poistkových bitoch, poďme si prejsť údajovým listom a zistíme všetky potrebné podrobnosti o tomto IC.
Predĺžené poistkové bity:
Akonáhle kliknete na kartu Fuse Bits a trochu sa posuniete nadol, nájdete Tabuľku 27-5: ktorá zobrazuje tabuľku pre „Extended Fuse Byte“ všeobecne známu ako „ EFUSE“. Obrázok nižšie to presne ukazuje.
V tejto tabuľke sú iba tri použiteľné bity a ďalšie tri sú rezervované. Tieto tri bity sa zaoberajú úrovňou detekcie prehliadania. Ako vidíte v poznámke, ak sa pozrieme na tabuľku 28-5, môžeme o nej nájsť ďalšie podrobnosti.
Ako vidíte v tabuľke vyššie, máme tu tabuľku pre detekciu prehliadania. Detekcia brownoutu je funkcia, ktorá resetuje mikrokontrolér, keď napájacie napätie klesne pod určitú úroveň napätia. V ATmega328P IC môžeme detekciu prehliadania úplne deaktivovať alebo ju môžeme nastaviť na úrovne, ktoré sú uvedené v tabuľke vyššie.
Bajty s vysokou poistkou:
Ako vidíte na obrázku nižšie, tabuľka 27-6: v údajovom liste zobrazuje bity vyššej poistky ATmega328P IC.
Poistka High vysporiadať s rôznymi úlohami vnútri ATMEGA328 mikroprocesora. V tejto časti si povieme o horných poistkových bitoch a ich fungovaní. Začnime s bitmi BOOTRST, BOOTSZ0 a BOOTSZ1. Tieto tri bity sú zodpovedné za nastavenie veľkosti bootovania; veľkosť bootovania sa týka množstva pamäte vyhradenej pre inštaláciu bootloaderu.
Zavádzač je špeciálny softvér, ktorý sa spúšťa nad mikrokontrolérom a spravuje rôzne úlohy. Ale v prípade Arduina sa bootloader používa na nahranie náčrtu Arduino do mikrokontroléra. V jednom z našich predchádzajúcich článkov sme si ukázali, ako vypáliť bootloader v ATmega328P pomocou Arduina. To si môžete pozrieť, ak vás téma zaujíma. Keď sa vrátime k našej téme, účely ostatných bitov vo vysokom bajte sú objasnené primerane jasne, bitom EESAVE je zachovanie pamäte EEPROM počas vykonávania cyklu mazania čipu. Bit WDTON slúži na povolenie alebo zakázanie časovača Watchdog.
Watchdog timer je špeciálny časovač v ATmega328P IC, ktorý má svoje samostatné hodiny a beží nezávisle. Ak je povolený časovač strážneho psa, musíte ho s určitou periódou vyčistiť, inak časovač strážneho psa resetuje mikrokontrolér. Toto je užitočná funkcia, ktorá sa vyskytuje v mnohých mikrokontroléroch, ak sa procesor zasekne; strážny pes ho vynuluje, aby nedošlo k poškodeniu koncovej aplikácie.
Bit DWEN je tu, aby umožnil ladiaci drôt; toto je prípravný protokol, ktorý je interne zabudovaný do ich hardvéru a ktorý sa používa na programovanie a ladenie procesorov. Ak je táto funkcia povolená, môžete procesor bleskovať a ladiť pomocou jedného pripojeného kábla. Na jeho použitie však budete potrebovať špeciálny hardvér, ktorý je prípravný na Atmel.
Zvyšné dva bity sú tie bity, ktorým sa musíte vyhnúť, pokiaľ presne neviete, čo robíte. Jedná sa o RSTDISBL bit-7 a SPIEN bit-5. RSTDISBL (External Reset Disable), ako naznačuje názov, deaktivuje externý hardvérový resetovací pin a bit SPIEN sa používa na deaktiváciu programovacieho rozhrania SPI. Zakázanie ktoréhokoľvek z týchto dvoch bitov môže úplne zamurovať váš AVR; takže nechať ich osamote je dobrý nápad.
Bajty s nízkou poistkou:
Ako vidíte na obrázku nižšie, tabuľka 27-7: v údajovom liste zobrazuje bity spodnej poistky IC ATmega328P.
Tento poistkový bajt je zodpovedný za nastavenie zdroja hodín a niektorých ďalších parametrov hodín vo vnútri AVR. V tejto časti sa o tom všetkom dozvieme.
Siedmy bit alebo príznak CKDIV8 je možné nastaviť tak, aby rozdelil zdroj hodín na 8, je to veľmi užitočné, čo už možno viete, ak ste si programovanie AVR vyskúšali sami. Ďalším bitom je bit CKOUT a je to šiesty bit v Low Fuse Byte. Jeho programovaním by sa vyslal interný hodinový signál na PORTB0 mikrokontroléra.
Bity-5 a bit-4 SUT1 a SUT0 riadia čas nábehu mikrokontroléra. Tým sa zabráni akýmkoľvek činnostiam pri spustení, ktoré sa môžu alebo nemusia uskutočniť predtým, ako napájacie napätie dosiahne prijateľnú minimálnu prahovú hladinu. A posledné štyri CKSEL0 - 4 bity sa používajú na výber hodinového zdroja mikrokontroléra. Nasledujúca tabuľka poskytuje lepšie pochopenie týchto štyroch bitov, ktoré sú zodpovedné za nastavenie zdroja hodín. Túto tabuľku nájdete v časti s údajmi o zdroji hodín.
Teraz, než sa dostaneme ďalej, je ešte jedna vec, ktorú by som mal prejsť, je tabuľka oneskorenia spustenia oscilátora. Pod oneskorením spustenia rozumieme bity 4 a 5 dolného bajtu poistky. Oneskorenia je potrebné nastaviť v závislosti od podmienok, v ktorých bude obvod pracovať, a od typu použitého oscilátora. Predvolené hodnoty sú nastavené na pomalé zvyšovanie výkonu so 6 hodinovými cyklami, keď sa vykonáva postup zapínania alebo vypínania. Ďalej je tu ďalšie oneskorenie 14 hodinových cyklov s oneskorením 65 Ms po štarte.
Uf! To bolo veľa informácií na strávenie. Ale skôr ako budeme pokračovať, ukončime túto časť krátkou poznámkou.
Poznámka:
Ak ste si pozorne prezerali údajový list, určite ste si všimli, že programovanie poistkového bitu znamená jeho nastavenie na nízku hodnotu, tj na 0 (nula), čo je opak toho, čo vo všeobecnosti robíme, aby bol port vysoký alebo nízky. Musíte to mať na pamäti pri konfigurácii poistiek.
Poistkové bity v Arduine
Veľa sme hovorili o poistkách v predchádzajúcej časti, ale v tejto časti si povieme, ako ich nakonfigurovať a ako ich zapísať do mikrokontroléra. Na to budeme potrebovať nástroj s názvom Avrdude. Je to nástroj, ktorý možno použiť na čítanie, zápis a úpravu pamäte v mikrokontroléroch AVR. Pracuje s SPI a má dlhý zoznam podpory pre rôzne typy programátorov. nástroj si môžete stiahnuť z odkazu uvedeného nižšie. Budeme tiež používať náš obľúbený mikrokontrolér Arduino.
- Stiahnite si Avrdude verzia 6.3 Windows-ming32
Teraz, keď máte Avrdude, musíte ho rozbaliť a otvoriť príkazové okno v tomto priečinku. Ak to plánujete neskôr použiť, môžete do časti s premennými prostredia systému Windows pridať cestu k priečinku. Ale dám si ho na plochu a otvorím tam príkazové okno. Keď to urobíme, pripojíme programátor USBasp k nášmu počítaču a zabezpečíme, aby sme mali správny ovládač pre náš programátor USBasp. Keď to urobíme, je dobré ísť a najskôr si prečítame predvolenú hodnotu poistky. Aby ste to dosiahli, musíte spustiť nasledujúci príkaz.
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
Ak je všetko v poriadku, tento príkaz načíta poistkové bajty a vloží ich do troch samostatných textových súborov. Obrázok nižšie vám poskytne lepšiu predstavu o procese.
Ako vidíte, Avrdude prečítal poistkové bity na Arduino nano a uložil ich do troch samostatných textových súborov. Teraz sme ich otvorili a dostali sme tri hodnoty; pre EFUSE: 0xFD, pre HFUSE: 0XDA, pre LFUSE: 0xFF. Toto bola predvolená hodnota poistky, ktorú sme dostali pre Arduino nano. Teraz preveďme tieto bity na binárne a porovnajme ich predvolenú hodnotu z údajového listu. Nasledujúca tabuľka to ukazuje presne.
Pre uľahčenie sú poistkové bity zapísané v hexadecimálnych hodnotách, ale ak ich prevedieme na binárne hodnoty a porovnáme s údajovým listom, budeme vedieť, čo sa deje. Začnime bajtom spodnej poistky. Ako vidíte z vyššie uvedeného reťazca, je nastavený na 0XFF a binárna hodnota by bola 0B11111111.
Porovnanie bajtov dolnej poistky na sklade s Arduino:
Bajt s nízkou poistkou |
Bit č. |
Predvolená hodnota v AVR |
Predvolená hodnota Arduina |
CKDIV8 |
7 |
0 (naprogramované) |
1 (neprogramované) |
CKOUT |
6 |
1 (neprogramované) |
1 (neprogramované) |
SUT1 |
5 |
1 (neprogramované) |
1 (neprogramované) |
SUT0 |
4 |
0 (naprogramované) |
1 (neprogramované) |
CKSEL3 |
3 |
0 (naprogramované) |
1 (neprogramované) |
CKSEL2 |
2 |
0 (naprogramované) |
1 (neprogramované) |
CKSEL1 |
1 |
1 (neprogramované) |
1 (neprogramované) |
CKSEL0 |
0 |
0 (naprogramované) |
1 (neprogramované) |
Bajt vyššej poistky je nastavený na 0XDA v binárnom formáte, ktorý je 0B11011010.
Bajt vyššej poistky v binárnom formáte:
Bajt vysokej poistky |
Bit č. |
Predvolená hodnota v AVR |
Predvolená hodnota Arduina |
RSTDISBL |
7 |
1 (neprogramované) |
1 (neprogramované) |
DWEN |
6 |
1 (neprogramované) |
1 (neprogramované) |
SPIEN |
5 |
0 (naprogramované) |
0 (naprogramované) |
WDTON |
4 |
1 (neprogramované) |
1 (neprogramované) |
EESAVE |
3 |
1 (neprogramované) |
1 (neprogramované) |
BOOTSZ1 |
2 |
0 (naprogramované) |
0 (naprogramované) |
BOOTSZ0 |
1 |
0 (naprogramované) |
1 (neprogramované) |
BOOTRST |
0 |
1 (neprogramované) |
0 (naprogramované)) |
Nastavenie pre Extended Fuse Byte je nastavené na 0XFD, v binárnom formáte je to 0B11111101.
Rozšírená bajtová poistka v binárnom formáte:
Rozšírená bajtová poistka |
Bit č. |
Predvolená hodnota v AVR |
Predvolená hodnota Arduina |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (neprogramované) |
1 (neprogramované) |
BODLEVEL1 |
1 |
1 (neprogramované) |
0 (naprogramované) |
BODLEVEL0 |
0 |
1 (neprogramované) |
1 (neprogramované) |
Týmto sa končí táto časť. Odteraz sme sa naučili veľa informácií o mikrokontroléri AVR a jeho poistkových bitoch. Zhrňme teda tento článok tak, že otestujeme našu teóriu zmenou a experimentovaním s niektorými z poistkových bitov v Arduino Nano.
Súčasti potrebné na testovanie poistiek v AVR
Veľa sme hovorili o poistkách vo vyššie uvedenej časti. Aby sme ale v článku pokračovali ďalej, potrebujeme nejaké hardvérové komponenty a softvérové nástroje. V tejto časti si povieme niečo o tých. Zoznam požadovaných komponentov s obrázkami je uvedený nižšie.
- Nepárové pole - 1
- Arduino Nano - 1
- Programátor USBasp AVR - 1
- Kábel USB - 1
- AVR 10-pinový na 6-pinový prevodník - 1
- Avrdude (softvérový nástroj na programovanie AVR)
- LED - 1
- Rezistor 330R - 1
- Prepojovacie káble
Schéma testovania poistkových bitov v AVR
Nastavenie testovania hardvéru je zobrazené nižšie v tomto nastavení. Pripojili sme Arduino Nano k počítaču pomocou kábla USB a k počítaču sme pripojili aj programátor USBasp. Cieľom tohto článku je programovať poistkové bity v AVR. Z tohto dôvodu sme pripojili programátor USBasp k Arduinu. Obrázok nižšie vám poskytne lepšiu predstavu o nastavení.
Testovanie poistiek v AVR
Nastavenie testovania je zobrazené nižšie. Ako vidíte, program Arduino a programátor USBasp sme pripojili k USB portu môjho notebooku.
Teraz otvorme Arduino IDE a nahrajme základný blikajúci náčrt. Obsah základného blikajúceho náčrtu je samozrejmý, preto som o ňom neuviedol žiadne podrobnosti.
Na videu uvidíte, že LED na kolíku č. 13 bliká tak, ako má. Teraz poďme upraviť nastavenie poistky a nastaviť jej predvolené hodnoty. A ako sme už predtým videli v údajovom liste; EFUSE je 0xFF; HFUSE je D9; LFUSE je: 62. Teraz to nakonfigurujme s Avrdude, blesknime a uvidíme, čo sa stane. Kód, ktorý budeme používať, je-
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Akonáhle to urobím, uvidíte, že LED bude blikať extrémne pomaly, pretože sme vypočítali a naprogramovali hodnotu pre 16Mhz hodiny a teraz po spálení poistiek je to iba 1Mhz interný RC oscilátor. Preto LED dióda bliká tak pomaly. Teraz sa pokúsime nahrať náčrt ešte raz. Uvidíme, že Arduino vydá chybu a kód sa nenahrá. Pretože zmenou poistiek sme zmenili aj nastavenia bootloaderu. Môžete to vidieť na nasledujúcom obrázku.
Aby sme to napravili a aby sme Arduino vrátili späť do pôvodného stavu, musíme pre Arduino iba znova vypáliť bootloader. Ak to chcete urobiť, prejdite do ponuky Nástroje -> Programátor - USBasp a akonáhle to urobíme, môžeme znova prejsť na nástroje a môžeme kliknúť na možnosť vypáliť bootloader. Týmto sa opäť vypáli bootloader na vašom Arduine a všetko sa vráti späť do pôvodného stavu.
Po tom, čo bootloader prebleskol späť do Arduina, sa vrátil do pôvodného stavu a posledný obrázok ukazuje blikajúcu LED po opätovnom vypálení bootloaderu.
A týmto sa končí tento článok. Dúfam, že sa vám článok páčil a dozvedeli ste sa niečo nové. Ak máte akékoľvek otázky týkajúce sa článku, neváhajte uviesť komentár nižšie.