Jaký je princip fungování AVR?
V této práci sestavíme jednoduché zařízení vhodné pro následnou laboratorní práci na bázi mikrokontroléru ATmega8 (nebo jiného kompatibilního pinoutu). Toto zařízení do jisté míry navazuje na design desek Arduino Uno a Arduino Nano, které lze také použít k provádění práce v této sekci.
Před začátkem
Pro zařízení potřebujeme:
- mikrokontrolér ATmega8 (nebo kompatibilní pinout) v pouzdře DIP (nebo na odpovídající desce adaptéru) s nainstalovaným zavaděčem Optiboot nakonfigurovaným na zvolenou taktovací frekvenci procesoru (7.3728 MHz) a rychlost přenosu dat (115200 bit⁄s); pokud máte samostatný programátor, můžete použít mikrokontrolér bez bootloaderu;
- USB-asynchronní portový adaptér (založený na PL2303-HX, CP2101 nebo jiný);
- (Není nutné) napájení (3 ÷ 5 V, s přihlédnutím k provoznímu napětí použitého adaptéru asynchronního portu), nejlépe s možností nastavení proudového limitu cca 10 mA; Potřebné napájení lze zpravidla získat ze sběrnice USB, pro kterou jsou na adaptérech a vývojových deskách umístěny příslušné piny;
- prkénko na krájení;
- dva odpory (asi 100 kΩ a 250 Ω; ⅛ W), křemenný rezonátor na 7.3728 MHz, tři kondenzátory (jeden – asi 100 nF, dva – každý asi 22 pF), LED pro napětí asi 1.5 V, tlačítko – vhodné pro instalaci na panel rozložení; všechny uvedené součástky (až do jmenovitých hodnot) jsou již přítomny v obvodech potřebných pro tuto práci na deskách jako Arduino Uno;
- spojovací vodiče.
Kromě toho budete potřebovat balíček Avrdude pro testování komunikace se zařízením. (Tento balíček můžete nainstalovat na Debian a jeho deriváty příkazem podobným příkazu # apt-get install – avrdude.)
Sestavení zařízení
- Nainstalujme MK na prkénko, první výstup je na pozici E10 (tedy zabírá vertikální řady 10–23.)
- Nainstalujme další prvky na panel rozložení:
- křemenný rezonátor 7.3728 MHz – mezi piny 9 a 10 MK;
- dva kondenzátory 22 pF – mezi piny 8–9 a 8–10 MK;
- odpor 100 kΩ – mezi pozicí A10 (pin 1 MK; Reset signál) a sběrnicí + UA. P.;
- 100 nF kondenzátor – mezi D8 a D10;
- tlačítko – A3–A5 a LED – F3–F5;
- Rezistor 250 Ω – mezi J3 a „společným“.
- Udělejme následující připojení k součástem sestaveného obvodu:
- „obecné“ – J16, E3, je žádoucí, aby — B17 (kolíky 8, 22 MK; „společné“);
- + UA. P. – A16;
- B5–B10 (pin 1 MK; Resetovací signál);
- I5–I19 (pin 19 MK; PB5.)
Počáteční kontrola výkonu
- Zkontrolujeme, zda jsou připojení provedena správně. Konkrétně lze k napájecím svorkám připojit při dodržení polarity multimetr pracující v režimu měření úbytku napětí na pn přechodu. Očekávaný výsledek měření je cca 1.5V.
- Připojte napájecí zdroj k zařízení;
- při použití laboratorního napájecího zdroje — nastavte napětí na 3 ÷ 5 V (avšak s ohledem na provozní napětí použitého adaptéru asynchronního portu) a maximální proud asi 10 mA;
- pokud neexistuje žádný jiný způsob, jak omezit proud (zejména při napájení z USB adaptéru), můžete jej připojit k přerušení vodiče UA. P. rezistor o jmenovité hodnotě asi 56 Ω;
- Při prvním připojení má smysl měřit proud protékající zařízením; očekávané hodnoty nejsou větší než asi 1 mA.
- Resetujte zařízení stisknutím tlačítka. V tomto případě by měla kontrolka LED třikrát zablikat (ve výchozím nastavení v parametrech sestavení Optiboot.)
USB připojení
- Připojíme adaptér USB-asynchronního portu k základní desce:
- „společné“ s „společné“;
- TxD s A11 a RxD s A12 (piny 2, 3 MK; RxD, TxD);
- (Není nutné) DTR nebo RTS – s A8;
- pouze při příjmu napájení z modulu – 3.3 V (nebo 5 V) výstup modulu se sběrnicí + UA. P. panel rozložení.
- Pojďme zkontrolovat schopnost komunikovat s bootloaderem Optiboot pomocí Avrdude, takto:
$ avrdude -P /dev/ttyUSB1 -c arduino -b 115200 -p atmega8 -U flash:r:flash.hex:i avrdude: Zařízení AVR inicializováno a připraveno přijmout instrukce Čtení | ################################################## | 100 % 0.00 s avrdude: Signatura zařízení = 0x1e9307 avrdude: čtení paměti flash: Čtení | ################################################## | 100 % 1.02 s avrdude: zápis výstupního souboru "flash.hex" avrdude: bezpečný režim: Pojistky OK avrdude hotovo. Děkuju. $
- zadejte příkaz výše, aniž bych to dokončil stisknutím ⏎ Enter ;
- stiskněte tlačítko reset zařízení;
- uvolněte tlačítko reset a okamžitě ukončete příkaz avrdude stisknutím ⏎Enter.
- Stránka byla naposledy upravena 9. května 2014 v 16:22.
- Text je dostupný pod licencí Creative Commons Attribution-Share Alike (CC BY-SA); V některých případech mohou platit další podmínky. Podrobnosti viz Podmínky použití.
- Zásady ochrany osobních údajů
- O Wikiverzitě
- dementi
- Kodex chování
- Vývojáři
- Statistika
- Prohlášení o souborech cookie
- mobilní verze
Mikrokontroléry řady AVR jsou jedny z nejrychlejších MCU na světě. Tato řada je zastoupena velmi širokou škálou modelů, od malých 8pinových zařízení až po mikroobvody ve 40pinových pouzdrech. Příkazový systém je maximálně jednotný, proto po napsání programu pro jeden model jej můžete s minimálními úpravami přenést na jiný model.
Všechny mikrokontroléry AVR mají programovou paměť FLASH, která umožňuje jejich mnohonásobné přeprogramování. Na rozdíl například od mikrokontrolérů PIC, které provádějí jeden příkaz ve 4 hodinových cyklech, MCU řady AVR provádějí většinu příkazů v jednom hodinovém cyklu.
Vývojové prostředí AVR Studio, distribuovaný zdarma, má uživatelsky přívětivé rozhraní a umožňuje vyvíjet programy jak v jazyce symbolických instrukcí, tak v jazyce C.
Náš projekt využívá mikrokontrolér AT90S1200. Toto je 8bitové Mikrokontrolér RIZIKO, mající 15 pinů pro vstup/výstup dat. Účel čepů a jejich umístění na těle MK je na Obr. 1.

Obr.1. Přiřazení pinů mikrokontroléru AT90S1200
I/O registry
I/O registry jsou číslovány od 0 (00 USD) do 63 (3F USD). Každý z těchto registrů plní specifické funkce (například počítá běh času, ovládá sériový port atd.). Hlavní I/O registry jsou PortB, PortD, PinB, PinD. Tyto registry představují porty B a D.
Pokud port funguje jako vstup, pak binární číslo obsažené v registrech PinB a PinD indikuje stav pinů. V tomto případě bude pin PB0 odpovídat bitu 0 registru PinB atd. Pokud je napětí na kolíku vysoké, pak se odpovídající bit nastaví na 1 a naopak.
Pro nastavení pracovního režimu výstupu mikrokontroléru (dále jen MK) je potřeba určit, které piny budou fungovat jako vstupy a které jako výstupy. To se provádí pomocí I/O registrů DDRB a DDRD. Každý bit těchto registrů odpovídá jednomu z pinů MK. Například bit 4 registru DDRB odpovídá pinu PB4. Nastavení odpovídajícího bitu v registru DDRx na 1 z něj udělá výstup a vymazání bitu na 0 z něj udělá vstup.
Pokud nakonfigurujeme pin jako vstup, pak můžeme určit, zda bude k tomuto pinu připojen interní pull-up rezistor nebo ne. Chcete-li povolit vstup pull-up, musíte nastavit odpovídající bit portu na 1 PortX. Co se týče výstupů, je nutné určit, v jakém stavu budou při startu programu. K tomu se nastaví nebo vynulují odpovídající bity portu PortX.
Přerušuje
- Pin Low Interrupt INT0 (PD2)
- Přerušení náběžné hrany na čepu INT0
- Přerušení sestupné hrany na kolíku INT0
- Přerušení časovače/počítadla T/C0
- Přerušení výstupu analogového komparátoru
Když dojde k přerušení, program skočí na jednu z adres umístěných na začátku programové paměti. Společně tyto adresy tvoří tabulku vektorů přerušení. Pro model 1200 je tabulka vektorů přerušení uvedena v tabulce 1.1.
Tabulka 1.1. Tabulka vektorů přerušení AT90S1200 MCU
| Typ přerušení | Adresa skoku příkazu |
| Zapnutí/resetování | 0 × 0000 |
| Externí přerušení na INT0 | 0 × 0001 |
| Přerušení přetečení T/C0 | 0 × 0002 |
| Přerušení z analogového komparátoru | 0 × 0003 |
Je možné povolit jednotlivá přerušení pomocí různých registrů. Bit povolení externího přerušení je 6. bit I/O registru GIMSK (General Interrupt Mask – obecný registr masky přerušení). Nastavení tohoto bitu povolí přerušení, resetování je zakáže. Bit povolení přerušení přetečení T/C0 je prvním bitem I/O registru TIMSK (Maska přerušení časovače – registr masky přerušení časovače/čítače). Nejvyšší prioritu má však „globální povolení“ přerušení. Jedná se o speciální přepínač, který deaktivuje všechna přerušení, když jsou zakázána, a povoluje jednotlivě povolená přerušení, když jsou povolena. Tento přepínač je bit 1 registru příznaků. SREG.
Externí přerušení INT0 lze nakonfigurovat tak, aby nastalo, když nastane jedna ze tří podmínek, v závislosti na stavu bitů 0 a 1 I/O registru. MCUCR (Tento registr také ukládá nastavení režimu spánku). Závislost typu přerušení na stavu zadaných bitů je uvedena v tabulce 1.2.
Tabulka 1.2. Typy přerušení INT0
| MCUCR | Stav přerušení | |
| Bit 1 | Bit 0 | |
| Pin INT0 má nízké napětí | ||
| 1 | Nesprávná konfigurace | |
| 1 | Na kolíku INT0 je sestupná hrana | |
| 1 | 1 | Na kolíku INT0 je stoupající hrana |
Když dojde k přerušení, bit povolení globálního přerušení se automaticky vymaže. To zabrání dalším přerušením, když je spuštěna obsluha přerušení. Při návratu z přerušení je obvykle potřeba přerušení znovu povolit. K tomu existuje speciální příkaz RETI.
Každé přerušení má svůj vlastní příznak přerušení. Tento příznak (bit) je nastaven na 1 v okamžiku, kdy má dojít k přerušení, i když jsou přerušení globálně zakázána a není volána odpovídající obsluha přerušení. Pokud jsou přerušení zakázána, přečtením tohoto příznaku můžete určit, zda došlo k přerušení. Tento příznak zůstává nastaven, dokud není vymazán. Příznaky přerušení se resetují nastavením na 1.
Příznak přerušení přetečení T/C0 je první bit I/O registru TIFR (registr příznaků přerušení časovače – registr příznaků přerušení časovače) a příznak externího přerušení je 6. bit I/O registru DÁREK (General Interrupt Flag Register – obecný registr příznaků přerušení).
Podprogramy
V modelu 1200 nemůžete vytvořit více než 3 podprogramy vnořené do sebe, protože tento MK má 3úrovňový hardwarový zásobník. Podprogram je volán příkazem RCALL. Chcete-li se vrátit z podprogramu, použijte příkaz RET.