\ Rozbor AVR

Rozbor AVR
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 13ATtiny 2313ATmega 8ATmega 128
f20 MHz20 MHz16 MHz16 MHz
Flash1 kB2 kB8 kB128 kB
SRAM64 B128 B1024 B4096 B
EEPROM64 B128 B512 B4096 B
PouzdroDIL 8
SOIC 8
DIL 20
SOIC 20
TQFP 32
DIL 28
TQFP 64
Hodinyexterní 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.
OSCCALperioda [us]tikůfrekvence oscilátoru [MHz]odchylka od 12MHz
121193,593230611,9159-0,70%
122190,811230612,0852+0,71%
123186,226230612,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 MHznevyrábí se. Pro ATtiny13 dosažitelné RC oscilátorem.
12,0 MHzběžné, HC49U/S, HC49U/S. Pro ATtiny13 dosažitelné RC oscilátorem.
13,5 MHznevyrábí se
15,0 MHzběžné, HC49U/S, HC49U
16,5 MHznevyrábí se
18,0 MHzpouze pouzdro HC49U/S
19,5 MHznevyrá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.
12MHzinterní RC oscilátorVý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.
15MHzkrystalATmega128, 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.
18MHzkrystalATtiny2313 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,5MHzprogramovatelný oscilátorATtiny2313, 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:
  1. programovou paměť flash
  2. paměť EEPROM
  3. 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.hDefinice portů, registrů a maker pro ATmega128
atmega8.hDefinice portů a registrů pro ATmega8
attiny13.hDefinice portů a registrů pro ATtiny13