Mikrokontroléry AVR jsou vyráběny firmou Atmel. Mezi jejich základní vlastnosti patří:
- 8-bitová RISC architektura
- 130 instrukcí (120 pro ATtiny), většina jednotaktových
- rozsah frekvencí od 32kHz do 20MHz
- oddělená programová a datová paměť
- programová paměť flash přeprogramovatelná za běhu, 10 000 mazacích/zápisových cyklů
- operační paměť SRAM, dvoutaktový přístup
- integrovaná EEPROM, 100 000 mazacích/zápisových cyklů
- 32 pracovních registrů
- napájení 1.8 - 5.5V, nízká spotřeba, režim spánku
- množství digitálních i analogových periferií
- jednoduché programování, software zdarma
AVR mikrokontroléry jsou škálovatelné, tedy je možné pořídit typy s redukovaným jádrem a omezeným počtem I/O funkcí (ATtiny) nebo plným jádrem a množstvím I/O (ATmega) či dokonce i s možností připojit externí RAM. Mezi nejmenší typ patří typy ATtiny15, 13, 12, mezi nejobsáhlejší ATmega128, ATmega2561.
Instrukční sada AVR procesorů obsahuje většinou instrukce, které trvají jeden hodinový takt. Přístupy do SRAM a skoky trvají dva takty.
Provedeme porovnání čtyřech typů mikrokontrolérů, které by bylo vhodné použít pro realizaci USB zařízení. Vzhledem k tomu, že tyto mikrokontroléry nepodporují hardwarově USB, nebudou hlavním měřítkem dovednosti periferií, ale pracovní frekvence procesoru a velikosti pamětí.
| ATtiny 13 | ATtiny 2313 | ATmega 8 | ATmega 128 |
f | 20 MHz | 20 MHz | 16 MHz | 16 MHz |
Flash | 1 kB | 2 kB | 8 kB | 128 kB |
SRAM | 64 B | 128 B | 1024 B | 4096 B |
EEPROM | 64 B | 128 B | 512 B | 4096 B |
Pouzdro | DIL 8 SOIC 8 | DIL 20 SOIC 20 | TQFP 32 DIL 28 | TQFP 64 |
Hodiny | externí vstup RC oscilátor | krystal RC oscilátor externí vstup | krystal RC oscilátor externí vstup | krystal RC oscilátor externí vstup |
 | Porovnání velikostí pouzder |
|  | Porovnání s USB konektorem |
|
Zdroje hodinového signálu
RC oscilátor
Kvůli minimalizaci počtu externích součástek nabízejí AVR mikrokontroléry možnost generovat hodinový signál vestavěným laditelným RC oscilátorem. Protože oscilátor není kalibrovaný, ale pouze laditelný, je nutné provést přesné měření frekvence. Program pro měření musí umět měnit hodnotu registru OSCCAL na základě stisku tlačítek. Jeho výstupem pak bude periodický signál o přesně dlouhém počtu taktů, který může na svém konci sériově vypsat hodnotu registru OSCCAL a jinak vypisovat střídající se nuly a jedničky. Takový signál pak lze zaznamenat kalibrovaným osciloskopem a pomocí kurzorů určit periodu signálu. Vydělením periody počtem taktů získáme trvání jednoho taktu. Pro procesor ATtiny13 s teplotou 22°C platí tabulka 1.
OSCCAL | perioda [us] | tiků | frekvence oscilátoru [MHz] | odchylka od 12MHz |
121 | 193,593 | 2306 | 11,9159 | -0,70% |
122 | 190,811 | 2306 | 12,0852 | +0,71% |
123 | 186,226 | 2306 | 12,38 | +3,17% |
Tabulka 1.: Frekvence RC oscilátoru v závislosti na registru OSCCAL
Frekvence 12MHz je osminásobkem základního signálového taktu 1,5Mb/s. USB specifikace stanovuje přesnost oscilátoru pro low-speed zařízení 15000ppm (1,5%), což je velice velkorysá hodnota. Není sice vyloučeno, že teplotní drift nebo kolísání napájecího napětí nepovedou na chybné odeslání či chybné přijetí paketu, avšak protokol disponuje opravnými prostředky, které by ojedinělé chyby měly eliminovat.
Je nutné si uvědomit, že frekvence 12MHz odpovídá 8 instrukcím na jeden přijatý/odeslaný bit. Tento počet není bohužel dostatečný na to, aby byla v reálném čase provedena všechna dekódování a proto jediné, co lze stihnout, je deserializace kompletně připravených dat. Jedinou výhodou RC oscilátoru je nulový požadavek na externí součástky a z toho vyplývající možnost udělat USB zařízení, které se celé vejde do konektoru (typ A). Spolehlivost časování je však na hranici únosnosti.
Krystal
Krystal poskytuje přesné časování obvodu s přibližnou tolerancí 30ppm. Jedná se o symetrickou součástku, která v zapojení s invertorem a dvěma kondenzátory (obr 1.) C1 a C2 (od 12pF do 22pF) tvoří zpětnovazební filtr se jmenovitou rezonanční frekvencí. V extrémních případech se rezonátor nepodaří rozkmitat. Krystaly se běžně dodávají ve dvou pouzdrech - HC49U (vysoké) a HC49U/S (nízké). Pro naši úlohu bychom mohli mít zájem o řadu hodnot, které jsou celočíselným násobkem 1,5MHz, avšak značná část těchto hodnot se nevyrábí (tabulka 2).
10,5 MHz | nevyrábí se. Pro ATtiny13 dosažitelné RC oscilátorem. |
12,0 MHz | běžné, HC49U/S, HC49U/S. Pro ATtiny13 dosažitelné RC oscilátorem. |
13,5 MHz | nevyrábí se |
15,0 MHz | běžné, HC49U/S, HC49U |
16,5 MHz | nevyrábí se |
18,0 MHz | pouze pouzdro HC49U/S |
19,5 MHz | nevyrábí se |
 | Obr. 1 - zapojení krystalu |
Krystalový oscilátor - generátor
Generátor je součástka obsahující řízený oscilátor se zesilovačem. Jeho výstupem je TTL signál o jmenovité frekvenci. Napájecí napětí je většinou 5V. V pouzdru DIL14 s přesností 100ppm je dodávána podobná řada, jako u krystalů. Pouzdro DIL14 je však natolik velké, že jej pro tuto úlohu můžeme úplně vyloučit. Existují typy krystalových oscilátorů, které jsou programovatelné a dodávají se v povrchově montovatelných pouzdrech. Nabídku těchto oscilátorů (SG8002) má na svých stránkách firma Spezial Electronic. Cenově jsou programovatelné oscilátory dostupné - stojí od 120 do 200 Kč. Velikost pouzdra je pro nejmenší typ 3,2 x 2,5 mm a lze jej umístit i do omezeného prostoru USB konektoru. Jmenovitá frekvence je plně nastavitelná s přesností 50ppm.
 | Obr. 2 - oscilátor SG8002CE |
Souhrn
Pole působnosti jednotlivých zdrojů hodinového signálu se překrývají. Tam, kde lze použít krystalový oscilátor nemá zřejmě smysl používat krystal, kromě případů, kdy nezáleží na prostoru a hodnota krystalu je běžně dostupná. Přesto si však každý způsob časování najde uplatnění, jak je to shrnuto v tabulce 3.
12MHz | interní RC oscilátor | Výhradně pro případ minimalistického návrhu s ATtiny13 a jednoduchou aplikací. Prostorově nejúspornější. Určitým způsobem je takové zařízení obdivuhodné, protože z nespecifického obvodu využije naprosté maximum. |
15MHz | krystal | ATmega128, ATmega8 mají mezní frekvenci 16MHz a proto s touto frekvencí končí jejich možnosti. Krystal je k dispozici i jako nízký HC49U/S. Při snaze o miniaturizaci může vadit jeho velikost, ale to je vykompenzováno nízkou cenou. |
18MHz | krystal | ATtiny2313 v pouzdře SOIC20 je stejně veliký jako krystal HC49U/S. Řešení s tímto obvodem je mírně jednodušší než s ATmega8 (dva takty navíc), lépe se vyrábí (větší rozteč vývodů), je levnější a součástky lze jednoduše sehnat (18MHz krystal vede pouze Compo, Karlovo náměstí. GES a GME jej skladem nemají.) Pro testování lze pořídit pouzdro DIL20 a obvod konstruovat na kontaktním poli. Je to nejvýkonnější řešení bez použití drahého krystalového oscilátoru. |
19,5MHz | programovatelný oscilátor | ATtiny2313, ale hlavně ATtiny13 se při použití miniaturního oscilátoru dostanou na výkon 13 instrukcí/bit a usnadní návrh řadiče. ATtiny13 může i při své omezené flash paměti vykonávat kódování/dekódování v reálném čase a přitom čerpat výhody malého pouzdra SOIC8. |
Tabulka 3 - nejvhodnější řešení pro různé zdroje hodinového signálu
Programování obvodu
Mikrokontroléry mají tři oddělené oblasti, které lze progamovat:
- programovou paměť flash
- paměť EEPROM
- zámky a pojistky (lock bits and fuses)
Způsobů programování je několik, z nichž nejzajímavější je sériové programování a programování za běhu přes bootloader.
sériové programování - pomocí třívodičového spojení (MISO, MOSI, SCK) se do zařízení synchronně sériově nahrají příkazy a data. Program, který programování na základě HEX souborů obstará je například PonyProg 2.0 firmy Lancos. Hardware nutný k programování je například SI-Prog - velice jednoduchý omezovač úrovní připojitelný k sériovému portu (obr. 3).
bootloader - programové vybavení procesoru sloužící k přijímání dat a programování programové paměti. Je zřejmé, že bootloader může přepisovat pouze oblasti programové paměti, které sám nezabírá. Většinou je pro bootloader vyhrazena horní část paměti s nastavitelným rozsahem. Bootloader může využívat veškeré periferie procesoru k tomu, aby získal kód, který pak nahraje do flash paměti. Pro komunikaci sériovým portem PC je potřeba použít převodník úrovní (obr. 4). Existuje řada volně stažitelných bootloaderů, avšak jejich použití bez předchozí zkušenosti může způsobit komplikace. Bootloadery totiž můžou přesouvat pozici vektorů přerušení, způsobovat prodlevu před spuštěním programu, nastavovat periferie do neočekávaných stavů a jiné. USB zařízení s pevně připojeným pull-up rezistorem musí do určitého času od připojení a zapnutí odpovědět na příchozí pakety. Pokud ale bootloader zdrží start obslužné rutiny, sběrnice bude zařízení považovat za nefunkční a další pokus o navázání komunikace už neprovede.
 | Obr. 3 - SI prog |
 | Obr. 4 - převodník RS232 na TTL |
AVR Studio
Atmel nabízí zdarma ke stažení vývojové prostředí se simulátorem AVR Studio. Umožňuje psaní programů v Assembleru nebo GCC, export strojového kódu, simulaci programu včetně buzení vstupů nebo komunikaci s inteligentními programátory/debuggery (např STK500). Pro naši úlohu je nutná naprostá kontrola nad vykonávaným kódem, proto budeme používat AVR Assembler s preprocesorem.
atmega128.h | Definice portů, registrů a maker pro ATmega128 |
atmega8.h | Definice portů a registrů pro ATmega8 |
attiny13.h | Definice portů a registrů pro ATtiny13 |
|