česky english Vítejte, dnes je pátek 29. březen 2024

V jednoduchosti je síla : seznamte se s Atmel ATtiny10

DPS 6/2012 | Články
Autor: Ondřej Pavelka

Známý výrobce (nejen) mikrokontrolérů ATMEL uvedl v polovině roku 2009 na trh řadu velmi zajímavých miniaturních mikrokontrolérů řady ATtiny 4/5/9/10.

Všechny se vyrábějí v provedení pouzdra SOT-23, mají 6 vývodů a rozměry zhruba 2×3 mm. Tato čtveřice sourozenců se liší velikostí paměti RAM a přítomností AD převodníku. Nejvýkonnější provedení je ATtiny10, na který se v článku podíváme podrobněji a vyzkoušíme si jednoduchou aplikaci v assembleru AVRstudia dodávaného firmou ATMEL zdarma v rámci podpory prodeje.

Nenechme se zmást miniaturními rozměry – cca 2×3 mm – celého mikrokontroléru. Uvnitř tohoto miniaturního pouzdra tepe výkonné jádro se spoustou standardních i rozšířených periférií.

Vlastnosti mikrokontrolérů ATtiny řady 4/5/9/10

Pojďme tedy představit rodinu mikrokontrolérů ATtiny řady 4/5/9/10:

  • Vysoce výkonný, 8bitový mikrokontrolér AVR s nízkým příkonem
  • Rozšířená RISC technologie – 54 instrukcí, 16×8 bitových registrů, 12 MIPS
  • Paměť pro program a data až 1 kB, 32 byte SRAM
  • Vestavěné periférie a rozhraní mikrokontroléru
  • podpora QTouch pro dotykové kapacitní senzory
  • 1× 16bitový časovač/čítač, předdělička, 2 PWM kanály
  • programovatelný Watchdog časovač s odděleným vestavěným oscilátorem
  • 4kanálový, 8bitový ADC (určité typy)
  • vestavěný analogový komparátor
  • 4 programovatelné I/O vývody
  • Provozní napájení 1,8 až 5,5 V
  • Programovací napětí 5 V
  • Rozsahy hodinových kmitočtů:
    • 0–4 MHz @ 1,8–5,5 V
    • 0–8 MHz @ 2,7–5,5 V
    • 0–12 MHz @ 4,5–5,5 V

V jednoduchosti je síla seznamte se s Atmel ATtiny10 - tabulka 1

Pouzdro a popis pinů

V jednoduchosti je síla seznamte se s Atmel ATtiny10 1

Obr. 1

Mikrokontroléry ATtiny 4/5/9/10 se vyrábějí ve dvou provedeních pouzder SOT23-6 (cca 2×3 mm) a UDFN s osmi pady (cca 2×2×0,6 mm) – obr. 1. Z hlediska rozměrů a pájitelnosti je pro běžné bastlíře přijatelnější „větší“ pouzdro SOT23-6.

Popis pinů:

VCC, GND – napájecí napětí pro mikrokontrolér.

Port B (PB3..PB0) – jedná se o 4bitovou obousměrnou (vstupně/výstupní) bránu (port) s interními pull-up rezistory, individuálně nastavitelnými pro každý I/O bit.

RESET – vstup pro RESET signál. Nízká úroveň signálu trvající déle než 2 000 ns pro 1,8 V, popř. 400 ns při napájení 5 V generuje reset mikrokontroléru, pokud běží hodiny a zároveň tento pin není pro signál RESET zakázán. Z důvodu malého počtu I/O pinů lze totiž tomuto pinu přiřadit alternativní funkci – buď vstup přerušení PCINT3, nebo vstup AD převodníku na kanálu 3 (ADC3).

Popis registrů mikrokontroléru ATtiny 4/5/9/10

Mikrokontroléry používají 16 registrů číslovaných od R16 po R31. Toto je z důvodu „kompatibility“ s AVR rodinou mikrokontrolérů, která používá 32 registrů.

Registry R26 až R31 mohou tvořit tzv. párové registry – R26+R27 je tzv. X registr, R28+R29 je tzv. Y registr a R30+R31 je tzv. Z registr. Tyto 16bitové registry jsou používány pro nepřímé adresování paměťového prostoru (rozsah adres paměti programu je 1 024 adres).

Rozdíly mezi ATtiny 4/5/9/10

Existují 4 provedení tohoto mikrokontroléru s rozdíly ve vybavení a velikosti interní RAM paměti :

V jednoduchosti je síla seznamte se s Atmel ATtiny10 - tabulka 2

Běžně k dostání je nejvýkonnější typ – ATtiny10, v ceně cca 30 Kč. Na něm lze zkoušet bez omezení a případně po odladění a optimalizaci programu použít typ s menší výbavou.

Zdroje hodinového signálu a volba pracovního taktu mikrokontroléru

Další zajímavou vlastností, kterou zmíním, je volba hodinového kmitočtu. V podstatě existují tři možné zdroje kmitočtu pro řízení mikrokontroléru:

  • vnější (externí) hodinový signál CLKI (přivedený na vývod CLKI = PB1),
  • „watchdog“ oscilátor,
  • interní kalibrovaný RC oscilátor (standardní volba pro RESET u mikrokontroléru).

Rozsah kmitočtů přivedených z vnějšího zdroje je nejširší – od 0 do 12 MHz v závislosti na připojeném napájecím napětí. Pro 12 MHz je třeba napájet mikrokontrolér minimálně 4,5 V. Interní „watchdog“ oscilátor má pevný nastavený kmitočet 125 kHz a interní kalibrovaný RC oscilátor má pevný kmitočet 8 MHz. Pokud provedeme reset mikrokontroléru, nastaví se automaticky tento interní RC oscilátor, ovšem pozor, také se nastaví automaticky hodnota pro předděličku kmitočtu 8. Jádro mikrokontroléru je tedy bezprostředně po resetu taktováno na 1 MHz.

Na rozdíl od ostatních AVR mikrokontrolérů, kdy se hodnota předděličky (CLOCK PRESCALER) nastavuje pomocí tzv. fuse, tzn. pouze při programování a samotný mikrokontrolér tuto hodnotu nemůže měnit, ATtiny4/5/9/10 má možnost tuto předděličku nastavovat programově, a tedy např. volit pro různé části programu různé prováděcí hodinové kmitočty, a tím určovat spotřebu celého mikrokontroléru. Pokud tedy víme, že čekáme na stisk klávesy, můžeme kmitočet snížit a optimalizovat tak spotřebu celého zařízení. K tomuto nastavení se používá tzv. CLKPSR – Clock Prescale Register – tabulka 1. Vidíme, že můžeme dělící poměr kmitočtu hodinového signálu nastavit od 1 (bez dělení) až po 256.

Ale to není vše. Za běhu programu můžeme měnit i zdroj hodinového kmitočtu pomocí tzv. CLKMSR – Clock Main Settings Register. Každá změna těchto parametrů však vyžaduje instrukce v délce 4 bytů, což nás může limitovat v příliš časté změně těchto parametrů.

Programování pomocí Tiny Programming Interface (TPI)

V jednoduchosti je síla seznamte se s Atmel ATtiny10 2

Obr. 2

Na rozdíl od známého ISP interface v provedení SPI u mikrokontrolérů ATMega a ATtiny vyšší třídy, tedy MISO, MOSI, CLK a RESET signálu, používají tyto miniaturní mikrokontroléry tzv. TPI rozhraní neboli Tiny Programming Interface – obr. 2. Tento programovací interface sestává ze dvou vrstev – přístupové a fyzické vrstvy. Programování se provádí pomocí fyzické vrstvy používající signály (z pohledu mikrokontroléru):

  • _RESET – vstupní signál povolující TPI rozhraní,
  • TPICLK – vstupní signál hodinového kmitočtu,
  • TPIDATA – vstupně/výstupní signál pro komunikaci programátor <-> mikrokontrolér.

Programátor s TPI rozhraním si můžete sestavit sami, nebo zvolit hotové řešení. Velmi oblíbený je např. programátor AVRPROG mkII [1] – obr. 3. Tento programátor pracuje pod operačními systémy Windows XP/Vista/7 a s rozhraním USB a nejen že podporuje standardní rozhraní ISP pro většinu mikrokontrolérů ATMega a ATtiny, ale umí také zmiňované TPI rozhraní a jako třešničku PDI neboli Programming and Debugging Interface, což je rozhraní používané u ATXmega mikrokontrolérů. Samozřejmě spolupracuje se všemi verzemi AVRstudia, takže máte v ruce univerzální programátor pro všechny mikrokontroléry vyráběné firmou ATMEL.

V jednoduchosti je síla seznamte se s Atmel ATtiny10 3

Obr. 3

Ukázková aplikace – blikáme s LED

Co budeme pro pokus potřebovat:

  • programátor, např. AVRPROG mkII, zakoupíte zde [1], cena 699 Kč s DPH (čtenáři DPS-AZ mají po uvedení kódu "DPSAZ612" do poznámky poštovné zdarma při platbě předem),
  • mikrokontrolér ATtiny10, např. [2] cena cca 40 Kč s DPH,
  • LED, rezistor 1,5 kΩ,
  • univerzální plošný spoj, lze i „vrabčí hnízdo” nebo nepájivé kontaktní pole,
  • pro „bastlířský" komfort: destičku pro redukci pouzdra z SOT23-6 na DIL rozteč, tedy 2,54 mm – obr. 4.

V jednoduchosti je síla seznamte se s Atmel ATtiny10 4

Obr. 4

Napájecí napětí pro konstrukci zajišťuje přímo zmiňovaný a doporučovaný programátor. Schéma zapojení je uvedeno na obr. 5, výsledná konstrukce může vypadat jako na obr. 6. Zapojení je tak minimalistické, že minimalističtější být ani nemůže. Obvod ATtiny10 je připojen trvale k programátoru AVRPROG mkII [1], který zajišťuje napájení celého obvodu +5 V ze sběrnice USB. To je totiž výrobcem předepsané napájecí napětí pro programování, i když vlastní obvod dokáže pracovat při napětí mnohem nižším. Proudový odběr je zanedbatelný a pro ovládání LED se používá jediný „nevyužitý" volný pin mikrokontroléru, a to druhý bit brány (portu) B neboli PB2. Z důvodu spotřeby jsem volil nízkopříkonovou LED s proudem cca 2 mA (předřadný rezistor je 1,5 kΩ). Výhodou je, že mikrokontrolér je trvale připojen k programátoru, takže jakékoli změny v programu můžeme ihned vyzkoušet. Není třeba ani řešit oddělovací rezistory pro připojení TPI rozhraní. Mikrokontrolér taktéž obsahuje interní rezistor propojující RESET pin s VCC, můžeme tak upustit i od obligátního externího pull-up rezistoru mezi napájením a RESETem.

V jednoduchosti je síla seznamte se s Atmel ATtiny10 5

Obr. 5

Destička je připojena k programátoru přes plochý vodič a samořezný 10pinový konektor známý z rozhraní ISP10, tentokráte však s jiným rozmístěním vývodů – obr. 7, daným programátorem AVRPROG mkII.

V jednoduchosti je síla seznamte se s Atmel ATtiny10 - ZK 1

V jednoduchosti je síla seznamte se s Atmel ATtiny10 6

Obr. 6

Program pro tuto konstrukci je velice jednoduchý a je napsán přímo v asembleru, abych se vyhnul používání vyšších programovacích jazyků a zároveň si vyzkoušel nástroj AVRstudio. Když už budeme blikat, tak aspoň nějak sofistikovaně. Zkusíme si pohrát s čekacím podprogramem a vyzkoušíme práci s více soubory při překladu. Testovací program pro blikání se skládá ze dvou částí – z obslužného programu a podprogramu pro přesné časování.

V jednoduchosti je síla seznamte se s Atmel ATtiny10 7

Obr. 7

Zastavíme se u jedné, pro AVR mikrokontroléry nezvyklé věci, a tou je volba zdroje hodinového kmitočtu a volba předděličky – v programu po návěští RESET. Z důvodu ochrany určitých systémových registrů není možné do nich zapsat hodnotu přímo, ale zápisu musí předcházet zápis do registru CCP (Configuration Change Protection Register) na adrese 0×3C. Jediná smysluplná hodnota, kterou můžeme zapsat, je 0×D8 – podle katalogového listu. Po zápisu této hodnoty do CCP registru se během 4 strojových cyklů musí provést zápis do libovolného chráněného registru. V našem případě se jedná o zápis do CLKMSR (viz úvod) registru na adrese 0×37 s následujícím významem jednotlivých konfiguračních bitů:

V jednoduchosti je síla seznamte se s Atmel ATtiny10 - tabulka 3

V našem případě se do registru CLKMSR zapisuje hodnota 0×00, tedy volba interního kalibrovaného 8MHz RC oscilátoru.

Další nastavení se týká interní děličky kmitočtu. Ta se nastavuje registrem CLKPSR (viz úvod) na adrese 0×36. Významy jednotlivých konfiguračních bitů jsou shrnuty v tabulce 1 (viz strana 9).

Důležitou informací, kterou je potřeba vědět, je, že po resetu procesoru jsou vždy použity tzv. defaultní hodnoty, což je interní RC oscilátor 8 MHz a dělící poměr 8. Pokud po resetu nebo během programu neprovedeme žádný zápis, běží mikrokontrolér ATtiny10 s výsledným systémovým taktem 1 MHz (8 MHz / 8). Oba zmiňované registry – CLKMSR a CLKPSR jsou chráněné proti zápisu, proto musí tomuto zápisu předcházet zápis do registru CCP.

V jednoduchosti je síla seznamte se s Atmel ATtiny10 - ZK 2

Zajímavější je kód pro čekání stanovené doby v souboru wait.asm. Původní kód napsal pan Radoslaw Kwiecien – kontakty jsou uvedeny v záhlaví. Jednalo se o univerzální kód použitelný jak pro řadu ATmega, tak ATtiny. Až do doby, než byly na trh uvedeny mikrokontroléry ATtiny 4/5/9/10. Na rozdíl od předchozích typů mikrokontrolérů tyto neumí strojovou instrukci „sbiw", která dokáže odečítat číselnou konstantu od 16bitového registru vzniklého spojením dvou 8bitových registrů. ATtiny10 sice dokáže dva 8bitové registry sdružovat do 16bitového, neumí však zmiňovanou instrukci odečtu.Hlavní část podprogramu WaitMiliseconds uschová registry r16 a r17 na zásobník, protože je bude měnit, a rozdělí čekací interval na milisekundové části pomocí 500 μs čekacích smyček, které se opakují tolikrát, jakou hodnotu obsahoval registr r16 před vstupem do podprogramu. Pokud program rozebereme na strojové cykly, bude výsledné čekání o malinko delší, protože např. návratová instrukce RET trvá nějaký čas, skoky v hlavní smyčce ke každé 1 ms přičtou jeden strojový takt apod. V rámci milisekund se ale jedná o poměrně přesné časování. Musíme si uvědomit, že toto bude pracovat za předpokladu, že nevyužijeme žádné přerušení v mikrokontroléru. Jinak by se doba nekontrolovaně prodloužila. Řešením je při volání čekací smyčky zakazovat přerušení.

Článek v krátkosti představil čtenářům nejmenší mikrokontrolér z rodiny ATtiny včetně jednoduché ukázky v assembleru. Většina překladačů jazyka C je na tento mikrokontrolér již připravena, nic proto nebrání zájemcům využít i vyšších jazyků, pravděpodobně ale jen pro nejvyšší verzi s 1 024 adresami v paměti programu.