MIKROKONTROLÉRY Atmel AVR Atmega128



Podobné dokumenty
NÁVOD K OBSLUZE MODULU VIDEO 64 ===============================

Mikrořadiče fy ATMEL

Mikroprocesor Intel 8051

19 Jednočipové mikropočítače

Číslicová technika 3 učební texty (SPŠ Zlín) str.: - 1 -

SRF08 ultrazvukový dálkoměr

Zkouška z předmětu Počítačové systémy

CL232. Převodník RS232 na proudovou smyčku. S galvanickým oddělením, vysokou komunikační rychlostí a se zvýšenou odolností proti rušení

Digitální tlakoměr PM 111

RKM 03 JEDNOTKA ŘÍZENÍ KROKOVÝCH MOTORŮ. Příručka uživatele AUTOMATIZAČNÍ TECHNIKA

Mikromarz. CharGraph. Programovatelný výpočtový měřič fyzikálních veličin. Panel Version. Stručná charakteristika:

Simulátor EZS. Popis zapojení

BEZDRÁTOVÝ PROSTOROVÝ TERMOSTAT

Odpájecí stanice pro SMD. Kontrola teploty, digitální displej, antistatické provedení SP-HA800D

Zařízení má několik částí.

TENZOMETRICKÝ KOMPARÁTOR

8. Struktura údaj na LCD displeji

Elektrická měření 4: 4/ Osciloskop (blokové schéma, činnost bloků, zobrazení průběhu na stínítku )

Obr. 1 Jednokvadrantový proudový regulátor otáček (dioda plní funkci ochrany tranzistoru proti zápornému napětí generovaného vinutím motoru)

I/O modul univerzální rozhraní

GIGAmatic. Tenzometrický přetěžovací převodník. 1. Popis Použití Technické informace Nastavení Popis funkce 6. 6.

Měření základních vlastností OZ

1. LINEÁRNÍ APLIKACE OPERAČNÍCH ZESILOVAČŮ

Osvětlení modelového kolejiště Analog / DCC

HMP Regulátor odběru elektrické energie TX RX COM L N V~ 6x relé 250V/8A + -

Voděodolný tloušťkoměr MG-411. Návod k obsluze

Systém MCS II. Systém MCS II < 29 >

6 až 18V střídavých. Tabulka přednastavených hodnot délky nabíjení a nabíjecích proudů pro některé typy baterií.

účetních informací státu při přenosu účetního záznamu,

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

METODIKA PRO NÁVRH TEPELNÉHO ČERPADLA SYSTÉMU VZDUCH-VODA

48. Pro RC oscilátor na obrázku určete hodnotu R tak, aby kmitočet oscilací byl 200Hz

POPIS VÝROBKU A ZAMÝŠLENÉ POUŽITÍ

Ekvitermní regulátory, prostorová regulace a příslušenství

SC 61 detektor kovů baterie 9V (PP3) dobíjecí NI Mh baterie (volitelné příslušenství) nabíječka (volitelné příslušenství)

Paměti RAM. Paměť RAM.

Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/

SNÍMAČ T3110. Programovatelný snímač teploty, relativní vlhkosti a dalších odvozených vlhkostních veličin s výstupy 4-20 ma.

PCM30U Řízení, dohled, synchronizace

PM9000A. Uživatelský manuál AUTOMATIZAČNÍ TECHNIKA

Obvodová ešení snižujícího m ni e

Návod k obsluze HLSI Myčka nádobí

Uživatelská dokumentace

OVĚŘENÍ ELEKTRICKÉHO ZAŘÍZENÍ STROJŮ NOVĚ UVÁDĚNÝCH DO PROVOZU PODLE ČSN/STN EN Ed. 2

Tlačítkový spínač s regulací svitu pro LED pásky TOL-02

ULTRAZVUKOVÝ DÁLKOMĚR

Převodníky rozhraní RS-485/422 na optický kabel ELO E243, ELO E244, ELO E245. Uživatelský manuál

MODULY ŘADY CFOX ZÁKLADNÍ DOKUMENTACE MODULU C-FC-0024X

Měřič plochy listu Návod k použití

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ MEII MĚŘENÍ ZÁKLADNÍCH EL. VELIČIN

ALLEX FX Programovatelný logický automat. Katalogový list. říjen Programovatelné logické automaty

Karel Johanovský Michal Bílek. Operační paměť

ZAŘÍZENÍ PRO MĚŘENÍ POSUVŮ

NÁVOD K OBSLUZE. Rádiem řízený budík se slunečním modulem. Obj.č.:

Zadání. Založení projektu

EM271 Dvojitý třífázový elektroměr a analyzátor sítě

PocketHome R CENTRÁLNÍ OVLÁDÁNÍ VYTÁPĚNÍ VAŠEHO DOMU KOORDINÁTOR

TECHNICKÁ ZPRÁVA. Rekonstrukce budovy č.p. 2380, ul. Pod Nemocnicí, Louny - PZTS

SNÍMAČ T2114. Programovatelný snímač barometrického tlaku s výstupem 4-20 ma. Návod k použití

Návod k montáži a obsluze RJ 10

Jaroslav Rzepka MERCOS - Boleslavova 4, Ostrava 9, Czech Republic

MOBILNÍ KOMUNIKACE STRUKTURA GSM SÍTĚ

Zvukový modul HLM - 380

Za ízení TouchPad aklávesnice

EDSTAVENÍ ZÁZNAMNÍKU MEg21

Manuál uživatele čipové karty s certifikátem

21. Číslicový měřicí systém se sběrnicí IEEE 488 (základní seznámení)

NÁVOD NA POUŽITÍ INSTAT 8

Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/

- regulátor teploty vratné vody se záznamem teploty

A/D A D/A PŘEVODNÍKY

TERMOSTAT KOLON LCT 5100

Elektrická polarizovaná drenáž EPD160R

Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: jan.skrbek@tul.cz tel.: Konzultace: úterý

NÁHRADA ZASTARALÝCH ROTAČNÍCH A STATICKÝCH STŘÍDAČŮ

Seznámení žáků s pojmem makra, možnosti využití, praktické vytvoření makra.

Sbírka úloh pro elektronickou stavebnici. Stručný popis programovacího jazyka Bascom AVR

Algoritmizace a programování

Digitální panelový měřicí přístroj MDM40

KODÉR PRO 18 ÚČASTNÍKŮ S INTEGROVANOU HLASOVOU JEDNOTKOU 1072/19A

Analýza dějů na rozhraní RS 232 C

Digitální album návod k použití

Dvoukanálový monitor relativního chvění MMS 6110

ZEMNÍ ODPOR ZEMNIČE REZISTIVITA PŮDY

Regulovaný vysokonapěťový zdroj 0 až 30 kv

GMI Generátor minutových impulsů pro řízení podnikových hodin

ZADÁVACÍ DOKUMENTACE

PROCESORY. Typy procesorů

M ení s p ístrojem PU195 v síti s adaptérem PD191.1

SMLOUVA O POSKYTOVÁNÍ SOCIÁLNÍ SLUŽBY č.../2013

Pračka EVOGT 14064D3. Návod k použití

Ltl Acorn Ltl-5210M Series

Záložní zdroj Back-UPS 650 VA 230 V s automatickou regulací napětí AVR (BX650CI)

Jak pracovat s kalkulačním programem HELUZ komín

TECHNICKÁ DATA Nominální napájecí napětí : Rozsah napájecího napětí : Spotřeba proudu při 12 V stejn. :

TRANSOKRAFT TŘÍFÁZOVÝ STŘÍDAČ

HBG 60 ODSAVAČ PAR. Návod k instalaci a obsluze

1. IMPULSNÍ NAPÁJECÍ ZDROJE A STABILIZÁTORY

Opakovač sériového rozhraní RS-485 ELO E123 Pro Profibus Uživatelský manuál

Pokyny k vyplnění Průběžné zprávy

Transkript:

Projekt OP VK CZ.1.07/1.1.07/11.0112 Podpora odborného vzdělávání na středních školách MSK SŠ teleinformatiky Ostrava, p.o. Opavská 1119 708 61 Ostrava - Poruba www.teleinformatika.eu tel.: 596 919 000 e-mail: sekretariat@teleinformatika.eu www.spravnysmer.cz MIKROKONTROLÉRY Atmel AVR Atmega128 Vratislav Pivoňka

Obsah: Střední škola teleinformatiky, Ostrava, p.o. 1 Úvod... 1 2 Mikrokontrolér ATmega 128... 2 2.1 Základní vlastnosti mikrokontroléru... 2 2.2 Porty... 3 2.2.1 Port A... 3 2.2.2 Port B... 4 2.2.3 Port C... 5 2.2.4 Port D... 6 2.2.5 Port E... 7 2.2.6 Port F... 8 2.2.7 Port G... 9 2.2.8 Speciální funkční registr... 10 2.3 Jádro mikrokontroléru... 11 2.4 Aritmeticko logická jednotka... 12 2.5 Registry... 12 2.5.1 Stavový registr... 12 2.5.2 Hlavní registry... 14 2.6 Paměti... 15 2.6.1 Paměť RAM... 15 2.6.2 Paměť EEPROM... 16 2.6.3 Programová paměť Flash... 17 2.7 Hodiny... 18 2.7.1 Kalibrovaný vnitřní RC oscilátor... 19 2.8 Čítače časovače... 20 2.8.1 Módy čítače časovače... 20 2.8.2 Nastavení registrů časovačů... 21 2.9 Obecné přerušení... 24 2.10 Sériové periferní rozhraní SPI... 25 2.11 USART... 26 2.11.1 Nastavení komunikační rychlosti... 27 2.11.2 Nastavení řídících registrů... 27 2.11.3 Multiprocesorová komunikace... 29 2.12 Analogový komparátor... 30 2.13 Analogově digitální převodník... 30 3 Vývojové prostředky... 32 3.1 Základní modul MB-ATmega128... 32 3.1.1 Vlastnosti modulu MB-ATmega128... 33 3.1.2 Stručný popis modulu... 34 3.1.3 Provozní podmínky a parametry... 35 3.1.4 Nastavení a použití... 35 3.2 Modul 8 LED a 8 tlačítek... 36 3.2.1 Vlastnosti modulu 8 LED a 8 tlačítek... 36 3.2.2 Stručný popis modulu... 36 3.2.3 Provozní podmínky a parametry... 37 3.2.4 Použití tlačítek... 37 3.2.5 Řízení LED diod... 37 3.3 Modul LED displej a LCD displej... 38

3.3.1 Vlastnosti modulu LED displej a LCD displej... 38 3.3.2 Stručný popis modulu... 38 3.3.3 Provozní podmínky a parametry... 39 3.3.4 Nastavení a použití... 39 4 Prostředí AVR Studio 4... 40 4.1 Nový projekt... 40 4.2 Tvorba programu... 41 4.3 Tabulka povelů mikrokontroléru... 44 4.4 Zavedení programu do mikrokontroléru... 46 5 Příklady programů v Assembleru... 49 5.1 Program Čítač... 49 5.1.1 Popis programu Čítač... 49 5.1.2 Vývojový diagram programu Čítač... 50 5.1.3 Zdrojový kód programu Čítač... 50 5.2 Program Tlačítka 1... 53 5.2.1 Popis programu Tlačítka 1... 53 5.2.2 Vývojový diagram programu Tlačítka 1... 53 5.2.3 Zdrojový kód programu Tlačítka 1... 53 5.3 Program Tlačítka 2... 56 5.3.1 Popis programu Tlačítka 2... 56 5.3.2 Vývojový diagram programu Tlačítka 2... 57 5.3.3 Zdrojový kód programu Tlačítka 2... 57 5.4 Příklady užitečných podprogramů... 61 5.4.1 Převod HEX na BCD... 61 5.4.2 Dekodér pro sedmisegmentový displej... 62 5.4.3 Generátor sekundových impulzů... 64 6 Programovací jazyk C... 67 6.1 Program Čítač... 67 6.2 Program Tlačítka 1... 68 6.3 Program Tlačítka 2... 70 7 Závěr... 72 8 Použitá literatura... 73

1 Úvod S procesorovou technikou se dnes setkáváme na každém kroku. Mnohdy si to ani neuvědomujeme. Je téměř v každém elektronickém zařízení. Příkladem může být třeba i automatická pračka, kde kromě řízení vlastního chodu pračky váží prádlo a na základě toho pak určuje potřebné množství prášku a vody. Podle čistoty odtokové vody pak určuje potřebný počet máchání a při odstředění si hlídá správné rozložení prádla tak, aby se pračka zbytečně nechvěla. To je jen jeden příklad. Dále se s procesory setkáváme například v mikrovlnné troubě, myčce na nádobí, o automobilech, televizích a mobilních telefonech je zbytečné se zmiňovat. Proto je nutné, aby technici v dnešní době znali, jak jednočipové procesory správněji řečeno mikrokontroléry pracují. V praxi jim to může usnadnit rozhodování třeba při opravách, zda se jedná o programovou nebo obvodovou závadu. V současné době se začínají používat moderní a poměrně složité programovatelné logické obvody, ve kterých si můžeme sestavit i poměrně komplikovaný procesor šitý na míru. To ale již není zaměřením tohoto materiálu. Zde se budu věnovat mikrokontroléru, který vyrábí firma ATMEL. Jeho označení je ATmega 128. Jedná se o moderní obvod, který má v sobě integrovány všechny potřebné komponenty. Tato publikace vznikla hlavně pro potřebu výuky na Střední škole teleinformatiky v Ostravě. Není tedy rozpracována do detailu a některé záležitosti jsou rozebrány pouze okrajově. 1

2 Mikrokontrolér ATmega 128 ATmega 128 je nízkopříkonový osmibitový mikrokontrolér RISC a Harvardské architektury. Většinu instrukcí provádí během jednoho strojového cyklu. Z toho je odvozena rychlost přibližně 1 MIPS při frekvenci hodinového oscilátoru 1 MHz. Mikrokontrolér tak dosahuje dobrého poměru výpočetního výkonu ku elektrickému příkonu. Je vhodný pro mnohostranné použití a má všestrannou programovou podporu. Mikrokontroléry AVR se vyrábějí v různých modifikacích. Nejpoužívanější skupiny jsou ATmega a ATtiny. Zvolený mikrokontrolér patří k těm nejvýkonnějším. 2.1 Základní vlastnosti mikrokontroléru Pokročilá RISC architektura 133 většinou jednocyklových instrukcí 32 osmibitových pracovních registrů + periferní řídící registry plně statický provoz dvoucyklová násobička přímo na čipu Programová a datová paměť 128 kb Flash programová, programovatelná v zařízení 4 kb EEPROM 4 kb statická RAM možnost externí paměti 64 kb programovatelné klíče pro zabezpečení programu Periferie dva 8bitové čítače/časovače s předděličem dva 16bitové čítače/časovače s předděličem reálný čas s odděleným oscilátorem dva 8bitové kanály s pulzně šířkovou modulací (PWM) 6 PWM kanálů s programovatelným rozlišením 2 16 bitů 10bitový AD převodník dvoudrátový sériový interface 2

2 programovatelné sériové porty USART SPI sériový interface Master/Slave programovatelný Watchdog analogový komparátor Specielní doplňky Power-on reset, detektor podpětí kalibrovaný RC oscilátor vnější i vnitřní přerušení 6 módů snížení spotřeby programová změna hodinového kmitočtu možnost Pull-up rezistorů Ostatní 53 programovatelných vstup/výstupů pouzdro 64 vývodů pracovní napětí 4,5 5,5 V hodinová frekvence 0 16 MHz 2.2 Porty Mikrokontrolér disponuje sedmi porty, které ale nejsou plně obsazeny a nejsou všechny obousměrné. Jsou označeny písmeny podle abecedy a jejich vlastnosti jsou následující: 2.2.1 Port A Port A datový registr - PORTA Bit 7 6 5 4 3 2 1 0 PORTA7PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 PORTA Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port A řídící registr - DDRA Bit 7 6 5 4 3 2 1 0 DDA7 DDA6 DDA5 DDA4 DDA3 DDA2 DDA1 DDA0 DDRA Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port A vstupní registr - PINA Bit 7 6 5 4 3 2 1 0 PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0 PINA Čtení/zápis R R R R R R R R Po resetu N/A N/A N/A N/A N/A N/A N/A R/A 3

Port A je vstupně/výstupní port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRA. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTA. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PINA. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Alternativně port A slouží jako adresová a datová sběrnice pro externí paměť. 2.2.2 Port B Port B datový registr - PORTB Bit 7 6 5 4 3 2 1 0 PORTB7PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port B řídící registr - DDRB Bit 7 6 5 4 3 2 1 0 DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port B vstupní registr - PINB Bit 7 6 5 4 3 2 1 0 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB Čtení/zápis R R R R R R R R Po resetu N/A N/A N/A N/A N/A N/A N/A R/A Port B je vstupně/výstupní port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným 4

odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRB. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTB. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PINB. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Alternativní funkce portu B je složitější. Bity 0 3 slouží pro sériový periferní interface (SPI), bity 4 7 jako možné výstupy časovačů, případně PWM výstupy. Detailněji jsou tyto možnosti rozebrány v příslušných kapitolách. 2.2.3 Port C Port C datový registr - PORTC Bit 7 6 5 4 3 2 1 0 PORTC7PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 PORTC Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port C řídící registr - DDRC Bit 7 6 5 4 3 2 1 0 DDC7 DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0 DDRC Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port C vstupní registr - PINC Bit 7 6 5 4 3 2 1 0 PINC7 PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 PINC Čtení/zápis R R R R R R R R Po resetu N/A N/A N/A N/A N/A N/A N/A R/A Port C je vstupně/výstupní port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným 5

odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRC. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTC. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PINC. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Alternativní funkce portu C je výstup horního adresového bajtu pro externí paměť 2.2.4 Port D Port D datový registr - PORTD Bit 7 6 5 4 3 2 1 0 PORTD7PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 PORTD Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port D řídící registr - DDRD Bit 7 6 5 4 3 2 1 0 DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 DDRD Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port D vstupní registr - PIND Bit 7 6 5 4 3 2 1 0 PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 PIND Čtení/zápis R R R R R R R R Po resetu N/A N/A N/A N/A N/A N/A N/A R/A Port D je vstupně/výstupní port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. 6

Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRD. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTD. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PIND. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země, nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Alternativních funkcí portu D je více. Bity 0 až 3 představují buď vstupy externího přerušení, nebo bity 0 a 1 představují vstupy SCL a SDA pro dvoudrátový sériový interface, bity 2 a 3 představují RxD a TxD pro USART1. Bit 4 představuje záchyt pro časovač 1, bit 5 externí hodiny pro USART1, bit 6 a 7 pak zdroj pro časovač 1 a 2. 2.2.5 Port E Port E datový registr - PORTE Bit 7 6 5 4 3 2 1 0 PORTE7 PORTE6 PORTE5 PORTE4 PORTE3 PORTE2 PORTE1 PORTE0 PORTE Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port E řídící registr - DDRE Bit 7 6 5 4 3 2 1 0 DDE7 DDE6 DDE5 DDE4 DDE3 DDE2 DDE1 DDE0 DDRE Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port E vstupní registr - PINE Bit 7 6 5 4 3 2 1 0 PINE7 PINE6 PINE5 PINE4 PINE3 PINE2 PINE1 PINE0 PINE Čtení/zápis R R R R R R R R Po resetu N/A N/A N/A N/A N/A N/A N/A R/A Port E je vstupně/výstupní port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným 7

odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRE. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTE. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PINE. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země, nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Alternativní funkce jsou pro bit 0 programovací vstup nebo RxD USATR0. Bit 1 je programovací výstup nebo TxD USART0. Bit 2 představuje pozitivní vstup pro analogový komparátor nebo vstup/výstup externích hodin pro USART0. Bit 3 je negativní vstup analogového komparátoru nebo PWM výstup časovače 3. Bity 4 až 7 jsou vstupy externího přerušení 4 až 7 nebo vstupy/výstupy časovače 3. 2.2.6 Port F Port F datový registr - PORTF Bit 7 6 5 4 3 2 1 0 PORTF7 PORTF6 PORTF5 PORTF4 PORTF3 PORTF2 PORTF1 PORTF0 PORTF Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port F řídící registr - DDRF Bit 7 6 5 4 3 2 1 0 DDF7 DDF6 DDF5 DDF4 DDF3 DDF2 DDF1 DDF0 DDRF Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port F vstupní registr - PINF Bit 7 6 5 4 3 2 1 0 PINF7 PINF6 PINF5 PINF4 PINF3 PINF2 PINF1 PINF0 PINF Čtení/zápis R R R R R R R R Po resetu N/A N/A N/A N/A N/A N/A N/A R/A Port F je vstupně/výstupní port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní 8

tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRF. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTF. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PINF. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země, nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Alternativní funkce jsou pro bity 0 až 7 multiplexované vstupy analogově digitálního převodníku. Jako další alternativa je pro bity 4 až 7 spolupráce s JTAG. 2.2.7 Port G Port G datový registr - PORTG Bit 7 6 5 4 3 2 1 0 --- --- --- PORTG4 PORTG3 PORTG2 PORTG1 PORTG0 PORTG Čtení/zápis R R R R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port G řídící registr - DDRG Bit 7 6 5 4 3 2 1 0 --- --- --- DDG4 DDG3 DDG2 DDG1 DDG0 DDRG Čtení/zápis R R R R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Port G vstupní registr - PING Bit 7 6 5 4 3 2 1 0 --- --- --- PING4 PING3 PING2 PING1 PING0 PING Čtení/zápis R R R R R R R R Po resetu 0 0 0 N/A N/A N/A N/A R/A Port G je vstupně/výstupní pětibitový port s vnitřními Pull-up rezistory. Výstup portu je symetrický, je aktivně spínán při obou výstupních úrovních (1;0). Výstupní tranzistory jsou dimenzovány tak, že mohou spínat LED zobrazovače s ochranným 9

odporem. Maximálně možný odebíraný proud z výstupu je 20 ma. Po resetu je uveden do třetího stavu. Zda je port nastaven jako vstupní nebo výstupní určujeme registrem DDRx, kde x má hodnotu dle písmenka, které označuje příslušný port v našem případě DDRG. Můžeme nastavit každý pin samostatně jako vstupní nebo výstupní. Má-li odpovídající bit hodnotu 1, je nastaven jako výstupní. Má-li hodnotu 0, je nastaven jako vstupní. Výstup portu ovládáme registrem PORTx, v tomto případě PORTG. Do registru můžeme zapisovat výstupní hodnotu, výstupní hodnotu můžeme i zpětně přečíst. Je-li port nastaven jako vstupní, pak tímto registrem aktivujeme Pull-up rezistory. K tomu musí být nastaven bit PUD v registru SFIOR. Při nastavení portu jako vstupní používáme registr PINx, zde PING. Tento registr slouží pouze ke čtení a nelze do něho zapisovat. Vstup je částečně ochráněn proti napěťovým špičkám pomocí diod, které nežádoucí napětí svedou buď do země, nebo na napájecí napětí. Maximální povolený proud do vstupu je 2 ma. Port G se automaticky uvede do třetího stavu, pokud jsou zastaveny hodiny procesoru. Alternativní funkcí pro bity 0 až 2 je spolupráce s externí pamětí (signály RD, RW, ALE) a pro bity 3 a 4 připojení krystalu pro časovač 0. 2.2.8 Speciální funkční registr Funkční registr pro nastavení IO - SFIOR Bit 7 6 5 4 3 2 1 0 TMS --- --- --- ACME PUD PSR0 PSR321 SFIOR Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Tento registr slouží k nastavení specielních funkcí. Jednotlivé bity mají následující funkce: TMS synchronizační mód časovačů v našich úlohách jej nebudeme používat. Musí být nastaven na hodnotu 0, aby časovače pracovaly spojitě. ACME analogový multiplexor nastavuje činnost analogového multiplexoru pro AD převodník a vstup analogového komparátoru. 10

PUD aktivace Pull-up rezistorů pokud je bit nastaven na 0, mohou být dle nastavení příslušného výstupního registru Pull-up rezistory aktivní. Je-li tento bit nastaven na 1, jsou všechny Pull-up rezistory neaktivní bez ohledu na nastavení výstupního registru příslušného portu. PRS0 a PRS321 spolupracují s bitem TMS. Pokud bit TMS je nulován, tyto bity se automaticky nastaví na nulu. 2.3 Jádro mikrokontroléru Hlavním úkolem jádra mikrokontroléru je provádět správně programové instrukce, obsluhovat paměť, periferie i všechna dostupná přerušení. Tento Obr. 1 Blokové schéma architektury AVR mikrokontrolér je typickým představitelem Harvardské struktury s odděleným paměťovým prostorem pro program a pro data. Jeho blokové schéma je na obrázku č. 11

1. Program je uložen v paměti Flash. Jednostupňové zřetězení instrukcí podporuje zpracování instrukčního slova, to je přečtení, interpretace a provedení v jednom strojovém cyklu. Tuto paměť je možno programovat v hotové aplikaci. 2.4 Aritmeticko logická jednotka Aritmeticko logická jednotka je přímo napojena na 32 hlavních pracovních registrů. Veškeré operace mezi registry nebo mezi registrem a hodnotou přímo zadanou programem se provádějí v jednou hodinovém cyklu. Operace ALU jsou rozděleny do tří základních kategorií. Jsou to aritmetické, logické a bitové operace. V této architektuře je implementována hardvérová násobička, která provádí násobení kladných i záporných čísel. 2.5 Registry Registry jsou začleněny do adresového prostoru paměti RAM, která bude popsána dále. Lze k nim tedy přistupovat jako k registrům i jako k obecné paměti RAM. Práce s registry je ale pohodlnější a hlavně rychlejší, protože mají přímý přístup k aritmeticko logické jednotce. 2.5.1 Stavový registr Stavový registr nám udává vlastnosti výsledku operace, kterou provedla aritmeticko logická jednotka. Jednotlivé vlastnosti jsou vyjádřeny prostřednictvím jednotlivých bitů tohoto registru příznaků. Na základě příznaků se provádějí další operace programu, například podmíněné skoky nebo přičtení jednotky v případě přenosu do vyššího řádu z předchozího sčítání. Stavový registr se automaticky neukládá při volání přerušení a neobnovuje se při návratu z přerušení. Proto pokud se v průběhu zpracování přerušení bude stavový registr měnit, je třeba ho na začátku obsluhy přerušení programově uložit a na konci obnovit. Pokud tak neprovedeme, bude docházet k nedefinovatelným programovým chybám. Stavový registr - SREG Bit 7 6 5 4 3 2 1 0 I T H S V N Z C SREG Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 12

Ze stavového registru lze libovolně číst a lze i libovolně zapisovat. Můžeme i jednotlivé příznaky programově měnit. Význam jednotlivých příznaků je následující: I Hlavní příznak povolení přerušení tento bit musí být nastaven, pokud má být přerušení povoleno. Je-li nulový, je přerušení zakázáno. V průběhu programu můžeme přerušení libovolně povolovat i zakazovat. Přerušení se automaticky zakáže na začátku obsluhy přerušení a automaticky se povalí na jeho konci při instrukci RETI. T Odkládací příznak tento bit si můžeme libovolně nastavit v průběhu programu nebo do něho kopírovat jiný příznak. Můžeme i tento příznak zpětně kopírovat do jiného příznaku. Lze provádět i podmíněné skoky. H Příznak polovičního přenosu nastavuje se při aritmetických operacích, pokud počítáme v BCD kódu. Signalizuje, že výsledek je větší než 10 a je nutno provést korekci. S Příznak znaménka vždy vyjadřuje exkluzivní součet mezi příznakem V a příznakem N. V Příznak dvojkového doplňku přeplnění podporuje aritmetické operace s dvojkovým doplňkem záporná čísla. N příznak záporného výsledku signalizuje záporný výsledek aritmeticko logické operace. Z Příznak nulového výsledku nastaví se na hodnotu logické 1, je-li výsledek záporný. Je-li kladný nebo nulový, je nulový. C Příznak přenosu do vyššího řádu nastane-li při operaci přenos do vyššího řádu, je tento příznak nastaven na hodnotu 1. Při další matematické operaci se přičítá k výsledku. 13

2.5.2 Hlavní registry Obr. 2 Struktura registrů Pole registrů je optimalizováno pro práci RISC procesorů typu AVR. Jedná se o část paměti RAM, nad kterou může přímo pracovat aritmeticko logická jednotka. Můžeme říci, že registry jsou rozděleny do tří skupin. První skupina jsou registry s číslem R0 až R15 na adrese $00 až $0F. Do těchto registrů nemůžeme přímo zapisovat konstanty a nemůžeme provádět všechny operace. Lze je použít jako odkládací prostor, jako čítače lze je inkrementovat nebo dekrementovat, rovněž je můžeme použít k porovnávání s registry z druhé skupiny. Druhá skupina jsou registry s číslem R16 až R25 na adrese $10 až $19 a lze s nimi provádět veškeré operace bez omezení. Třetí skupina představuje zvláštní dvojregistry, které je možno použít k 14

nepřímému adresování. Mají číslo R26 až R31 a jsou na adrese $1A až $1F. Skládají se vždy z dvojic osmibitových registrů. Při naplňování musíme přistupovat k dolní a k horní části samostatně. Provádíme-li při práci s pamětí inkrementování nebo dekrementování, je v tomto případě brána dvojice registrů jako celek. Statickou paměť RAM můžeme adresovat pomocí všech tří registrů, programovou paměť Flash pouze pomocí registru Z. 2.6 Paměti Protože procesory AVR jsou harvardské struktury, mají oddělený paměťový prostor pro ukládání dat a pro program. Paměť EEPROM představuje samostatný paměťový prostor, ke kterému není přímý přístup. Tento prostor se ovládá pomocí specielních registrů. Všechny tři prostory začínají adresou nula a jsou lineární. 2.6.1 Paměť RAM Prostor paměti SRAM v sobě zahrnuje oblast registrů, vstupně/výstupních portů a vlastní paměť RAM. Nemůžeme tedy data do paměti ukládat od adresy nula, protože bychom přepisovali obsah registrů. Rozdělení prostoru je ukázáno na obrázku č. 3. Mikrokontrolér může pracovat s touto pamětí ve dvou režimech: - normální mód - kompatibilní mód s ATmega103 My budeme uvažovat pouze mód normální. V tomto případě má vnitřní paměť SRAM kapacitu 4096 bajtů. Je-li tato Obr. 3 Struktura paměti S-RAM kapacita nedostačující, je možno ji rozšířit pomocí externí paměti. Připojení externí paměti k mikrokontroléru povolíme nastavením bitu SRE v MCUCR registru. K paměti pak přistupujeme stejnými povely jako k interní paměti. Je třeba si uvědomit, že se k paměti přistupuje pomocí rozšiřujících funkcí portů. Proto jsou přístupové doby pro zápis a pro čtení dat z externí paměti dvojnásobné. 15

Pro adresování vnitřní i externí paměti můžeme použít X, Y a Z registry, kde můžeme využít možnosti inkrementace nebo dekrementace registru před přístupem a nebo po přístupu k paměti. 2.6.2 Paměť EEPROM Mikrokontrolér ATmega 128 má v sobě zabudovány 4 kb paměti typu EEPROM. Ta tvoří samostatný datový prostor a není dostupná jednoduchými povely přes datovou sběrnici. Přistupuje se k ní prostřednictvím adresového, datového a řídícího registru. Adresový registr je dvoubajtový, ostatní jednobajtové. V řídicím registru jednotlivé bity mají následující význam: EERIE povolení přerušení připravenost paměti generuje přerušení, pokud byl cyklus zápisu ukončen. Možno použít pro vícebajtový zápis do paměti. EEMWE hlavní povolení zápisu do paměti před nastavením bitu EEWE musí být nastaven tento bit. Je automaticky nulován po čtyřech taktech. Pokud není nastaven, zápis se neprovede. EEWE zápis do paměti EEPROM před tímto nastavením musí být uložena adresa a data v příslušných registrech a nastaven bit EEMWE. Testováním tohoto bitu zjistíme, jestli byl předchozí zápis ukončen. EERE čteni paměti EEPROM nastavením bitu na log. 1 provádíme čtení paměti. Platná adresa již musí být v registru EEAR. V tom okamžiku je procesor na 4 takty zastaven. 16

V následujících příkladech si ukážeme, jakým způsobem je možno do paměti EEPROM zapisovat nebo z ní číst. Přerušení není použito, využívá se čekací smyčky. Při zápisu do paměti EEPROM může nastat chyba. Například při poklesu napájecího napětí nebudou data správně uložena. Proto se doporučuje po každém zápisu překontrolovat správnost uložených dat. ; **** Podprogram zápisu dat do EEPROM EE_write: sbic ECR, EEWE ; čekání na ukončení předchozího zápisu rjmp EE_write out EEARH, r18 ; uložení registrů r18 a r17 do adresového registru out EEARL, r17 out EEDR, r16 ; uložení dat do datového registru sbi EECR, EEMWE ; povolit zápis do EEPROM sbi EECR, EEWE ; start zápisu do EEPROM ret ; **** Podprogram čtení dat z EEPROM EE_read: sbic EECR, EEWE ; čekání na ukončení (příp.)předchozího zápisu rjmp EE_read out EEARH, r18 ; uložení registrů r18 a r17 do adresového registru out EEARL, r17 sbi EECR, EERE ; start čtení z EEPROM in r16, EEDR ; čtení dat z datového registru ret Před zápisem dat do paměti EEPROM je rovněž vhodné se přesvědčit, zda požadovaná data již nejsou v buňce obsažena. Ušetří se tím čas, protože nedochází ke zbytečnému mazání dat a opětovnému zápisu stejných dat. Šetří se tím i životnost paměťové buňky, která je omezena. 2.6.3 Programová paměť Flash Mikrokontrolér ATmega128 obsahuje 128 kb paměti Flash, která je programovatelná přímo v zapojeném procesoru do systému. To umožňuje vyvíjet program přímo v konečném zapojení mikrokontroléru. Protože všechny AVR instrukce jsou 16 nebo 32 bitové, je paměť organizována do dvou 64 kb bloků. Při práci s touto pamětí musíme tuto skutečnost vždy brát v úvahu. Pokud budeme ukládat např. text, jeho délka musí být sudá dělitelná dvěma. K datům přistupujeme pomocí příkazu LPM nebo ELPM, podle toho, ve které části se data nacházejí (ELPM pro data nad 64 kb). 17

Příklad programu pro čtení dat z Flash paměti: Tab:.DB 0x01, 0x02, 0x03, 0x04, ;data ve Flash Flash_read: ldi ZL, low(tab * 2) ; nastavení počátku tabulky ldi ZH, high(tab * 2) lpm Tmp, Z+ ; čtení z Flash s inkrementací ret Při tvorbě programu si musíme uvědomit, že adresový registr Z je tvořen dvěma dvoubajtovými registry, proto musíme naplnit každý zvlášť. Jak již bylo uvedeno, programová paměť Flash je tvořena dvěma bloky, které adresuje programový čítač najednou. My k ní ale nepřistupujeme pomocí programového čítače, proto se pro nás jeví jako jeden blok o dvojnásobné kapacitě. Proto musíme příslušnou adresu při zadávání do registru Z vždy násobit dvěma. Data do paměti Flash ukládáme pomocí programátoru, který bude popsán v dalších kapitolách. Je možno použít i příkazy mikrokontroléru. To je ale nad rámec našich potřeb a proto se tím nebudeme zabývat. 2.7 Hodiny Mikrokontroléry firmy Atmel umožňují pomocí Flash pojistek nastavit různé zdroje hodinového kmitočtu. Zdroj hodinového kmitočtu CKSEL3..0 Externí krystal/keramický rezonátor 1111-1010 Externí nízkofrekvenční krystal 1001 Externí RC oscilátor 1000-0101 Kalibrovaný vnitřní RC oscilátor 0100-0001 Externí hodiny 0000 Tabulka 1 Nastavení zdroje hodinového kmitočtu Při prvním startu mikrokontroléru je jako zdroj hodinového kmitočtu vybrán kalibrovaný vnitřní RC oscilátor. Toto nastavení lze změnit pomocí programátoru. Jako zdroj budeme převážně používat krystalový rezonátor, který je již součástí vývojové desky. Jeho kmitočet je 14745600 Hz. Je třeba jen ověřit správné nastavení příslušných pojistek. 18

2.7.1 Kalibrovaný vnitřní RC oscilátor Vývojová deska nám umožňuje alternativně zvolit tento zdroj hodinového kmitočtu, proto si je částečně popíšeme. Oscilátor umožňuje zvolit kmitočet podle následující tabulky. Uvedené hodnoty jsou nominální pro napájecí napětí 5V a teplotu 25 C. Příslušný kmitočet se volí pomocí pojistek CKSEL. Přesnost oscilátoru dosahuje hodnoty ±3%, kalibrací lze docílit hodnoty ±1%. CKSEL3..0 Nominální frekvence (MHz) 0001 1,0 0010 2,0 0011 4,0 0100 8,0 Tabulka 2 Nastavení vnitřního RC oscilátoru Je-li využíván kmitočet 1 MHz, je kalibrace prováděna automaticky, protože je součástí identifikačního bajtu. Používáme-li jiný kmitočet, musíme kalibrační data programově uložit do registru OSCCAL. Hodnota $00 představuje nejnižší možnou frekvenci, hodnota $FF pak představuje nejvyšší možnou frekvenci. Rozsah možných hodnot odchylky od nominální frekvence je uveden v následující tabulce. Hodnota OSCCAL Minimální frekvence v % Maximální frekvence v % $00 50 100 $7F 75 150 $FF 100 200 Tabulka 3 Rozsah nastavení frekvencí vnitřního RC oscilátoru Registr kalibrace RC oscilátoru - OSCCAL Bit 7 6 5 4 3 2 1 0 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu Data určena výrobcem Pokud budeme používat jiné hodnoty, než které určil výrobce pro frekvenci 1 MHz, je vhodné je uložit do paměti EEPROM a v úvodní části programu je načíst a uložit do tohoto registru. 19

2.8 Čítače časovače Pokud nesouhlasí vypočtený čas s naměřeným, je třeba prověřit nastavení pojistek, kterými se volí použitý oscilátor (vnější, RC, krystal) a dělič kmitočtu oscilátoru. Součástí mikrokontroléru jsou jak osmibitové tak šestnáctibitové čítače. Můžeme je využít následovně: - Jednokanálový čítač - Pulzně šířkový modulátor - Generátor frekvencí - Měření nebo generování časových úseků - Připojit k různým zdrojům hodinové frekvence Výstup z časovačů může být vyveden na piny mikrokontrolérů nebo může být využit vnitřně jako zdroj přerušení. 2.8.1 Módy čítače časovače V normálním módu čítač běží spojitě od minimální po maximální možnou hodnotu, kdy dojde k přetečení a nastaví se opět minimální (nulová) hodnota. V tomto režimu můžeme využít přerušení při přetečení čítače nebo přerušení od shody s porovnávacím registrem. Porovnávací registr má označení OCRn a registr čítače TCNTn. Módu nulování čítače po shodě (CTC) čítač běží spojitě do doby, než dojde ke shodě s porovnávacím registrem. V tomto okamžiku dojde k vynulování registru čítače TCNTn a bude generováno přerušení. Protože v tomto módu nikdy nedojde k přetečení čítače, nemůže být toto přerušení generováno. Mód pulzně šířkové modulace v našich aplikacích používat nebudeme. Výstup může sloužit jako jednoduchý DA převodník. 20

2.8.2 Nastavení registrů časovačů Nastavení registrů časovačů je poměrně komplikované, proto si zde probereme pouze registry, které budeme používat v našich programech. Podrobnější informace jsou v technické dokumentaci k tomuto procesoru. Přerušení od jednotlivých časovačů v příslušném módu se provádí v registru TIMSK. Významy jednotlivých bitů jsou následující. Maska pro přerušení časovačů - TIMSK Bit 7 6 5 4 3 2 1 0 OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK Čtení/zápis R R R R R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 TOIE0 povolení přerušení od přetečení časovače/čítače 0 OCIE0 povolení přerušení od čítače/časovače 0 při shodě s porovnávacím registrem TOIE1 povolení přerušení od přetečení časovače/čítače 1 OCIE1B povolení přerušení od čítače/časovače 1 při shodě s porovnávacím registrem B, možnost nastavení výstupu OCIE1A povolení přerušení od čítače/časovače 1 při shodě s porovnávacím registrem A, možnost nastavení výstupu TICIE1 povolení přerušení od vstupu časovače/čítače 1 TOIE2 povolení přerušení od přetečení časovače/čítače 2 OCIE2 povolení přerušení od čítače/časovače 0 při shodě s porovnávacím registrem Pokud budeme využívat jakékoliv přerušení od časovače/čítače, nesmíme zapomenout na celkové povolení přerušení ve stavovém registru. Protože budeme v dále uvedených příkladech používat šestnáctibitový časovač, popíšeme pouze jeho registry. Pokud by chtěl někdo použít jiný časovač, nastavení jeho registrů bude podobné. Tento mikrokontrolér umožňuje nastavit takový režim, že při shodě porovnávacího registru s čítačem časovače dojde k nulování tohoto čítače. Pokud 21

bychom požili režim bez nulování, pouze s komparací, pak bychom museli provádět nulování čítače časovače v našem programu. V opačném případě by další přerušení nastalo až po 65536 cyklech. Kromě povolení přerušení musíme nastavit i řídící registry časovače. Zde nastavíme, v jakém módu bude časovač pracovat a jak bude připojen na výstupní piny mikrokontroléru. První registr má označení TCCR doplněné číslem časovače a porovnávacího registru (např. TCCR1A). Řídicí registr - TCCR1A Bit 7 6 5 4 3 2 1 0 COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C0 WGM11 WGM10 TCCR1A Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Bity COM nastavíme dle následující tabulky. COMxx1 COMxx0 Popis funkce 0 0 Výstup pracuje normále, není napojen na časovač 0 1 Při shodě přepíná mezi nízkou a vysokou úrovní 1 0 Při shodě nastaví výstupní pin na nízkou úroveň 1 1 Při shodě nastaví výstupní pin na vysokou úroveň Tabulka 4 Výstupní mód časovače Registr TCCR1A má pokračování v registru TCCR1B Řídicí registr - TCCR1B Bit 7 6 5 4 3 2 1 0 ICNC1 ICES1 --- WGM13 WGM12 CS12 CS11 CS10 TCCR1B Čtení/zápis R/W R/W R R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 Nastavení bitů WGM platí pro registry TCCR1A i TCCR1B. V následující tabulce jsou vybrány pouze některé hodnoty, pro jiné nastavení je třeba prostudovat firemní dokumentaci. WGMn3 WGMn2 WGMn1 WGMn0 Operační mód 0 0 0 0 Normální 0 0 0 1 PWM, fáze, 8 bit 0 1 0 0 CTC výstup 0 1 0 1 Rychlá PWM 8 bit 1 1 0 0 CTC vstup Tabulka 5 Operační mód časovače 22

Zbývá nám ještě nastavit frekvenci a vybrat zdroj generátoru časovače. To nastavíme dle následující tabulky. CSn2 CSn1 CSn0 Popis 0 0 0 Žádný zdroj hodin, časovač nepracuje 0 0 1 clk/1 bez předděliče 0 1 0 clk/8 0 1 1 clk/64 1 0 0 clk/256 1 0 1 clk/1024 1 1 0 Externí hodiny sestupná hrana 1 1 1 Externí hodiny náběžná hrana Tabulka 6 Výběr hodinového zdroje pro časovač Další registry, které budeme u časovačů využívat, jsou TCNT a OCR. Registr TCNT je vlastní časovač a OCR je porovnávací registr. Protože se jedná o dvoubajtové registry, přístup k nim vyžaduje určitá pravidla. Naplnění nebo čtení se musí provést ve dvou po sobě bezprostředně následujících krocích. Následující obsluha platí pro oba registry. TIM16_WriteTCNTn: in r18, SREG odložení stavového registru cli zákaz přerušení out TCNTnH, r16 uložení registrů do časovače out TCNTnL, r17 out SREG, r18 obnovení stavového registru ret TIM16_ReadTCNTn: in r18, SREG odložení stavového registru cli zákaz přerušení in r16, TCNTnH čtení dat z registru in r17, TCNTnL out SREG, r18 obnovení stavového registru ret Před uložením nebo čtením registrů musíme zakázat přerušení. V případě žádosti o přerušení v době ukládání dat, by nebyly bajty uloženy následně za sebou a čtení nebo ukládání by nebylo korektní. Následující příklad ukazuje čtení z registru. Stejný princip ukládání a čtení dat platí i pro registry OCR. 23

2.9 Obecné přerušení jmp RESET ; Reset jmp EXT_INT0 ; IRQ0 Handler jmp EXT_INT1 ; IRQ1 Handler jmp EXT_INT2 ; IRQ2 Handler jmp EXT_INT3 ; IRQ3 Handler jmp EXT_INT4 ; IRQ4 Handler jmp EXT_INT5 ; IRQ5 Handler jmp EXT_INT6 ; IRQ6 Handler jmp EXT_INT7 ; IRQ7 Handler jmp TIM2_COMP ; Timer2 Compare Handler jmp TIM2_OVF ; Timer2 Overflow Handler jmp TIM1_CAPT ; Timer1 Capture Handler jmp TIM1_COMPA ; Timer1 CompareA Handler jmp TIM1_COMPB ; Timer1 CompareB Handler jmp TIM1_OVF ; Timer1 Overflow Handler jmp TIM0_COMP ; Timer0 Compare Handler jmp TIM0_OVF ; Timer0 Overflow Handler jmp SPI_STC ; SPI Transfer Complete Handler jmp USART0_RXC ; USART0 RX Complete Handler jmp USART0_DRE ; USART0,UDR Empty Handler jmp USART0_TXC ; USART0 TX Complete Handler jmp ADC ; ADC Conversion Complete Handler jmp EE_RDY ; EEPROM Ready Handler jmp ANA_COMP ; Analog Comparator Handler jmp TIM1_COMPC ; Timer1 CompareC Handler jmp TIM3_CAPT ; Timer3 Capture Handler jmp TIM3_COMPA ; Timer3 CompareA Handler jmp TIM3_COMPB ; Timer3 CompareB Handler jmp TIM3_COMPC ; Timer3 CompareC Handler jmp TIM3_OVF ; Timer3 Overflow Handler jmp USART1_RXC ; USART1 RX Complete Handler jmp USART1_DRE ; USART1,UDR Empty Handler jmp USART1_TXC ; USART1 TX Complete Handler jmp TWI ; Two-wire Serial Interface Interrupt jmp SPM_RDY ; SPM Ready Handler Přerušení používáme k obsluze událostí, které nejsou hlavním úkolem mikrokontroléru nebo které nastanou v neznámém okamžiku. Pokud budeme přerušení využívat, nesmíme zapomenout jej povolit příkazem sei. V tom případě může nastat jakékoliv přerušení. Proto doporučuji nastavit vektory všech přerušení a ta, která nebudou využívána zakončit příkazem konce přerušení reti. Vektory přerušení jsou následující. 24

2.10 Sériové periferní rozhraní SPI Sériový periferní interface umožňuje sériovou synchronní komunikaci typu Master/Slave. Vyznačuje se velkou komunikační rychlostí. Umožňuje přenos mezi mikrokontrolérem a periferním obvodem nebo mezi mikrokontroléry navzájem. SPI má následující vlastnosti. Plně duplexní třídrátový synchronní přenos dat. Nastavení obvodu jako Master nebo Slave. Přerušení po příjmu dat. Příznak kolize dat. Možnost vysílání dvojnásobnou rychlostí. MASTER posuvný registr MISO MISO SLAVE posuvný registr MOSI MOSI generátor CLK SCK SCK SS SS Obr. 4 Propojení při SPI komunikaci Vodič MISO (Master Input Slave Output) přenáší data z obvodu Slave do obvodu Master a vodič MOSI (Master Output Slave Input) přenáší data z obvodu Master do obvodu Slave. Vodičem SCK se přenášejí hodinové impulzy, které jdou z obvodu master do obvodu Slave. Obvod Master svými hodinovými impulzy řídí celou komunikaci. Vodič SS slouží k výběru obvodu Slave, kterých může být připojeno více. Tímto vstupem se synchronizuje přenos a zároveň se aktivuje příslušný obvod Slave. U obvodu Slave je nastaven vždy jako vstupní. U obvodu Master může být vodič SS nastaven jako vstupní i jako výstupní. Je-li výstupní, nemá v podstatě žádnou souvislost s SPI systémem a můžeme jej použít jako samostatný výstupní pin. Doporučuje se ale jej využít k ovládání SS pinu obvodu Slave pro zajištění synchronizace. Pokud jej nastavíme jako vstupní, pak musí být jeho úroveň na 25

logické 1. Jinak se předpokládá, že v síti je jiný Master a tento obvod se přepne do režimu Slave. Řídicí registr SPI - SPCR Bit 7 6 5 4 3 2 1 0 SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 SPCR Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 SPIE povolení přerušení SPI SPE povolení komunikace SPI musí být nastaven na 1 DORD je-li 1, LSB se vysílá první, je-li 0, MSB se vysílá první MSTR 0 SLAVE, 1 MASTER CPOL polarita hodin CPHA fáze hodin SPR1,0 nastavení frekvence hodin Data se předávají pomocí datového registru SPDR. Po naplnění tohoto registru MASTER začíná vysílat data. Protože modul SLAVE neví, kdy bude zahájeno vysílání, je třeba obsluhu SPI provádět pomocí přerušení. 2.11 USART Univerzální asynchronní přijímač/vysílač. Je to plně duplexní sériový kanál, který může současně vysílat i přijímat. Hlavní vlastnosti tohoto rozhraní jsou: synchronní nebo asynchronní provoz, jemné nastavení přenosové rychlosti, možnost vysílání 5 až 9 bitů, 1 nebo 2 stop bity, generátor sudé nebo liché parity, detekce přetečení (nevyzvednutí) dat, detekce chyby přenosu, filtrace šumu, možnost práce pod přerušením, multiprocesorová komunikace, možnost dvojnásobné rychlosti při asynchronní komunikaci. Mikrokontrolér ATmega 128 má dva tyto porty. Jsou označeny jako USART0 a USART1. Mají rozdílné registry a každý je nutno samostatně nastavit. Budeme se tedy zabývat pouze jedním portem, druhy port nastavíme obdobně. 26

2.11.1 Nastavení komunikační rychlosti Frekvence generátoru hodinových impulzů je odvozena od frekvence hlavního krystalu mikrokontroléru. Nastavená rychlost platí pro přijímač i pro vysílač, a provedeme to vložením příslušné konstanty do registru UBRR. Tento registr je dvoubajtový, proto musíme nastavit každý bajt samostatně. Výpočet příslušné konstanty je uveden v následující tabulce. Mód Přenosová rychlost Výpočet konstanty fosc fosc Normální asynchronní mód BAUD = UBRR = 1 16 ( UBRR +1) 16 BAUD Asynchronní mód s dvojitou fosc fosc BAUD = UBRR = 1 rychlostí 8 ( UBRR +1) 8 BAUD fosc fosc Synchronní MASTER mód BAUD = UBRR = 1 2 ( UBRR +1) 2 BAUD Tabulka 7 Výpočet konstant pro nastavení přenosové rychlosti BAUD přenosová rychlost (bity za sekundu) F OSC frekvence systémového oscilátoru UBRR konstanta pro registry UBRRH a UBRRL, rozsah 0 až 4095 2.11.2 Nastavení řídících registrů Před první komunikací je nutno inicializovat komunikační port. Provedeme nastavení komunikační rychlosti, povolení vysílání, povolení příjmu a další. Podrobnosti jsou uvedeny v následujících registrech. Řídicí a status registr - UCSRnA Bit 7 6 5 4 3 2 1 0 RXCn TXCn UDREn FEn DORn UPEn U2Xn MPCMn UCSRnA Čtení/zápis R R/W R R R R R/W R/W Po resetu 0 0 1 0 0 0 0 0 RXC příjem dat (bajtu) ukončen, data jsou v přijímacím bufferu TXC vysílání dat ukončeno UDRE vysílací registr je volný, možno uložit další data pro vysílání FE chyba při příjmu dat, chyba rámce DOR došlo k přepsání dat v přijímacím bufferu (nebyla včas vyzvednuta) UPE chyba parity U2X možnost nastavení dvojnásobné rychlosti MPCM Multiprocesorový komunikační mód 27

Řídicí a status registr - UCSRnB Bit 7 6 5 4 3 2 1 0 RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n UCSRnB Čtení/zápis R/W R/W R/W R/W R/W R/W R R/W Po resetu 0 0 0 0 0 0 0 0 RXCIE povolení přerušení při ukončení příjmu bajtu (bajt v přijímacím bufferu) TXCIE povolení přerušení při ukončení vysílání UDRIE povolení přerušení při uvolnění vysílacího bufferu RXEN povolení příjmu TXEN povolení vysílání UCSZn2 kombinace s registrem UCSRnC RXB8 toto je příjem 9.bitu při nastavení 9bitové komunikace TXB8... 9.bit pro vysílání... Řídicí a status registr - UCSRnC Bit 7 6 5 4 3 2 1 0 --- UMSELn UPMn1 UPMn0 USBSn UCSZn1 UCSZn0 UCPOLn UCSRnC Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 1 1 0 UMSEL selekt módu, 0 asynchronní, 1 synchronní, UPMn nastavení parity, viz tabulka USBS počet stop bitů, 0 1 bit, 1 2 bity, UCSZ počet bitů při vysílání a přijímání UCPOL vysílání a přijímání dat s náběžnou nebo sestupnou hranou UPMn1 UPMn0 Mód parity 0 0 Bez parity 0 1 Nepoužito 1 0 Lichá parita 1 1 Sudá parita Tabulka 8 Nastavení bitů UPMn UCSZn2 UCSZn1 UCSZn0 Počet bitů v rámci 0 0 0 5 bitů 0 0 1 6 bitů 0 1 0 7 bitů 0 1 1 8 bitů 1 0 0 Nepoužito 1 0 1 Nepoužito 1 1 0 Nepoužito 1 1 1 9 bitů Tabulka 9 Nastavení bitů UCSZ, počet vysílaných bitů 28

Příklad podprogramu inicializace sériového portu je uveden v následujících řádcích. USART_init: out UBRRH, r17 ; nastavení komunikační rychlosti out UBRRL; r16 ldi r16, (1<<RXEN) (1<<TXEN) ; povolit TX a RX out UCSRB, r16 ldi r16, (1<<USBS) (3<<UCSZ0) out UCSRC, r16 ret Příjem a vysílání realizujeme pomocí datového registru UDR. Příklad kódu jednotlivých podprogramů je následující. USART_Transmit: sbis UCSRA, UDRE ; čekání na uvolnění vysíl.bufferu rjmp USART_Transmit out UDR, r16 ; uložení dat do vysílacího bufferu ret USART_Receive: sbis UCSRA, RXC ; čekání na příjem dat rjmp USART_Receive in r16, UDR ; čtení dat z bufferu ret 2.11.3 Multiprocesorová komunikace V krátkosti se ještě zmíníme o problémech multiprocesorové komunikace. Do rámce se vloží jedem bit, který bude signalizovat, zda je vysílán adresový bajt nebo datový bajt. Protože je maximální počet bitů v rámci 9, v tomto módu můžeme vysílat maximálně 8 bitů. Budeme-li vysílat bajt, který obsahuje adresu, nastavíme devátý bit. Pokud budeme vysílat data, tento bit nulujeme. Přijímací moduly pak reagují na tento bit. Je-li nastaven, přijímají jej a vyhodnocují všechny moduly. Když se adresa modulu shoduje s přijatou, modul vyhodnocuje i další přijímané rámce. Pokud se adresa neshoduje, modul další rámce ignoruje. Podrobnější informace o principu multiprocesorové komunikace najdeme ve firemní dokumentaci k tomuto mikrokontroléru. 29

2.12 Analogový komparátor Analogový komparátor porovnává napětí mezi dvěma vstupy a to AIN1 a AIN0. Je-li na vstupu AIN0 napětí větší než na vstupu AIN1, výstup komparátoru se nastaví na vysokou úroveň. Toho se může využít jako zdroje události, například vyvolat přerušení. Povolení činnosti komparátoru provedeme nastavením bitu ACME v registru SFIOR, který jsme uvedli v kapitole o portech. Řídicí a status registr - ACSR Bit 7 6 5 4 3 2 1 0 ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0 ACSR Čtení/zápis R/W R/W R R/W R/W R/W R/W R/W Po resetu 0 0 N/A 0 0 0 0 0 ACD nastavením bitu na 1 je komparátor vypnut, což umožňuje snížení spotřeby ACBG přepínání reference vnitřní nebo AIN0 ACO výstup analogového komparátoru ACI příznak přerušení od komparátoru ACIE povolení přerušení od komparátoru ACIC propojení s časovačem ACIS1 ACIS0 Mód přerušení 0 0 Přerušení při změně stavu výstupu 0 1 Nepoužito 1 0 Přerušení při sestupné hraně výstupu 1 1 Přerušení při náběžné hraně výstupu Tabulka 10 Nastavení bitů ACIS komparátoru 2.13 Analogově digitální převodník Použitý převodník je aproximačního typu s 10 bitovým rozlišením. Jeho vstup je připojen na osmivstupový analogový multiplexer. U některých vstupů je možno nastavit zesílení a tím převodník použít pro převod signálů nízké úrovně. Nemusíme používat externí zesilovač. Vstupní napětí můžeme používat v rozsahu 0 až Vcc. Rychlost převodu je až 15 ksps při největším rozlišení. Rychlost vzorkování se nastavuje předděličem. Řídicí a status registr - ADCSRA Bit 7 6 5 4 3 2 1 0 ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0 ADCSRA Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 30

ADEN povolení ADC, 1 zapnut, 0 vypnut ADSC start převodu ADFR volně běžící převod ADIF příznak přerušení na konci převodu ADIE povolení přerušení od ADC ADPS2 ADPS1 ADPS0 Hodnota předděliče 0 0 0 1 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128 Tabulka 11 Nastavení bitů ADPS převodníku Pro správnou činnost převodníku musíme správně nastavit i multiplexer. Registr ADC multiplexeru - ADMUX Bit 7 6 5 4 3 2 1 0 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 ADMUX Čtení/zápis R/W R/W R/W R/W R/W R/W R/W R/W Po resetu 0 0 0 0 0 0 0 0 REFS volba referenčního napětí ADLAR zarovnání výsledku v registru vlevo nebo vpravo MUX výběr vstupu a zesílení. Práce s AD převodníkem vyžaduje detailnější nastavení a úvahy, proto je třeba před jeho použitím detailněji prostudovat firemní dokumentaci. 31