Top Banner
Mikrokontroler ATmega8 - popis systému 1 OBSAH 1 ÚVOD. ................................................................................................................................................................. 4 1.1 SÚČASNÝ STAV............................................................................................................................................. 5 2 MIKROPOČÍTAČE ............................................................................................................................................. 8 2.1 ZÁKLADNÉ ČASTI MIKROPOČÍTAČA .................................................................................................... 10 2.1.1 Centrálna procesorová jednotka, (CPJ) ........................................................................................................ 10 2.1.2 Pamäťový podsystém ................................................................................................................................... 12 2.1.3 Vstupno-výstupný podsystém ...................................................................................................................... 13 2.1.3.1 Prerušovací podsystém .............................................................................................................................. 13 2.1.3.2 Paralelné komunikačné rozhranie ............................................................................................................. 14 2.1.3.3 Sériové komunikačné rozhranie ................................................................................................................ 14 2.1.3.4 Modul časovačov/čítačov .......................................................................................................................... 14 2.1.3.5. Podsystém A/Č a Č/A prevodníkov a analógový komparátor .................................................................. 15 2.1.3.6. Pamäť EEPROM ...................................................................................................................................... 15 2.1.3.7. WATCHDOG časovač ............................................................................................................................. 15 2.2 MIKROKONTROLÉRY ATMEL AVR ........................................................................................................ 16 3 ATmega8, ATmega8L ....................................................................................................................................... 19 3.2 CENTRÁLNA PROCESOROVÁ JEDNOTKA. ............................................................................................ 21 3.2.1 Aritmeticko-logická jednotka ....................................................................................................................... 23 3.2.2 Pole univerzálnych registrov ........................................................................................................................ 24 3.2.3 Ukazovateľ zásobníka (SP) .......................................................................................................................... 25 3.3 PAMÄŤOVÝ PODSYSTÉM MCU Atmega8 ................................................................................................ 26 3.3.1 Pamäť programu........................................................................................................................................... 26 3.3.2 Pamäť údajov SRAM ................................................................................................................................... 27 3.3.3 Pamäť údajov EEPROM .............................................................................................................................. 27 3.3.4 V/V pamäťový podsystém ........................................................................................................................... 30 3.4 REŠTARTOVANIE PROCESORA A PRERUŠOVACÍ SYSTÉM .............................................................. 30 3.5 SYSTÉMOVÉ HODINY ................................................................................................................................ 31 3.6 RIADENIE SPOTREBY, REŽIMY SO ZNÍŽENOU SPOTREBOU. ........................................................... 36 3.6.1 Idle mode, režim nečinnosti ......................................................................................................................... 37 3.6.2 ADC noise reduction mode, režim redukcie šumu ....................................................................................... 37 3.6.3 Power-down mode, režim zo zníženou spotrebou ........................................................................................ 38 3.6.4 Power-save mode, režim s úspornou spotrebou ........................................................................................... 38 3.6.5 Standby mode, pohotovostný režim ............................................................................................................. 38 3.6.6 Minimalizácia spotreby ................................................................................................................................ 39 3.7 REŠTART ....................................................................................................................................................... 39 3.7.1 Externý reštart .............................................................................................................................................. 41 3.7.2 Detekcia brown-out ...................................................................................................................................... 41 3.7.3 Watchdog reštart .......................................................................................................................................... 42 3.8 RIADIACI A STAVOVÝ REGISTER MIKROKONTROLÉRA, MCUCSR ............................................... 42 3.9 ZDROJ INTERNÉHO REFERENČNÉHO NAPÄTIA .................................................................................. 43 3.10 ČASOVAČ WATCHDOG ........................................................................................................................... 44 3.11 PRERUŠOVACÍ PODSYSTÉM .................................................................................................................. 45 3.11.1 Premiestňovanie prerušení medzi aplikačnou a zavádzaciou časťou pamäte ............................................. 46 4. VSTUPNO-VÝSTUPNÉ MODULY MIKROKONTROLÉRA....................................................................... 47 4.1 VSTUPNO-VÝSTUPNÉ BRÁNY MIKROKONTROLÉRA ........................................................................ 47 4.1.1 Brána B ........................................................................................................................................................ 51 4.1.2 Brána C ........................................................................................................................................................ 53 4.1.3 Brána D ........................................................................................................................................................ 54 4.2 UNIVERZÁLNY SYNCHRÓNNY/ASYNCHRÓNNY PRIJÍMAČ/VYSIELAČ, USART ......................... 55 4.2.1 Generátor hodinového signálu ..................................................................................................................... 58 4.2.2 Generovanie interného hodinového signálu – generátor prenosovej rýchlosti ............................................. 58 4.2.3 Formát vysielaných dát ................................................................................................................................ 60 4.2.4 Vysielač modulu USART ............................................................................................................................ 61 4.2.5 Prijímač modulu USART ............................................................................................................................. 63 4.2.6 Asynchrónny príjem dát ............................................................................................................................... 64 4.2.7 Režim multiprocesorovej komunikácie modulu USART ............................................................................. 66
269

OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Apr 29, 2019

Download

Documents

truongnhu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 1

OBSAH

1 ÚVOD. ................................................................................................................................................................. 4 1.1 SÚČASNÝ STAV ............................................................................................................................................. 5 2 MIKROPOČÍTAČE ............................................................................................................................................. 8 2.1 ZÁKLADNÉ ČASTI MIKROPOČÍTAČA .................................................................................................... 10 2.1.1 Centrálna procesorová jednotka, (CPJ) ........................................................................................................ 10 2.1.2 Pamäťový podsystém ................................................................................................................................... 12 2.1.3 Vstupno-výstupný podsystém ...................................................................................................................... 13 2.1.3.1 Prerušovací podsystém .............................................................................................................................. 13 2.1.3.2 Paralelné komunikačné rozhranie ............................................................................................................. 14 2.1.3.3 Sériové komunikačné rozhranie ................................................................................................................ 14 2.1.3.4 Modul časovačov/čítačov .......................................................................................................................... 14 2.1.3.5. Podsystém A/Č a Č/A prevodníkov a analógový komparátor .................................................................. 15 2.1.3.6. Pamäť EEPROM ...................................................................................................................................... 15 2.1.3.7. WATCHDOG časovač ............................................................................................................................. 15 2.2 MIKROKONTROLÉRY ATMEL AVR ........................................................................................................ 16 3 ATmega8, ATmega8L ....................................................................................................................................... 19 3.2 CENTRÁLNA PROCESOROVÁ JEDNOTKA. ............................................................................................ 21 3.2.1 Aritmeticko-logická jednotka ....................................................................................................................... 23 3.2.2 Pole univerzálnych registrov ........................................................................................................................ 24 3.2.3 Ukazovateľ zásobníka (SP) .......................................................................................................................... 25 3.3 PAMÄŤOVÝ PODSYSTÉM MCU Atmega8 ................................................................................................ 26 3.3.1 Pamäť programu ........................................................................................................................................... 26 3.3.2 Pamäť údajov SRAM ................................................................................................................................... 27 3.3.3 Pamäť údajov EEPROM .............................................................................................................................. 27 3.3.4 V/V pamäťový podsystém ........................................................................................................................... 30 3.4 REŠTARTOVANIE PROCESORA A PRERUŠOVACÍ SYSTÉM .............................................................. 30 3.5 SYSTÉMOVÉ HODINY ................................................................................................................................ 31 3.6 RIADENIE SPOTREBY, REŽIMY SO ZNÍŽENOU SPOTREBOU. ........................................................... 36 3.6.1 Idle mode, režim nečinnosti ......................................................................................................................... 37 3.6.2 ADC noise reduction mode, režim redukcie šumu ....................................................................................... 37 3.6.3 Power-down mode, režim zo zníženou spotrebou ........................................................................................ 38 3.6.4 Power-save mode, režim s úspornou spotrebou ........................................................................................... 38 3.6.5 Standby mode, pohotovostný režim ............................................................................................................. 38 3.6.6 Minimalizácia spotreby ................................................................................................................................ 39 3.7 REŠTART ....................................................................................................................................................... 39 3.7.1 Externý reštart .............................................................................................................................................. 41 3.7.2 Detekcia brown-out ...................................................................................................................................... 41 3.7.3 Watchdog reštart .......................................................................................................................................... 42 3.8 RIADIACI A STAVOVÝ REGISTER MIKROKONTROLÉRA, MCUCSR ............................................... 42 3.9 ZDROJ INTERNÉHO REFERENČNÉHO NAPÄTIA .................................................................................. 43 3.10 ČASOVAČ WATCHDOG ........................................................................................................................... 44 3.11 PRERUŠOVACÍ PODSYSTÉM .................................................................................................................. 45 3.11.1 Premiestňovanie prerušení medzi aplikačnou a zavádzaciou časťou pamäte ............................................. 46 4. VSTUPNO-VÝSTUPNÉ MODULY MIKROKONTROLÉRA....................................................................... 47 4.1 VSTUPNO-VÝSTUPNÉ BRÁNY MIKROKONTROLÉRA ........................................................................ 47 4.1.1 Brána B ........................................................................................................................................................ 51 4.1.2 Brána C ........................................................................................................................................................ 53 4.1.3 Brána D ........................................................................................................................................................ 54 4.2 UNIVERZÁLNY SYNCHRÓNNY/ASYNCHRÓNNY PRIJÍMAČ/VYSIELAČ, USART ......................... 55 4.2.1 Generátor hodinového signálu ..................................................................................................................... 58 4.2.2 Generovanie interného hodinového signálu – generátor prenosovej rýchlosti ............................................. 58 4.2.3 Formát vysielaných dát ................................................................................................................................ 60 4.2.4 Vysielač modulu USART ............................................................................................................................ 61 4.2.5 Prijímač modulu USART ............................................................................................................................. 63 4.2.6 Asynchrónny príjem dát ............................................................................................................................... 64 4.2.7 Režim multiprocesorovej komunikácie modulu USART ............................................................................. 66

Page 2: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 2

4.2.8 Popis registrov modulu USART .................................................................................................................. 67 4.3 SÉRIOVÉ KOMUNIKAČNÉ ROZHRANIE –SPI ........................................................................................ 73 4.3.1 Funkcie vývodu /SS ..................................................................................................................................... 76 4.3.2 Popis registrov .............................................................................................................................................. 77 4.3.3 Dátové režimy .............................................................................................................................................. 79 4.4 DVOJVODIČOVÉ ROZHRANIE, TWI ........................................................................................................ 81 4.4.1 Prenos dát a formát rámca (súbor údajov prenášaný v jednom bloku) ......................................................... 82 4.4.2 Popis registrov .............................................................................................................................................. 88 4.4.3 Prenos údajov prostredníctvom TWI ........................................................................................................... 92 4.4.4 Režimy činnosti modulu TWI ...................................................................................................................... 94 4.4.4.1 Režim vysielač MASTER ......................................................................................................................... 95 4.4.4.2 Režim prijímač MASTER, (MR) .............................................................................................................. 97 4.4.4.3 Režim prijímač SLAVE, (SR) ................................................................................................................... 99 4.4.4.4 Režim vysielač SLAVE, (ST) ................................................................................................................. 101 4.4.4.5 Ďalšie stavy ............................................................................................................................................. 103 4.4.4.6 Kombinovanie viacerých TWI režimov .................................................................................................. 104 4.4.4.7 Systém s niekoľkými zariadeniami typu „MASTER“ (Multy-Master System) ...................................... 104 4.5 ČASOVAČ/ČÍTAČ 0.................................................................................................................................... 105 4.5.1 Registre časovača/čítača 0 .......................................................................................................................... 106 4.5.2 Preddelička časovača/čítača0 a časovača/čítača1 ....................................................................................... 108 4.4.5 V/V register špeciálnych funkcií SFIOR .................................................................................................... 109 4.6 16-BITOVÝ ČASOVAČ/ČÍTAČ1 ............................................................................................................... 109 4.6.1 Popis registrov ............................................................................................................................................ 120 4.7 8-BITOVÝ ČASOVAČ/ČÍTAČ2 ................................................................................................................ 126 4.7.1 Popis registrov ............................................................................................................................................ 135 4.7.2 Asynchrónna činnosť časovača/čítača 2 ..................................................................................................... 137 4.8 ANALÓGOVÝ KOMPARÁTOR ................................................................................................................ 141 4.8.1 Popis registrov ............................................................................................................................................ 141 4.9 EXTERNÉ PRERUŠENIA ........................................................................................................................... 144 4.9.1 Popis registrov ............................................................................................................................................ 144 4.10 ANALÓGOVO-ČÍSLICOVÝ PREVODNÍK ............................................................................................. 146 4.10.1 preddelička hodinového signálu ADC ..................................................................................................... 148 4.10.2 Režim činnosti A/D prevodníka ............................................................................................................... 149 4.10.3 Popis registrov .......................................................................................................................................... 152 4.10.4 Techniky na potlačenie šumu ................................................................................................................... 155 5. ZAVÁDZACÍ PROGRAM, BOOT LOADER .............................................................................................. 157 5.1 SEKCIA PAMÄTE FLASH VYČLENENÁ PRE ZAVÁDZACÍ PROGRAM ........................................... 157 5.2 “LOCK“ BITY ZAVÁDZACIEHO PROGRAMU, BOOT LOADER LOCK BITY .................................. 159 5.3 POPIS REGISTROV .................................................................................................................................... 160 5.4 PROGRAMOVANIE PAMÄTE FLASH, „ SELF-PRGRAMMING“ ........................................................ 162 5.5 „LOCK“ BITY, „FUSE“ BITY, „SIGNATURE“ BITY A „CALIBRATION“ BITY ................................. 164 5.5.1 „Lock“ bity ................................................................................................................................................. 165 5.5.2 „FUSE“ bity ............................................................................................................................................... 166 5.5.3 „Signature“ Byty ........................................................................................................................................ 167 5.5.4 Kalibračný Byt ........................................................................................................................................... 167 6. PROGRAMOVANIE PAMÄTÍ FLASH A EEPROM ................................................................................... 167 6.1 PARALELNÉ PROGRAMOVANIE MCU ................................................................................................. 167 6.2 SÉRIOVÉ PROGRAMOVANIE MCU ........................................................................................................ 168 7. PROSTRIEDKY NA VÝVOJ APLIKAČNÝCH PROGRAMOV ................................................................. 172 7.1 AVR Studio 4 ................................................................................................................................................ 173 7.1.1 Simulácia so zdrojovým kódom ................................................................................................................. 180 7.1.2 Programovanie MCU ................................................................................................................................. 183 8 PROGRAMOVANIE MIKROKONTROLÉROV ........................................................................................... 185 8.1 V/V REGISTRE MCU .................................................................................................................................. 185 8.2 INŠTRUKČNÝ SÚBOR ............................................................................................................................... 187 8.3 ADRESOVACIE REŽIMY PROGRAMU A DÁT ..................................................................................... 192 8.4 POPIS INŠTRUKCIÍ ASSEMBLERU AVR ................................................................................................ 196 8.4.1 Aritmetické a logické inštrukcie ................................................................................................................ 197 8.4.2 Inštrukcie skokov ....................................................................................................................................... 209 8.4.3 Inštrukcie na presun dát ............................................................................................................................. 227

Page 3: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 3

8.4.4 Inštrukcie na testovanie a manipuláciu s bitmi........................................................................................... 239 8.4.5 Inštrukcie na riadenie mikrokontroléra ...................................................................................................... 252 8.5 ASSEMBLER ............................................................................................................................................... 253 8.5.1 Príkazy ....................................................................................................................................................... 254 8.5.2 Výrazy ........................................................................................................................................................ 259 8.5.3 Operátory ................................................................................................................................................... 260 9 POPIS MODULU ATMEGA8 ........................................................................................................................ 263 9.1 PROGRAMÁTOR AVR ............................................................................................................................... 265 9.2 APLIKAČNÁ ČASŤ MODULU ATMEGA8 .............................................................................................. 266 9.3 NASTAVENIE PARAMETROV MCU ....................................................................................................... 268 10 APLIKAČNÉ PRÍKLADY ............................................................................................................................ 269

Page 4: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 4

1 ÚVOD.

Koniec druhého a začiatok tretieho tisícročia je poznamenaný nebývalým rozvojom metód

a technických prostriedkov určených na získanie, prenos a využitie informácií. Od čias pána

Wienera, ktorý definoval teoretický základ kybernetiky až do dnešných dní sme svedkami

neobyčajne rýchleho rozvoja informačných technológií, ktoré zásadným spôsobom menia

kvalitu ľudského života. Dnes, už informačné technológie zasahujú do každej ľudskej

činnosti. Na jednej strane zvyšujú kvalitu ľudského života, na strane druhej prinášajú so sebou

mnoho problémov súvisiacich so zmenami životného štýlu, ktoré sú podmienené rozvojom

technickej úrovne spoločnosti.

Od začiatku sedemdesiatych rokov dvadsiateho storočia technologická úroveň systémov

na spracovanie informácií viackrát prekročila prognózované hranice. Dnes sa stretávame

s vysoko sofistikovanými výrobkami a zariadeniami, ktoré kladú vyššie nároky na užívateľa

a nevyhnutne vedú k úzkej špecializácii vo všetkých oblastiach techniky. Snáď najvýraznejší

pokrok elektronického priemyslu bol zaznamenaný v zariadeniach a metódach, ktoré

zahŕňame do širokej oblasti informačných technológií. Pojem informačné technológie je tu

chápaný v celej svojej šírke a zahŕňa metódy a systémy na získanie, prenos, uchovanie a

spracovanie informácií.

Dnes už väčšina zariadení priemyselnej a spotrebnej elektroniky ukrýva procesorové

jadro, ktoré prispieva k zvýšeniu úžitkových vlastností daného výrobku. V týchto

zariadeniach sa procesor stará o zvýšenie komfortu ovládania, znižuje spotrebu elektrickej

energie, zvyšuje bezpečnosť prevádzky a plní mnoho ďalších funkcií, ktoré sú z hľadiska

zvýšenia úžitkových vlastností výrobku nevyhnutné. Je zrejmé, že uvedený trend bude

i v nasledujúcich obdobiach pokračovať.

Často používaným stavebným prvkom pri návrhu „inteligentných“ zariadení je

monolitický mikropočítač, mikrokontrolér. Mikrokontroléry - programovateľné obvody sa

dnes využívajú v najrôznejších aplikáciách. Stretneme sa s nimi:

- v automobilovom priemysle

- v meracích a diagnostických systémoch

- v periférnych zariadeniach počítačov

- v komunikačných systémoch

- v systémoch priemyselnej automatizácie

- v zabezpečovacích systémoch

- vo vojenských aplikáciách

- v zariadeniach spotrebnej elektroniky a v mnohých ďalších aplikáciách.

Pre svoju nízku cenu, nízku spotrebu a relatívne vysoký výpočtový výkon sa uplatňujú aj

v takých aplikáciách, v ktorých sme si ich uplatnenie ani nedokázali predstaviť. Využiť

možnosti, ktoré so sebou tieto prvky prinášajú vyžaduje veľkú dávku tvorivosti, dobrý

prehľad v modernej obvodovej technike a schopnosť vhodne algoritmizovať riešenie zadanej

úlohy. Tvorivosť, invencia návrhára je schopnosť z veľkej miery vrodená a rozšírená

v procese tvorivej činnosti jednotlivca. Potrebný prehľad a široký súbor vedomostí je možné

získať v štúdiom, tvorbou nových aplikácií a neustálym rozširovaním svojich znalostí. Pre

dosiahnutie úspechu je potrebné aby sa v jednej osobe stretli všetky spomenuté predpoklady

so záujmom tieto predpoklady využívať. Predkladaná publikácia má slúžiť na

sprostredkovanie kontaktu čitateľa s jednou skupinou zaujímavých obvodových prostriedkov,

ktoré sa podieľajú na rozvoji informačných technológií.

Page 5: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 5

1.1 SÚČASNÝ STAV

Napriek požiadavkám na neustále zvyšovanie výpočtového výkonu číslicových systémov

majú 8-bitové mikrokontroléry svoje pevné miesto v aplikáciách, kde cena, spotreba

a rozmery navrhnutého zariadenia sú vážnymi obmedzujúcimi faktormi. Napriek neustálemu

zvyšovaniu výkonu, úžitkových vlastností a rastu predaja 16 a 32-bitových mikrokontrolérov

8-bitové MCU si udržujú pevnú pozíciu na svetovom trhu s viac než ½ predaných kusov.

Vďaka svojim vlastnostiam a bohatému vybaveniu integrovanými perifériami sa aj dnes, v

čase honby za vysokým výpočtovým výkonom a šírkou pásma uplatnia v obrovskej škále

aplikácií.

Vďaka svojej cene a lacným vývojovým prostriedkom sa uplatňujú aj v aplikáciách,

v ktorých sa donedávna uplatňovali 4-bitové MCU ( hračky, diaľkové ovládanie a pod.).

V najjednoduchších riadiacich aplikáciách budú mať 8-bitové MCU svoje nezastupiteľné

miesto. Taktiež automobilový priemysel, rozličné priemyselné komunikačné zbernice (CAN)

a periférie počítačov budú využívať 8-bitové MCU. Jednotlivý výrobcovia si uvedomujú

skutočnosť, že okrem zvyšovania výkonu a kapacít pamätí budú kľúčovú úlohu v rozširovaní

počtu aplikácií v budúcnosti, hrať integrované periférie mikrokontrolérov. Odhady analytikov

o veľkosti svetového trhu s mikrokontrolérmi pre rok 2004 sa mierne líšia (pohybujú sa

v rozmedzí od 7.8 mld. USD, (In-Stad/MDR) po 14 mld. USD (sia.online.org). Väčšina

z informačných zdrojov sa zhoduje že svetový trh s MCU sa v roku 2003 pohybuje v okolí

desiatich miliárd USD. Na obr. 1 je dokumentované rozdelenie trhu z hľadiska celkového

obratu medzi 4 až 32-bitové mikrokontroléry.

53 %

29 %

4 %

14 %

4-bitové

MCU

32-bitové

MCU

16-bitové

MCU

8-bitové

MCU

Zdroj: Industry Analysts

Obr.1 Rozdelenie svetového trhu s MCU

Page 6: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 6

Podľa Reed-Electronic je svetový trh s MCU a DSP, podľa počtu ročne predaných kusov,

rozdelený nasledovne:

8 –bitové MCU 31%

16-bitové MCU 21%

32-bitové MCU 8%

4-bitové MCU 5%

DSP 35%

Dodnes je najväčší obchod s 8-bitovými MCU v Japonsku. Očakáva sa aj v budúcnosti, že

najväčší odbyt 8-bitových MCU bude v Ázii a krajinách Pacifického lemu vrátane Číny, kde

sa očakáva prechod z tradične 4-bitových aplikácií v hračkách a hrách na 8-bitové MCU.

Cena je veľmi dôležitým faktorom ovplyvňujúcim výšku predaja všetkých polovodičových

produktov. Cena je mimoriadne významná práve pri 8-bitových MCU, ktoré sa používajú vo

výrobkoch produkovaných vo veľkých sériách. Aj minimálny rozdiel v cene použitých

prvkov môže znamenať miliónovú úsporu. Cena malých 8-bitových MCU v púzdre s 8-mimi

vývodmi sa dnes pohybuje v rozmedzí 30 až 50 centov. V porovnaní s cenou 32-bitových

MCU, ktorá je na úrovni 5-tich až 7-mych USD je úspora významná. Viacerí výrobcovia

(napr. Renesas, TI ) dnes tlačia cenu svojich 16-bitových MCU na tak nízku cenovú úroveň,

že sa stávajú priamymi konkurentmi 8-bitových MCU.

Napriek uvedeným skutočnostiam sa pre najbližšie obdobie predpovedá nárast v

predaji 8-bitových MCU. Stále sa objavujú nové a nové aplikácie, v ktorých sa výrazne

uplatňuje nízka cena a malá spotreba pri dostatočnom výpočtovom výkone 8-bitových MCU.

Z popredných svetových výrobcov mikrokontrolérov uvedieme aspoň nasledovných:

Analog Devices vyrába 8-bitové MCU na jadre 8051 s integrovanými 12-bitovými

A/D a D/A prevodníkmi, prípadne presnými A/D prevodníkmi na princípe DSM. (

www.analog.com ).

Atmel Corporation vyrába tri triedy MCU populárne MCU na jadre 8051, AVR

RISC MCU a AT 91 ARM. MCU sú vybavené pamäťou programu typu FLASH. (

www.atmel.com ).

Dallas Semiconductor výrobca výkonných FLASH MCU na jadre 8051, Dnes

oddelenie Maxim Integrated Product. ( www.maxim-ic.com ).

Freescale Semiconductor vyrába 8-bitové MCU (68HC05, 68HC08, 68HC11), 16-

bitové (M68HC12, M68HC16, 56800/E) a 32-bitové MCU (68K/ColdFire, MAC7100,

MCORE, PowerPC) . Najväčší výrobca MCU na americkom trhu. Predtým Motorola. (

www.freescale.com )

Infineon Technologies výrobca 8-bitových MCU na jadre 8051, 16 a 32-bitových

ROM a OTP MCU s integrovanými perifériami CAN a USB. ( www.infineon.com ).

Intel Corporation, najmä výrobca mikroprocesorov pre PC, vyrába tiež 8-bitové

MCU MCS 51/251 a výkonné 16-bitové MCS296.( www.intel.com ).

Page 7: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 7

Microchip Technology je jedným z najpopulárnejších výrobcov 8-bitových MCU

s označením PIC so širokou ponukou integrovaných periférií, CAN, USB, ovládače LCD

a pod. Na podporu aplikácií ponúka výborné vývojové prostriedky. ( www.microchip.com ).

National Semiconductor je výrobcom nízkopríkonových 8-bitových MCU, COP8,

16-bitových MCU CP16, CR3000, s rôznymi kapacitami pamätí a s integrovaným súborom

periférií. ( www.national.com ).

NetSilicon je výrobcom 32-bitových MCU na báze priemyselného štandardu ARM. (

www.netsilicon.com ).

Rabbit Semiconductor je výrobcom 8/16-bitových MCU, jadro procesora je

kompatibilné s populárnou Z80, Rabbit 2000 a Rabbit 3000. (

www.rabit.semiconductor.com).

Renesas Technology pokračuje vo vývoji MCU Hitachi a Mitsubischi, snáď najväčší

svetový výrobca. Ponúka MCU od 4-bitových po 32-bitové. 32-bitový MCU SuperHRISC, 16

a 8-bitové MCU, H8, 8-bitové MCU, 740 a 4-bitové MCU, 720. ( www.renesas.com ).

Silicon Labs je výrobcom rýchlych (20-100MIPS), 8-bitových MCU na báze

štandardu 8051 s pamäťou FLASH s bohatou výbavou A/D a D/A prevodníkov. (

www.silabs.com ).

ST Microelectronics je výrobcom 8-bitových MCU ST6 a ST7, 8/16-bitových MCU

ST9, 16-bitových MCU ST10 a 16/32-bitových na priemyselnom štandarde ARM7. (

www.st.com ).

Texas Instruments je výrobcom 16-bitových MCU z nízkou spotrebou, MSP430

s rozličnou kapacitou pamäte a súborob integrovaných periférií. ( www.ticom ).

Zilog je tradičným výrobcom 8-bitových MCU na jadre Z8 s kapacitou pamäte

programu od 4 do 64 kB, Z80 do 256 Kb pamäte programu a výkonnej triedy MCU, eZ80,

Z180. ( www.zilog.com ).

Z predchádzajúceho prehľadu výrobcov je vidieť, že v súčasnosti je v ponuke široká

škála mikrokontrolérov pre najrôznejšie aplikácie.

Mikrokontroléry sa dnes vyrábajú v širokom sortimente, od najjednoduchších 4-

bitových, v cenových reláciách hlboko pod 1 USD až po výkonné 32-bitové mikrokontroléry

určené pre najnáročnejšie aplikácie. V poslednom období sa popredný výrobcovia

mikrokontrolérov zameriavajú:

-na zvyšovanie „klasických“ technických parametrov, ako sú rýchlosť kapacita

integrovaných pamätí, zníženie spotreby a pod.

-na rozširovanie a zvyšovanie úžitkových vlastností MCU rozširovaním škály

integrovaných modulov a komunikačných podsystémov. Na komunikáciu s analógovým

prostredím sú to najmä Č/A a A/Č prevodníky a komparátory. Na digitálnu komunikáciu sa

okrem klasického USARTu využívajú integrované radiče TWI, CAN, USB, TCP/IP, RF

a pod. Medzi integrované moduly môžeme zaradiť časovače/čítače, dohliadacie obvody

MCU, pamäte EEPROM, radiče LCD zobrazovacích prvkov a mnohé ďalšie.

Page 8: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 8

2 MIKROPOČÍTAČE

Pod pojmom počítač si predstavíme zariadenie určené na spracovanie údajov.

Spracovávané údaje môžu mať rôzny charakter a rôznu reprezentáciu. Sú to štatistické

údaje, rôzne ekonomické ukazovatele, údaje reprezentované signálmi, údaje o rôznych

technologických veličinách a podobne. Pretože charakter a rozsah úloh riešených pomocou

počítačov je mimoriadne rozmanitý, stretávame sa aj s rôznymi druhmi počítačov, od

najjednoduchších mikrokontorlérov až po zložité počítačové systémy. Všetky súčasné

počítače majú však jedno spoločné, pracujú na základe programu, ktorý vytvoril človek,

návrhár programátor. Číslicový počítač využíva pri svojej činnosti tri základné funkčné

celky (podsystémy). Sú to procesor, pamäť a vstupno-výstupný podsystém zabezpečujúci

styk počítača s okolím.

Pamäťový

podsystém

(pamäť)

Centrálna

procesorová

jednotka

(procesor)

Vstupno-

výstupný

podsystém

0 1 1 1 0 1 1 0

Užív

ate

ľ (o

ko

lie)

0 1 1 0 1 1 0 00 0 0 0 1 1 1 1

0 0 0 1 1 1 1 0

Obr.2 Základné podsystémy číslicového počítača

Pamäťový podsystém slúži na uchovávanie dát, ktoré reprezentujú

-kód programu

-spracovávané údaje a výsledky operácií

Centrálna procesorová jednotka adresuje príslušné inštrukcie programu, vyberá ich z pamäte,

dekóduje ich a realizuje odpovedajúcu operáciu.

Vstupno-výstupný podsystém slúži na komunikáciu s užívateľom, prípadne s vonkajším

prostredím.

Integrovaním uvedených troch základných podsystémov do jedného obvodu vynikne

monolitický, jednočipový mikropočítač, často tiež označovaný ako mikrokontrolér

(microcontroller).

Na základe vnútorného usporiadania jednotlivých podsystémov mikropočítača sa dnes

stretneme s dvoma základnými koncepciami. Jedna sa nazýva Von Neumanova koncepcia

a druhá Harwardská. Štruktúra počítača s Von Neumanovou koncepciou je uvedená na obr.3.

Page 9: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 9

Register inštrukcie Čítač inštrukcií

Riadiaca jednotka

dekodér inštrukcií

Aritmeticko

logická jednotka,

pole registrov

CPU

Pamäť programu a pamäť dát

Pamäťový

podsystém

0 1 1 1 0 0 0 1

0 0 1 0 1 1 0 1

0 1 1 1 0 0 0 0

Obr.3 Von Neumanova koncepcia

Štruktúra číslicového počítača s Harwardskou koncepciou je uvedená na obr.4.

Register inštrukcie Čítač inštrukcií

Riadiaca jednotka

dekodér inštrukcií

Pamäť programu

Aritmeticko

logická jednotka,

pole registrov

Kód operácie Operandy

Pamäť dát

0 1 1 1 0 1 0 1 1 0 1 1

1 1 1 1 0 1 0 1 1 0 0 1

0 0 1 1 1 1 1 1 1 0 0 1

1 0 1 0 1 0 1 0

1 0 1 0 0 0 1 1

1 0 1 0 0 0 0 0

0 0 1 0 1 0 1 0

CPU

Pamäťový podsystém

Obr.4 Harwardská koncepcia

Von Neumanova koncepcia je charakterizovaná tým, že využíva spoločnú pamäť pre

uchovanie kódu programu a dát. Z tejto skutočnosti vyplýva možnosť efektívnejšieho využitia

pamäťového priestoru a možnosť jednoduchej modifikácie kódu programu v priebehu jeho

realizácie. Užívateľ si sám organizuje rozdelenie pamäťového priestoru na segment pre

uloženie programového kódu a segment slúžiaci na uchovanie dát. Je len na programátorovi

aby program navrhol tak, aby v priebehu jeho výkonu nedošlo k nežiadúcemu prepísaniu

kódu programu.

Harwardská koncepcia predpokladá dva oddelené pamäťové priestory. V jednej

časti je uložený kód programu, prípadne konštanty a v druhej časti sú uložené spracovávané

údaje. Oddelené pamäťové priestory dovoľujú použiť rôznu dĺžku slova pre spracovávané

dáta a inštrukcie programu. Napríklad pri MCU ATMEL AVR je dĺžka slova v pamäti údajov

jeden byt, slovo v pamäti programu obsahuje dva byty. Ďalšou výhodou Harwardskej

koncepcie je možnosť paralelného výberu inštrukcie a operandov, pretože centrálna

procesorová jednotka využíva dve nezávilé pamäte a prístupové zbernice. Toto usporiadanie

dovoľuje jednoducho zvýšiť paralelizmus v procese spracovania inštrukcií.

Page 10: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 10

Ďalším kritériom hodnotenia mikropočíačov je používaný inštrukčný súbor. Na

základe zložitosti inštrukčného súboru je možné mikropočítače rozdeliť do dvoch tried, ktoré

sú označované skratkami CISC a RISC. Mikropočítače CISC sú charakterizované zložitejším

inštrukčným súborom, pričom mnohé inštrukcie sú realizované vo viacerých strojových

cykloch. Využívajú veľa rôznych adresovacích režimov (až 25). V inštrukčnom súbore sa

občas objavujú inštrukcie aj s troma operandami. Vznik procesorov tejto triedy je čiastočne

podmienený ekonomickými hľadiskami. V období, keď pamäť počítača tvorila až 30%

celkovej ceny sa návrhári snažili o dosiahnutie čo najväčšej hustoty kódu voľbou bohatého

inštrukčného súboru. Neskôr sa vyvíjajú procesory s redukovaným inštrukčným súborom,

ktorý obsahuje menší počet základných inštrukcií a vykonávajú sa v jednom strojovom cykle.

Teoreticky, v procesoroch typu RISC by mal inštrukčný súbor obsahovať len jednoslovné

inštrukcie realizované v jednom strojovom cykle. V praktických prípadoch je toto pravidlo

málokedy dodržané. Rozdiel medzi inštrukčným súborom procesorov RISC a CISC sa

pomaly zmenšuje, v dnešných RISC-procesoroch sa objavujú viacslovné inštrukcie, ako aj

inštrukcie vykonávané vo viacerých strojových cykloch. Viacerí autori sa zhodujú v tom, že

dnes sa už žijeme v tzv. post-RISC-ovej dobe a uvedené rozdelenie procesorov má skôr

komerčné a obchodné ako pragmatické a teoretické dôvody.

2.1 ZÁKLADNÉ ČASTI MIKROPOČÍTAČA

Činnosť mikropočítača je riadená programom. Program obsahuje popis krokov, ktoré

budú postupne vykonávané. Jednotlivé kroky sú formálne popísané pomocou inštrukcií.

Inštrukcia je teda predpis čo má mikropočítač vykonávať a s akými dátami (operandami).

Inštrukcia sa skladá z dvoch častí:

-kód operácie predpisuje aká činnosť sa má realizovať,

-adresová časť obsahuje adresy operandov, prípadne priamo operandy.

Ako sme už spomenuli v predchádzajúcej kapitole, medzi základné časti mikropočítača patrí:

centrálna procesorová jednotka,

pamäťový podsystém a

vstupno-výstupný podsystém.

2.1.1 Centrálna procesorová jednotka, (CPJ)

Centrálna procesorová jednotka je ústrednou časťou mikropočítača a obsahuje:

- aritmeticko logickú jednotku,

- riadiacu jednotku, (radič),

- register inštrukcií,

- dekóder inštrukcií,

- programový čítač, (čítač inštrukcií),

- register príznakov (stavové slovo),

- pole univerzálnych (pracovných) registrov,

- a ďalšie obvody (ukazovateľ zásobníka, niekedy HW zásobník a pod.)

Na obr.5 je uvedená bloková štruktúra centrálnej procesorovej jednotky Harwardského typu.

Page 11: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 11

programový

čítač

register

inštrukcie

dekóder

inštrukcií

riadiaca

jednotka

register

adresy

pole registrov

aritmeticko

logická

jednotka

register

príznakov

ad

r.in

štr

ukcie

inštr

ukcia

ad

resa

t

ta

Pamäť programu Pamäť dát

riadenie

CPJ

Obr.5 Zjednodušená bloková štruktúra centrálnej procesorovej jednotky

V registri nazvanom programový čítač je uložená adresa inštrukcie, ktorá sa má

v nasledujúcom/cich strojovom/vých cykle/och realizovať. Popíšme postup spracovania

inštrukcie.

-inštrukcia adresovaná obsahom čítača inštrukcií sa presunie z pamäte programu do

registra inštrukcií.

-v dekódery inštrukcií sa dekóduje časť inštrukcie, ktorú nazývame kód operácie a na

základe výsledku dekódovania riadiaca jednotka generuje odpovedajúce riadiace signály.

Tieto riadiace signály riadia presun údajov zo zdrojových do cieľových miest, riadia postup

spracovania operandov v aritmetickej a logickej jednotke, modifikujú obsah programového

čítača, riadia nastavenie príznakov, riadia prenos dát medzi CPJ a pamäťovým, prípadne V/V

podsystémom a podobne. Obsah čítača inštrukcií sa inkrementuje, prípadne modifikuje

a adresuje nasledovnú inštrukciu.

Na základe uvedeného môžeme proces spracovania inštrukcie rozdeliť na dve

základné fázy. Sú to výberová fáza, v ktorej sa presunie inštrukcia z pamäte programu do

registra inštrukcií a výkonná fáza, v ktorej sa na základe kódu operácie vykoná samotná

operácia.

Spracovávané dáta, operandy sú spracovávané v aritmeticko-logickej jednotke.

Aritmeticko logická jednotka môže byť reprezentovaná kombinačným obvodom, ktorý na

základe riadiacich signálov vykoná príslušnú operáciu s jedným, alebo viacerými operandami.

Výsledok operácie sa zapíše do cieľového registra. Na základe výsledku operácie sa môžu

modifikovať aj príznakové bity v registri príznakov, často nazývaným „stavové slovo“.

Súčasťou centrálnej procesorovej jednotky sú i pracovné registre, ktoré slúžia na uchovávanie

operandov, ktoré sa v priebehu realizácie programu často opakujú. Poznamenajme, že

najjednoduchšie typy mikrokontrolérov neobsahujú pamäť dát a všetky údaje sú uchovávané

práve v poli pracovných (univerzálnych) registrov.

Page 12: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 12

2.1.2 Pamäťový podsystém

Pamäťový podsystém slúži na uchovanie kódu programu a spracovávaných údajov,

medzivýsledkov a výsledkov. Z hľadiska energetickej závislosti je možné pamäte rozdeliť do

dvoch základných kategórií.

Energeticky závislá pamäť.

Je to pamäť, ktorá v priebehu svojej činnosti - pamätania musí byť pripojená na zdroj

napájacieho napätia. V prípade odpojenia od zdroja energie stráca uložený obsah. Tieto

pamäte sú určené na zápis a čítanie obsahu, RWM pamäť. Z hľadiska vnútornej štruktúry

pamäťového prvku ich rozdeľujeme na dynamické a statické.

Energeticky nezávislá pamäť.

Energeticky nezávislá pamäť si uchováva svoj obsah aj po odpojení napájacieho

napätia, čo ich predurčuje predovšetkým na uchovávanie takých údajov, ktoré nemôžu byť

stratené ani pri odpojení napájania. V prípade mikrokontrolérov sa často využívajú na

uchovávanie kódu programu, konštánt a podobne. Medzi energeticky nezávislé pamäte

môžeme zahrnúť aj diskové pamäte, magnetické páskové pamäte a mnohé ďalšie, ktoré nás

z pohľadu aplikácií mikrokontrolérov nebudú zaujímať. Budeme sa venovať len pamätiam

s ľubovolným prístupom, RAM pamäť. Dnes sa stretávame s nasledovnými energeticky

nezávislými pamäťami RAM:

ROM (Read Only Memory) Pamäť určená výhradne na čítanie. Obsah je je pevne

zadaný v procese výroby poslednou technologickou maskou.

EPROM (Erasable Programmable Read Only Memory) Programovanie uvedeného

typu pamäti sa realizuje pomocou technických prostriedkov – programátorov.

Naprogramovaný obsah je možné zmazať pomocou zariadení produkujúcich žiarenie

definovanej vlnovej dĺžky (najčastejšie UV žiarenie) a potom spätne naprogramovať iným

obsahom. Nevýhodou týchto pamätí je pomerne drahé púzdro.

OTP ( One Time Programmable) Jeden krát programovateľná pamäť. Pamäť OTP sa

technológiou a vnútornou štruktúrou podobá na pamäť typu EEPROM, s tým rozdielom, že

tieto pamäte sú zapúzdrené do lacnejšieho púzdra – bez okienka určeného na mazanie obsahu.

Sú vhodné na uchovanie konštánt a užívateľského programu, pri stredných objemoch

produkcie. Dajú sa jedenkrát naprogramovať. Ich obsah sa po programovaní nedá zmazať.

EEPROM (Electricaly Erasable Programmable Read Only Memory) V tomto type

pamätí je nahradené relatívne obtiažne mazanie programu pomocou UV žiarenia, mazaním

obsahu pamäťovej bunky elektrickým impulzom. Obsah pamäte je možné prepisovať

selektívne, s prístupom k bytu. V prípade modifikácie obsahu jednej pamäťovej bunky nie je

potrebné mazať obsah celej pamäte. Proces zápisu a čítania obsahu je však pomalší. Z tohto

dôvodu sa uvedený typ pamäte používa na ukladanie údajov, ku ktorým sa v procese výkonu

programu pristupuje zriedkavejšie. Tieto údaje sa môžu meniť, ale ich hodnoty musia zostať

zachované aj po odpojení napájacieho napätia. V pamätiach typu EEPROM sa najčastejšie

uchovávajú kalibračné konštanty, registračné a evidenčné údaje adresy zariadení a podobne.

FLASH EEPROM ( FLASH Electricaly Erasable Programmable Read Only Memory)

Na rozdiel od pamätí EEPROM sa obsah celej pamäte, prípadne pamäťového segmentu,

bloku, alebo stránky vymaže naraz pomocou elektrického impulzu. Údaje je možné zapisovať

po jednotlivých adresách, ale mazanie obsahu sa realizuje v celej pamäti, alebo segmente

pamäte naraz. Uvedený typ pamäti sa často používa na uloženie kódu programu.

FRAM (Ferroelectric random access memories) feroelektrické pamäte s ľubovolným

prístupom. Na uloženie binárnej informácie využívajú polarizáciu feroelektrického materiálu.

Prístupové doby sa pohybujú na úrovni 50-100 ns. Pri prepisovaní obsahu je možné selektívne

pristupovať ku každému slovu pamäte.

Page 13: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 13

2.1.3 Vstupno-výstupný podsystém

Na komunikáciu centrálnej procesorovej jednotky s okolím sa využívajú tri základné

princípy. Sú to:

- programový styk s periférnymi modulmi,

- komunikácia s využitím prerušovacieho systému,

- priamy prístup do pamäte.

Všetky časti mikropočítača, ktoré zabezpečujú spoluprácu mikropočítača s okolím

budeme zahŕňať pod tzv. vstupno-výstupný podsystém. Pretože do vstupno-výstupného

podsystému patrí množstvo rôznych periférnych obvodov a modulov obmedzíme sa len na tie,

s ktorými sa najčastejšie stretneme ako s integrovanými perifériami bežných

mikrokontrolérov. Potom do vstupno-výstupného podsystému zahrnieme:

- prerušovací podsystém,

- vstupno-výstupné brány, (paralelné komunikačné rozhranie),

- sériové komunikačné rozhranie,

- časovač/čítač,

- podsystém Č/A a A/Č prevodníkov a analógového komparátora,

- pamäť EEPROM

- WATCHDOG časovač a ďalšie špeciálne obvody.

2.1.3.1 Prerušovací podsystém

V mnohých aplikáciach musia mikropočítače reagovať na rôzne, asynchrónne udalosti.

Ako príklad môžeme uviesť stlačenie tlačidla obsluhou, pričom na túto udalosť má

miktropočítač primerane reagovať. Je zrejmé, že s podobnou situáciou sa môžeme často

stretnúť v aplikáciách pri riadení technologických procesov, kedy na vstupy mikropočítača sú

privedené dôležité technologické veličiny, ktoré charakterizujú stav riadeného systému. Stav

týchto veličín môžeme sledovať prostredníctvom procesora tak, že periodicky testujeme

vstupné signály. Ak je zaznamenaná príslušná zmena, potom procesor na ňu príslušne reaguje.

Je zrejmé, že uvedený postup priebežným testovaním vstupných veličín neúmerne zaťažuje

procesor. Čas procesora, ktorý môže byť využitý na realizáciu programu je využívaný na

testovanie príslušných vstupov. Preto, aby sme sa vyhli uvedeným nedostatkom býva

súčasťou MCU i tzv. prerušovací podsystém, ktorý pri výskyte definovanej udalosti (

najčastejšie interpretovaná ako zmena logickej úrovne ) zabezpečí prerušenie práce procesora,

identifikuje zdroj prerušenia, skočí na obslužný podprogram prerušenia a po jeho vykonaní sa

vráti na inštrukciu, ktorá sa mala v nasledujúcom cykle vykonávať. Z uvedeného vyplýva, že

pred vstupom do obslužného programu prerušenia musí byť uchovaná tzv. návratová adresa,

t.j. adresa od ktorej má procesor pokračovať po skončení obsluhy prerušenia. Na uchovanie

návratovej adresy, prípadne ďalších dôležitých registrov sa používa zásobník. Prerušovací

podsystém musí byť schopný obslúžiť viacero zdrojov prerušenia. Pri mikrokontroléroch

môžeme tieto zdroje rozdeliť na interné a externé. Medzi interné zdroje prerušení patria

integrované moduly MCU ako sú časovač/čítač, moduly sériových rozhraní, analógové

komparátory, prevodníky a ďalšie integrované moduly. Väčšina mikrokontrolérov obsahuje

Page 14: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 14

tiež externé zdroje prerušení, ktoré je možné využívať v najrôznejších aplikáciách. Pokiaľ sa

súčasne (v priebehu jedného strojového cyklu ) vyskytne od rôznych zdrojov viacero žiadostí

o prerušenie musí prerušovací podsystém rozhodnúť, ktorá žiadosť bude obslúžená ako prvá.

Toto rozhodovanie sa realizuje na základe pridelených priorít prerušení. Každý potenciálny

zdroj prerušenia má pridelenú tzv. prioritu prerušenia a podľa tejto pridelenej priority sa

rozhoduje o poradí obsluhy. Prerušovací podsystém preto obsahuje prioritný dekóder na

vyhodnotenie poradia obsluhy prerušení. Súčasťou prerušovacieho podsystému je aj

maskovací register prerušení, ktorý umožňuje separátne povoliť, alebo zakázať prerušenia od

jednotlivých zdrojov.

2.1.3.2 Paralelné komunikačné rozhranie

Často používaným rozhraním pre vstup a výstup informácií je paralelné komunikačné

rozhranie, brána, (pot). Paralelné rozhranie je realizované ako súbor vývodov

prostredníctvom, ktorých sa informácia prenáša z procesora do okolia - výstupná brána, alebo

z okolia do procesora – vstupná brána. Z dôvodov úspory počtu vývodov IO a vyššej

flexibility sú vo väčšine mikrokontrolérov vstupné a výstupné brány priradené tým istým

fyzickým vývodom púzdra a programovými prostriedkami je možné definovať ich režim

činnosti (vstup/výstup). Programátor definuje režim príslušného vývodu. Hovoríme o tzv.

dvojhodnotových (digitálnych) vstupno-výstupných vývodoch, často označovaných skratkou

DIO.

2.1.3.3 Sériové komunikačné rozhranie

Údaje je možné prenášať aj prostredníctvom sériového rozhrania bit po bite. Sériový

prenos dát je dnes pomerne rozšírený spôsob prenosu informácií. Je zrejmé, že pri sériovom

prenose dát je potrebný menší počet signálových vodičov resp. prenosových kanálov než pri

prenose paralelnom. Sériový prenos môžeme rozdeliť na synchrónny a asynchrónny.

Pri synchrónnom prenose sú generátory hodinového signálu vysielača a prijímača dát

vzájomne synchronizované, čím je zabezpečené, že prijímač číta prenášané bity v správnych

časových okamžikoch. Synchronizácia je zabezpečená buď prostredníctvom ďalšieho vodiča

so spoločným hodinovým signálom (systém s distribuovanými hodinami, napr. SPI, TWI

a pod.), alebo je hodinový signál obsiahnutý v prenášaných dátach, z ktorých sa na strane

prijímača obnoví. Nevýhodou synchrónneho sériového prenosu je požiadavka na udržanie

synchronizácie generátorov hodinových signálov. To v praxi znamená použitie ďalšieho

vodiča na prenos hodinového signálu, alebo špeciálneho obvodového riešenia, ktoré

zabezpečujú synchronizáciu generátorov hodinových signálov z prenášaného toku dát.

Pri asynchrónnom prenose nie je potrebné, aby generátory hodinových signálov boli

presne synchronizované. Vlastný princíp prenosu dovoľuje isté rozdiely vo frekvencii

generátora na strane vysielača a prijímača. Prenos dátového slova začína START bitom.

Prijímač na základe prijatého START bitu definuje počiatok procesu prijímania dátového

slova. Prenos dátového slova býva ukončený STOP bitom. Prijímač potom čaká na príjem

ďalšieho START bitu.

2.1.3.4 Modul časovačov/čítačov

Page 15: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 15

Medzi často používané integrované moduly mikrokontrolérov patria časovače a čítače

externých udalostí. Časovače nachádzajú uplatnenie pri generovaní presných časových

intervalov, oneskorení, na generovanie dvojhodnotových priebehov a pod. Prostredníctvom

časovačov je možné tiež generovať šírkovo modulovaný dvojhodnotový signál – PWM. Tieto

isté obvodové prostriedky môžu pracovať aj v režime čítačov externých udalostí. V tomto

režime dokážu počítať výskyt definovaných externých udalostí na priradenom vstupe.

2.1.3.5. Podsystém A/Č a Č/A prevodníkov a analógový komparátor

Mikrokontroléry sú často používané v aplikáciách, v ktorých je potrebné komunikovať

so spojitým okolím. Najmä v prípade meracích a diagnostických zariadení, pri riadení

technologických procesov a v systémoch spracovania signálov sa stretávame s rôznymi

spojitými veličinami, ktorých hodnotu je potrebné merať a transformovať do tvaru vhodného

na ďalšie spracovanie. Na riešenie tejto úlohy slúžia analógovo-číslicové a číslicovo-

analógové prevodníky. Prevodníky zabezpečujú komunikáciu mikrokontroléra so spojitým

analógovým prostredím.

Analógovo-číslicové prevodníky priradia úrovni vstupného napätia odpovedajúci

binárny ekvivalent, ktorý je možné ďalej spracovávať v číslicových obvodoch MCU.

Naopak, číslicovo-analógové prevodníky transformujú binárne kódovanú hodnotu na

príslušnú úroveň výstupného napätia. Číslicovo-analógový prevod je u väčšiny

mikrokontrolérov realizovaný prostredníctvom impulzne šírkovej modulácie, PWM.

Analógové komparátory sú moduly, ktoré sú určené na porovnanie úrovní dvoch

napätí. Majú dva vstupy, invertujúci a neinvertujúci, na ktoré môžeme priviesť dve veličiny.

Na základe ich porovnania sa výstup komparátora nastaví na hodnotu logickej jednotky,

respektíve logickej nuly. Hodnotu na výstupe komparátora je možné čítať programovými

prostriedkami.

2.1.3.6. Pamäť EEPROM

Modul EEPROM pamäti sa pomerne často vzskztuje v štruktúrach mikrokontrolérov.

Slúži na uchovávanie kalibračných konštánt, adresy zariadenia prípadne ďalších údajov, ktoré

nesmieme stratiť ani pri výpadku napájacieho napätia. Pamäť EEPROM je chápaná ako

periféria na uchovávanie údajov a nemá funkciu operačnej pamäti.

2.1.3.7. WATCHDOG časovač

V priebehu realizácie (behu) programu sa môže náhodne vyskytnúť chyba

spôsobená náhodnými vonkajšími vplyvmi (silné elektromagnetické rušenie, pokles

napájacieho napätia a pod.) Výskyt takejto chyby môže spôsobiť nekorektný priebeh

programu a tým aj nesprávnu funkciu celého zariadenia. Aby bolo možné toto nesprávne

správanie vylúčiť mikrokontroléry obsahujú dohliadací obvod, ktorý sa nazýva WATHDOG.

Jeho úlohou je odhaliť nekorektný priebeh programu a uviesť mikrokontrolér do definovanéo

stavu. Systém WACHDOG je zložený z nezávislého časovača, ktorého výstup je pripojený na

reštartovacie obvody mikrokontroléra. V prípade ak je aktivovaný WATCHDOG a obsah

časovača presiahne maximálnu hodnotu dochádza k reštartovaniu mikrokontroléra a výkon

Page 16: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 16

programu pokračuje od začiatku. AK v príslušnej aplikácii je povolený WATCHDOG musí sa

program starať o periodické nulovanie obsahu časovača WATCHDOG. V prípade, ak

s ľubovoľných dôvodov prestane procesor korektne vykonávať inštrukcie programu, potom

ani časovač WATCHDOG nebude periodicky nulovaný a po istej dobe dosiahne jeho obsah

maximálnu hodnotu čo spôsobí reštartovanie obvodu.

Okrem uvedených súčastí vstupno-výstupného podsystému sa dnes môžeme stretnúť

so širokou škálou ďalších integrovaných periférií, ktoré pomáhajú rozširovať aplikačné

oblasti týchto obvodov.

2.2 MIKROKONTROLÉRY ATMEL AVR

Spoločnosť ATMEL bola založená v roku 1984. Od svojho vzniku bola zameraná na

výrobu polovodičových integrovaných obvodov najmä pamäťových prvkov (najmä FLASH

a EEPROM pamätí), pokročilých logických obvodov a polovodičových prvkov pre RF

techniku. V roku 1995 v Nórsku vyvinuli dvaja výskumní pracovníci jadro centrálnej

procesorovej jednotky, ktoré prevzala spoločnosť ATMEL. Jadro mikrokontroléra bol

doplnené o pamäťový podsystém a nevyhnutné periférne moduly. V roku 1997 spoločnosť

ATMEL predstavila prvý 8-bitový RISC mikrokontrolér. V priebehu nasledujúcich 6-tich

rokov sa mikrokontrolér AVR stal najpredávanejším 8-bitovým FLASH mikrokontrolérom na

svetovom trhu. 31. marca 2004 spoločnosť ATMEL predala 500 miliónty mikrokontrolér

AVR. Len pre porovnanie, spoločnosť MICROCHIP tento počet predaných 8-bitových

mikrokontrolérov PIC dosiahla už v roku 1998 a podľa interných zdrojov (Microchip

Technology) v roku 2003 dosiahla prvé miesto na svete v počte predaných 8-bitových MCU.

Podľa oficialnych zdrojov, však prvé miesto v počte predaných MCU patrí spoločnosti

Freescale Semiconductor (Motorola) s tesným predstihom pred spoločnosťou Renesas

Technology (Hitachi a Mitsubishi).

Mikrokontroléry AVR ATMEL sú navrhnuté na RISC jadre, s jednoduchým

inštrukčným súborom, s dobre definovanou štruktúrou vstupno-výstupných obvodov. Pracujú

s minimálnym počtom externých komponentov. Obsahujú interný oscilátor, časovače/čítače,

pamäťový modul EEPROM,USART, SPI, TWI, dvojhodnotové vstupo-výstupy s internými

pull-up odpormi, PWM, analógový komparátor, WDT, A/Č prevodník a ďalšie podporné

obvody.

Inštrukčný súbor je navrhnutý s ohľadom na optimalizáciu dĺžky programového kódu.

Programový kód je možné písať v jazyku symbolických adries (assembler) v užívateľsky

príjemnom vývojovom prostredí AVR STUDIO, alebo v niektorom s dostupných vyšších

programovacích jazykov, najrozšírenejší je jazyk C. V priebehu vývoja aplikácie návrhár

ocení skutočnosť, že pamäť programu je pamäť typu FLASH, ktorú môže až 10 000 krát

preprogramovať.

Mikrokontroléry AVR ATMEL sa vyrábajú v rôznych modifikáciách od

najjednoduchších v púzdre s 8-mi vývodmi s kapacitou pamäte programu 1kB, určené pre

jednoduché, lacné aplikácie až po výkonné systémy so 128 kB pamäte programu, ktoré sú

určené pre náročnejšie aplikácie.

V súčasnosti sa vo výrobnom programe firmy ATMEL objavujú tri základné rady 8-bitových

mikrokontrolérov. Sú to:

- AVR, MCU AT90S1200, AT90S2313

Page 17: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 17

- megaAVR, MCU ATmega8 až ATmega128

- tinyAVR, MCU ATtiny11 až ATtiny28

Základné parametre jednotlivých obvodov sú uvedené v nasledujúcej tabuľke.

Ty

p

FL

AS

H

(Kb

yt)

EE

PR

OM

(Kb

yt)

SR

AM

(by

t)

V/V

(vý

vo

dy

)

F.m

ax

(MH

z)

Vcc

(V)

16

-bit

časo

va

č

8-b

it

časo

va

č

PW

M

(ka

lov

)

AT90S1200 1 0.0625 0 15 12 2.7-6.0 0 1 0

AT90S2313 2 0.125 128 15 10 2.7-6.0 1 1 1

ATmega128 128 4 4096 53 16 4.5-5.5 2 2 8

ATmega128L 128 4 4096 53 8 2.7-5.5 2 2 8

ATmega16 16 0.5 1024 32 16 4.5-5.5 1 2 4

ATmega162 16 0.5 1024 35 16 4.5-5.5 2 2 4

ATmega162V 16 0.5 1024 35 1 1.8-3.6 2 2 4

ATmega165 16 0.5 1024 54 16 4.5-5.5 1 2 4

ATmega165V 16 0.5 1024 54 8 1.8-5.5 1 2 4

ATmega168 16 0.5 1024 23 20 1.8-5.5 1 2 3

ATmega169 16 0.5 1024 54 16 4.5-5.5 1 2 4

ATmega169V 16 0.5 1024 54 1 1.8-5.5 1 2 4

ATmega16L 16 0.5 1024 32 8 2.7-5.5 1 2 4

ATmega32 32 1 2048 32 16 4.0-5.5 1 2 4

ATmega325 32 1 2048 53 16 1.8-5.5 1 2 4

ATmega3250 32 1 2048 68 16 1.8-5.5 1 2 4

ATmega32L 32 1 2048 32 8 2.7-5.5 1 2 4

ATmega48 4 0.256 512 23 20 1.8-5.5 1 2 3

ATmega64 64 2 4096 53 16 4.5-5.5 2 2 8

ATmega645 64 2 4096 53 16 1.8-5.5 1 2 4

ATmega6450 64 2 4096 68 16 1.8-5.5 1 2 4

ATmega64L 64 2 4096 53 8 2.7-5.5 2 2 8

ATmega8 8 0.5 1024 23 16 4.5-5.5 1 2 3

ATmega8515 8 0.5 512 35 16 4.5-5.5 1 1 3

ATmega8515L 8 0.5 512 35 8 2.7-5.5 1 1 3

ATmega8535 8 0.5 512 32 16 4.5-5.5 1 2 4

ATmega8535L 8 0.5 512 32 8 2.7-5.5 1 2 4

ATmega88 8 0.5 1024 23 20 1.8-5.5 1 2 3

ATmega8L 8 0.5 1024 23 8 2.7-5.5 1 2 3

ATtiny11 1 6 6 2.7-5.5 1

ATtiny12 1 0.0625 6 8 1.8-5.5 1

ATtiny13 1 0.064 64B+ 6 20 1.8-5.5 1 2

ATtiny15L 1 0.0625 6 1.6 2.7-5.5 2 1

ATtiny2313 2 0.128 128 18 20 1.8-5.5 1 1 4

ATtiny26 2 0.125 128 16 16 4.5-5.5 2 2

ATtiny26L 2 0.125 128 16 8 2.7-5.5 2 2

ATtiny28L 2 32 11 4 2.7-5.5 1

ATtiny28V 2 32 11 1 1.8-5.5 1

Page 18: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 18

Tabuľka 1. 8-bitové mikrokontroléry ATMEL AVR

TY

P

RT

C

SP

I

UA

RT

TW

I

ISP

A/Č

pre

vo

dn

ík

A.

ko

mp

ará

tor

BO

D

WD

T

Int.

OS

C

HW

sob

ičk

a

Pre

ruše

nia

Ex

tern

é p

rer.

S.

pro

gra

m.

AT90S1200 Nie Nie Nie Nie Áno 0 Áno Nie Áno Nie Nie 3 1 Nie

AT90S2313 Nie Nie Áno Nie Áno 0 Áno Nie Áno Nie Nie 10 2 Nie

ATmega128 Áno 1 2 Áno Áno 8 Áno Áno Áno Áno Áno 34 8 Áno

ATmega128L Áno 1 2 Áno Áno 8 Áno Áno Áno Áno Áno 34 8 Áno

ATmega16 Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 20 3 Áno

ATmega162 Áno 1 2 Nie Áno 0 Áno Áno Áno Áno Áno 28 3 Áno

ATmega162V Áno 1 2 Nie Áno 0 Áno Áno Áno Áno Áno 28 3 Áno

ATmega165 Áno 1+USI 1 Áno Áno 8 Áno Áno Áno Áno Áno 23 17 Áno

ATmega165V Áno 1+USI 1 Áno Áno 8 Áno Áno Áno Áno Áno 23 17 Áno

ATmega168 Áno 1+UT 1 Áno Áno 8 Áno Áno Áno Áno Áno 26 26 Áno

ATmega169 Áno 1+USI 1 Nie Áno 8 Áno Áno Áno Áno Áno 23 17 Áno

ATmega169V Áno 1+USI 1 Nie Áno 8 Áno Áno Áno Áno Áno 23 17 Áno

ATmega16L Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 20 3 Áno

ATmega32 Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 19 3 Áno

ATmega325 Áno 1+USI 1 Áno Áno 8 Áno Áno Áno Áno Áno 23 17 Áno

ATmega3250 Áno 1+USI 1 Áno Áno 8 Áno Áno Áno Áno Áno 32 17 Áno

ATmega32L Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 19 3 Áno

ATmega48 Áno 1+UT 1 Áno Áno 8 Áno Áno Áno Áno Áno 26 26 Áno

ATmega64 Áno 1 2 Áno Áno 8 Áno Áno Áno Áno Áno 34 8 Áno

ATmega645 Áno 1+USI 1 Áno Áno 8 Áno Áno Áno Áno Áno 23 17 Áno

ATmega6450 Áno 1+USI 1 Áno Áno 8 Áno Áno Áno Áno Áno 32 17 Áno

ATmega64L Áno 1 2 Áno Áno 8 Áno Áno Áno Áno Áno 34 8 Áno

ATmega8 Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 18 2 Áno

ATmega8515 Nie 1 1 Nie Áno 0 Nie Áno Áno Áno Áno 16 3 Áno

ATmega8515L Nie 1 1 Nie Áno 0 Nie Áno Áno Áno Áno 16 3 Áno

ATmega8535 Nie 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 20 3 Áno

ATmega8535L Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 20 3 Áno

ATmega88 Áno 1+UT 1 Áno Áno 8 Áno Áno Áno Áno Áno 26 26 Áno

ATmega8L Áno 1 1 Áno Áno 8 Áno Áno Áno Áno Áno 18 2 Áno

ATtiny11 Nie 0 0 Nie Nie 0 Áno Nie Áno Áno Nie 4 1 Nie

ATtiny12 Nie 0 0 Nie Áno 0 Áno Áno Áno Áno Nie 5 1 Nie

ATtiny13 Nie 0 0 Nie Áno 4 Áno Áno Áno Áno Nie 9 6 Áno

ATtiny15L Nie 0 0 Nie Áno 4 Áno Áno Áno Áno Nie 8 1+ Nie

ATtiny2313 Nie USI 1 Nie Áno 0 Áno Áno Áno Áno Nie 8 2 Áno

ATtiny26 Nie USI 0 Nie Áno 11 Áno Áno Áno Áno Nie 11 1 Nie

ATtiny26L Nie USI 0 Nie Áno 11 Áno Áno Áno Áno Nie 11 1 Nie

ATtiny28L Nie 0 0 Nie Nie 0 Áno Nie Áno Áno Nie 5 2+ Nie

Page 19: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 19

ATmega8

RESET(PC6)

PD0(RxD)

PD1(TxD)

PD2(INT0)

PD3(INT1)

PD4(T0/XCK)

Vcc

GND

PB6(XTAL1/OSC1)

PB7(XTAL2/OSC2)

PD5(T1)

PD6(AIN0)

PD7(AIN1)

PB0(ICP1)

PB1(OC1A) PB2(SS/OC1B)

PB3(MOSI/OC2)

PB4(MISO)

PB5(SCK)

AVcc

AREF

GND

PCO(ADC0)

PC1(ADC1)

PC2(ADC2)

PC3(ADC3)

PC4(ADC4/SDA)

PC5(ADC5/SDL)

ADC7*

ADC8*

* len v púzdre TQFP 32

1 28

14

RESET(PC6)

PD0(RxD)

PD1(TxD)

PD2(INT0)

PD3(INT1)

PD4(TO/XCK)

Vcc

GND

PD5(T1)

PD6(AIN0)

PD7(AIN1)

PB0(ICP1) PB1(OC1A)

PB2(SS/OC1B)

PB3(MOSI/OC2)

PB4(MISO)

PB5(SCK)

AVcc

GND

PC0(ADC0)

PC1(ADC1)

PC2(ADC2)

PC3(ADC3)

PC4(ADC4/SDA)

AREF

PC5(ADC5/SDL)

15

ATtiny28V Nie 0 0 Nie Nie 0 Áno Nie Áno Áno Nie 5 2+ Nie

Tabuľka 1. (pokračovanie) 8-bitové mikrokontroléry ATMEL AVR

3 ATmega8, ATmega8L

Základné vlastnosti

Výkonný, nízkopríkonový AVR 8-bitový mikrokontrolér,

pokročilá RISC architektúra

130 inštrukcií

32x8 univerzálnych registrov

16 MIPS pri 16MHz

integrovaná násobička

Pamäť programu a dát

8 k bytov v systéme programovateľná FLASH

pamäť

s možnosťou 10 000 násobného prepisu.

512 Bytov pamäte EEPROM s možnosťou až

100 000 násobného prepisu

1K Byte internej pamäte SRAM

Integrované periférie

Dva 8-bitové čítače/časovače

Jeden 16-bitový čítač/časovač

Čítač reálneho času s nezávislým oscilátorom

Tri kanály PWM

8/6 kanálový 10 bitovýADC

Dvojvodičový sériový interface

Programovateľný sériový USART

Master/slave SPI sériový interface

Programovateľný dohliadací obvod

(WDT)

Analógový komparátor

23 vstupno výstupných vývodov

Špeciálne vlastnosti

Automatický reštart pri zapnutí

Integrovaný kalibrovaný RC oscilátor

Externé a interné zdroje prerušenia

Päť nízkopríkonových (sleep) režimov

(Idle, ADC Noise reduction, Power

save, Power down, Standby)

Pracovné napätie a spotreba pri 4MHz, 3V

2.7 – 5.5 V (Atmega8L)

4.5 – 5.5 V (Atmega8)

Page 20: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 20

Aktívny režim: 3.6 mA

Idle režim: 1.0 mA

Power-down režim: 0.5 uA

Atmega8 je 8-bitový CMOS nízkopríkonový mikrokontrolér (MCU). Je založený na

AVR RISC architektúre. Prevažná väčšina inštrukcií sa vykonáva v priebehu jedného

hodinového cyklu. Z uvedeného vyplýva, že Atmega8 dosahuje výpočtový výkon 1MIPS na

1MHZ.

Ukazovateľ

zásobníka

In.obvody

komparátora

PORTD obvody interfacePORTD

WD

časovačOscilátor

Riadenie

časovanie MCU

Prer.

jednotka

Pamäť

EEPROM

USART

PORTC PORTB

PORTB obvody interfacePORTC obvody interface

MUX a ADC ADC interface TWI

Pamäť FLASH

Progr.čítač

Pamäť SRAM

Čítače/

ČasovačeOscilátor

Interný

oscilátor

RESET

PC0 - PC6

XTAL1

XTAL2PB0 - PB7

AGND

Pole

univerzálnych

registrov

X, Y, Z

ALJ

Register

stavu

Register

inštrukcií

Dekóder

inštrukcií

Riadenie

+

-

PD0 - PD7

SPIProgr.

logika

AVR CPJ

Page 21: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 21

Obr 6. Bloková schéma mikrokontroléra Atmega8

Centrálna procesorová jednotka (CPJ) AVR využíva bohatý inštrukčný súbor a je

podporovaná 32 univerzálnymi pracovnými registrami. Všetky univerzálne registre sú

pripojené na aritmeticko-logickú jednotku (ALJ). Toto riešenie dovoľuje aby dva rôzne

registre boli prístupné v jednom strojovom cykle. Architektúra CPJ dovoľuje efektívne

spracovanie kódu a dosiahnutá priepustnosť je mnohokrát vyššia než pri konvenčných CISC

mikrokontroléroch.

Mikrokontrolér Atmega8 môžeme charakterizovať nasledovne: Obsahuje 8K bytov

v systéme programovateľnej pamäte FLASH, 512 bytov pamäte EEPROM, 1K byte pamäte

SRAM a 32 univerzálnych registrov pre všeobecné použitie.

AT mega8 obsahuje nasledujúce periférie: 23 univerzálnych vstupno výstupných vývodov, tri

čítače/časovače, interné a externé zdroje prerušení, programovateľný obvod USART, bytovo

orientovaný dvojvodičový sériový interface, 6-kanálový ( 8-kanálový v prevedení

TQFP,MLF) analógovo-číslicový prevodník, pričom 4 (6) kanály majú 10-bitovú presnosť

a dva 8-bitovú presnosť, programovateľný WD časovač s interným oscilátorom a SPI sériové

rozhranie.

Mikrokontrolér ATmega8 má možnosť pracovať v piatich programovo voliteľných

energeticky úsporných režimoch.

„Idle“ režim zastavuje činnosť CPJ umožňuje činnosť pamäte SRAM, čítačov/časovačov, SPI

rozhrania a prerušovacej jednotky.

„Power down“ režim uchováva obsah registrov, pričom zastavuje činnosť oscilátora

a zakazuje činnosť všetkých ostatných funkcií až do výskytu žiadosti o prerušenie, prípadne

signálu RESET.

„Power save“ režim, pri ktorom asynchrónne čítače pokračujú v činnosti, čo dovoľuje

užívateľovi nastaviť čas trvania úsporného „power save“ režimu.

„ADC noise reduction“ režim zastavuje činnosť CPJ a všetkých V/V modulov s výnimkou

asynchrónnych čítačov a analógovo číslicového prevodníka. Týmto spôsobom je možné

redukovať šum číslicovej časti mikrokontroléra počas analógovo číslicového prevodu.

V režime „Stand by“ je v činnosti kryštálom riadený oscilátor, pričom všetky ďalšie obvody

sú v nečinnosti. Tento režim umožňuje rýchly štart obvodu a nízku spotrebu mikrokontroléra.

Pamäť programu FLASH je možné preprogramovať priamo v aplikácii prostredníctvom

sériového rozhrania SPI, alebo s využitím zavádzacieho (boot) programu.

Kombináciou 8-bitovej RISC CPJ a v systéme programovateľnej FLASH pamäte v jednom

obvode sa podarilo vyvinúť výkonný prostriedok ne flexibilné a cenovo efektívne riešenia pre

veľké množstvo vstavaných aplikácií.

3.2 CENTRÁLNA PROCESOROVÁ JEDNOTKA.

Základné funkcie centrálnej procesorovej jednotky zabezpečujú správnu realizáciu programu.

CPJ musí byť schopná pristupovať k pamätiam, vykonávať výpočty, riadiť periférie

a obsluhovať žiadosti o prerušenie. Pre dosiahnutie maximálneho výkonu a paralelizmu

mikrokontrolér AVR využíva harvardskú architektúru s oddelenými pamäťami a zbernicami

pre uloženie programu a uchovanie spracovávaných údajov. Inštrukcie uložené v pamäti sú

spracovávané s jednoúrovňovým zreťazením. Pokiaľ jedna inštrukcia je vykonávaná,

nasledujúca inštrukcia sa vyberá z pamäte programu. Táto skutočnosť dovoľuje spracovať

inštrukciu v jednom hodinovom cykle. Bloková schéma CPJ je uvedená na obr.7.

Page 22: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 22

Obr.7 Bloková schéma CPJ

Pole univerzálnych registrov obsahuje 32 8-bitových pracovných registrov s rýchlym

prístupom v jednom hodinovom cykle. Táto skutočnosť dovoľuje vykonávať aritmeticko-

logické operácie v priebehu jedného hodinového cyklu. V typických operáciách sa v priebehu

jedného cyklu z poľa univerzálnych registrov vyberú operandy, vykoná sa operácia

a výsledok sa zapíše späť do poľa univerzálnych registrov. Šesť z uvedených tridsiatich dvoch

registrov môže byť použitých vo funkcii troch 16-bitových registrov na nepriame

adresovanie, ako ukazovatele v adresnom priestore dát. Jeden z týchto troch registrov môže

byť využitý ako ukazovateľ v adresnom priestore pamäte programu FLASH.

Aritmeticko-logická jednotka podporuje aritmetické a logické operácie medzi obsahmi dvoch

registrov, alebo medzi obsahom registra a konštantou. Po vykonaní aritmeticko-logickej

operácie sa automaticky modifikuje obsah stavového registra, kde sú uchovávané informácie

o výsledku predchádzajúcej operácie.

Postupnosť spracovania inštrukcií programu je riadená pomocou podmienených, alebo

nepodmienených skokov a volaní podprogramov, schopných adresovať celý priestor pamäte

programu. Väčšina AVR inštrukcií má jednoduchý 16-bitový formát.

Priestor pamäte programu FLASH je rozdelený do dvoch sekcií. Jedna sekcia slúži na

uchovanie zavádzacieho (boot) programu a druhá na uchovanie aplikačného programu. Obe

sekcie majú ochranné tzv. lock bity na ochranu dát pred nežiadúcim čítaním, prípadne

prepisom. Inštrukcie SPM na zápis do aplikačnej sekcie využívajú pri svojej realizácii „boot“

sekciu.

Analogový

komparátor

Prer. jednotka

SPI jednotka

WD

časovač

Pamäť

EEPROM

Pamäť FLASH Progr.čítač

Pole

univerzálnych

registrov

Register

stavu

Register

inštrukcií

Dekóder

inštrukcií

Riadenie

Pamäť dát

SRAM

I/O

ALJ

I/O modul 1

I/O modul n

údajová zbernica

pria

me

ad

resova

nie

nep

ria

me

ad

reso

vanie

32x8

Page 23: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 23

Počas obsluhy žiadostí o prerušenie a volaní podprogramov sú návratové adresy čítača

programu uchované v zásobníku. Zásobník je umiestnený v pamäťovom priestore pamäte

SRAM a jeho veľkosť je preto limitovaná veľkosťou pamäte SRAM. V každom užívateľskom

programe musí byť nastavený obsah ukazovateľa zásobníka pred prvým volaním

podprogramu, prípadne pred akceptovaním prvej žiadosti o prerušenie. Ukazovateľ zásobníka

je prístupný pre čítanie i zápis vo V/V priestore. Údaje v pamäti SRAM sú prístupné

prostredníctvom piatich adresovacích spôsobov podporovaných AVR architektúrou. Všetky

pamäťové priestory sú lineárne a regulárne.

Riadiaci register jednotky riadenia prerušenia je umiestnený tiež v adresnom priestore V/V.

Globálne zakázanie/povolenie prerušení je možné realizovať prostredníctvom vyhradeného

bitu stavového registra. Každé prerušenie má vlastný prerušovací vektor umiestnený

v tabuľke vektorov prerušenia. Priorita prerušení je daná pozíciou zodpovedajúceho vektora

v tabuľke prerušení. Vektory uchované na nižšej adrese majú vyššiu prioritu.

V/V pamäťový priestor obsahuje 64 adries pre periférie mikrokontroléra, riadiace registre

a ďalšie funkcie.

3.2.1 Aritmeticko-logická jednotka

Aritmeticko-logická jednotka je priamo prepojená so všetkými 32 univerzálnymi registrami.

Aritmetické operácie s dvoma registrami, alebo registrom a konštantou sú realizované

v priebehu jedného hodinového cyklu. Aritmeticko-logické operácie môžeme rozdeliť do

troch základných kategórií. Sú to aritmetické, logické a bitové operácie. Súčasťou

aritmeticko-logickej jednotky je aj násobička podporujúca znamienkové i neznamienkové

násobenie.

Stavový register

Stavový register uchováva informácie o výsledku posledne vykonanej aritmetickej,

prípadne logickej operácie. Tieto informácie môžu byť využité pri vykonávaní podmienených

operácií. Obsah stavového registra sa pri volaniach podprogramov a obsluhe prerušení

neuchováva automaticky. Jeho uchovanie musí zaistiť užívateľ pomocou programových

prostriedkov.

Obsah stavového registra (SREG) je definovaný nasledovne:

SREG:

Bit 7 6 5 4 3 2 1 0

Symbol I T H S V N Z C

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hodnota 0 0 0 0 0 0 0 0

Bit7 – I: Globálne povolenie prerušenia

Ak je bit I nastavený (logická jednotka) prerušenia sú povolené. Ak je obsah bitu I log. 0

žiadny zo zdrojov prerušenia nemôže byť akceptovaný, pričom nezávisí na individuálnom

nastavení riadiaceho registra prerušení. Okamžite po výskyte povolenej žiadosti o prerušenie

je I-bit obvodovými prostriedkami nulovaný a znovu je nastavený až inštrukciou RETI. I-bit

môžeme tiež modifikovať programom, pomocou inštrukcií SEI a CLI.

Bit 6 – T : Pamäťový bit

Page 24: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 24

Inštrukcie BLD a BSD využívajú T-bit, ako zdrojový/cieľový bit pre bitové operácie.

Ľubovolný bit registra z poľa univerzálnych registrov môže byť kopírovaný do T-bitu

pomocou inštrukcie BST. T-bit môže byť kopírovaný do ľubovolného bitu vybraného registra

z poľa univerzálnych registrov pomocou inštrukcie BLD.

Bit 5 - H: Príznak polovičného prenosu

Bit H je príznak polovičného prenosu. Indikuje že v priebehu aritmetickej operácie došlo ku

prenosu z 3 do 4 bitu.

Bit 4 – S: Znamienkový bit

Hodnota S-bitu je určená na základe operácie EX-OR medzi príznakom záporného výsledku,

N-bit a príznakom dvojkového doplnku, V-bit.

Bit 3 – V: Príznak pretečenia dvojkového doplnku

Pretečenie dvojkového doplnku, V-bit podporuje aritmetiku s dvojkovým doplnkom.

Bit 2 – N: Príznak zápornej hodnoty

Príznak zápornej hodnoty, N-bit indikuje výskyt zápornej hodnoty pri aritmetickej, alebo

logickej operácii.

Bit 1 – Z: Príznak nulového výsledku

Z-bit je príznak nulového výsledku a indikuje, že výsledok aritmetickej, alebo logickej

operácie je rovný nule.

Bit 0 – C: Príznak pretečenia

Príznak pretečenia, C-bit indikuje že pri aritmetickej, alebo logickej operácii došlo

k pretečeniu.

3.2.2 Pole univerzálnych registrov

Pole univerzálnych registrov je navrhnuté z ohľadom na inštrukčný súbor a umožňuje

procesoru dosiahnuť vysoký výkon a flexibilitu. Pole univerzálnych registrov podporuje

nasledovnú vstupno-výstupnú štruktúru inštrukčného súboru:

- Jeden 8-bitový výstupný operand a jeden 8-bitový vstupný výsledok.

- Dva 8-bitové výstupné operandy a jeden 8-bitový vstupný výsledok.

- Dva 8-bitové výstupné operandy a jeden 16-bitový vstupný výsledok.

- Jeden 16-bitový výstupný operand a jeden 16-bitový vstupný výsledok.

Page 25: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 25

Obr.8 Pole univerzálnych registrov

Väčšina inštrukcií využívajúcich registre z poľa univerzálnych registrov má priamy prístup ku

všetkým registrom. Niektoré inštrukcie však môžu pracovať len s registrami R16 až R31. Pole

univerzálnych registrov je mapované priamo do prvých 32 pamäťových miest užívateľského

dátového priestoru. Registre R26 až R31 môžu byť využívané ako 16-bitové registre X,Y a Z.

Registre X, Y a Z

Registre R26 až R31 majú okrem základných funkcií niektoré rozšírené možnosti použitia.

Tieto registre môžu byť použité ako 16-bitové ukazovatele adresy pre nepriame adresovanie

údajového priestoru. Tri 16-bitové registre pre nepriame adresovanie X, Y a Z sú uvedené na

obr.9.

Obr.9 Registre X, Y a Z

3.2.3 Ukazovateľ zásobníka (SP)

Zásobník sa používa na dočasné uchovanie údajov, ako sú lokálne premenné a návratové

adresy pri volaniach podprogramov a obsluhe prerušení. Ukazovateľ zásobníka vždy ukazuje

na vrchnú adresu zásobníka. Poznamenajme, že ukazovateľ zásobníka je realizovaný tak, aby

narastal od vyššej pamäťovej lokácie k nižšej. Z uvedeného vyplýva, že operácia PUSH

znižuje obsah ukazovateľa. Pamäťový priestor pre umiestnenie zásobníka musí byť

R0

R1

......

R14

R15

R16

......R26

R27

R28

R29

R30

R31

0x00

0x01

0x0E

0x0F

0x10

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

X-register, dolný byte

X-register, horný byte

Y-register, dolný byte

Y-register, horný byte

Z-register, dolný byte

Z-register, horný byte

7 0 adr.

7 0 7 0

15 0

R27 (0x1B) R26 (0x1A)

XL XH

X-register

7 0 7 0

15 0

R29 (0x1D) R28 (0x1C)

YL YH

Y-register

7 0 7 0

15 0

R31 (0x1F) R30 (0x1E)

ZL ZH

Z-register

Page 26: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 26

definovaný programom pred volaním podprogramu, alebo povolením prerušenia. Najnižšia

hodnota na nastavenie ukazovateľa je 0x60. Obsah ukazovateľa zásobníka je znížený

o jednotku, ak sa do zásobníka ukladá údaj - inštrukciou PUSH. Obsah ukazovateľa zásobníka

je znížený o hodnotu dva, ak sa do zásobníka ukladá návratová adresa (volanie podprogramu,

alebo obsluha prerušenia). Obsah ukazovateľa zásobníka je zvýšený o jednotku ak sa zo

zásobníka vyberá údaj - inštrukciou POP. Obsah ukazovateľa zásobníka je zvýšený o hodnotu

dva, ak sa zo zásobníka vyberá návratová adresa( návrat z podprogramu, alebo z obsluhy

prerušenia).

Ukazovateľ zásobníka je realizovaný ako dvojica 8-bitových registrov vo V/V priestore.

Obr.10 Ukazovateľ zásobníka

3.3 PAMÄŤOVÝ PODSYSTÉM MCU Atmega8

MCU Atmega8 má dva základné pamäťové priestory sú to pamäť údajov a pamäť

programu. Tieto pamäte sú doplnené o pamäť údajov typu EEPROM. Všetky tri pamäťové

priestory sú lineárne a regulárne.

3.3.1 Pamäť programu

Pamäť programu je v systéme programovateľná pamäť FLASH. Jej kapacita je 8K

byte. Keďže všetky inštrukcie MCU sú 16, prípadne 32 bitové pamäť programu je

organizovaná ako 4K x 16 bitov. Z hľadiska zvýšenia bezpečnosti je tento pamäťový priestor

rozdelený do dvoch sekcií. Je to sekcia pre zavádzací (boot) program a sekcia pre aplikačný

program. Pamäť FLASH umožňuje vykonať až 10 000 cyklov zápisu a mazania. Programový

čítač má 12 bitovú šírku čo mu dovoľuje adresovať 4K pamäťového priestoru. Tabuľky

konštánt môžu byť uložené vo vnútri pamäťového priestoru pamäte programu.

0x000

0xFFF

Obr.11 Pamäť programu FLASH

SP15 SP8

SP7 SP0

počiatočná hodnota: 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

prístup: R/W R/W R/W R/W R/W R/W R/W R/W

R/W R/W R/W R/W R/W R/W R/W R/W

SP:

Sekcia

aplikačného

programu

pamäte

FLASH

Sekcia

zavádzacieho

programu

Page 27: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 27

3.3.2 Pamäť údajov SRAM

Obrázok 6 ilustruje organizáciu pamäte údajov SRAM. Celkove pamäť dát obsahuje

1120 pamäťových miest, z toho prvých 32 adries zodpovedá adresám registrov všeobecného

použitia, (r0-r31) nasledujúce adresy zodpovedajú adresám V/V registrov a nakoniec je 1024

adries vyčlenených pre internú údajovú pamäť SRAM. Jednotlivé miesta pamäte údajov

môžeme adresovať pomocou piatich nasledovných adresovacích režimov. Priame

adresovanie, nepriame adresovanie, nepriame adresovanie s premiestnením, nepriame

adresovanie s pre-dekrementom, nepriame adresovanie s post-inkrementom. Registre r26 až

r31 z poľa registrov všeobecného použitia je možné použiť pri nepriamom adresovaní ako

ukazovatele.

Priame adresovanie obsiahne celý priestor pamäte údajov.

Nepriame adresovanie s premiestnením obsiahne 63 pamäťových miest od bázovej

adresy, ktorá je daná obsahom Y, alebo Z registrového páru.

Obr.12 Organizácia pamäte údajov

3.3.3 Pamäť údajov EEPROM

MCU Atmega8 obsahuje 512 bytov pamäte EEPROM. EEPROM pamäť má oddelený

adresný priestor od pamäte SRAM. Pamäť EEPROM umožňuje vykonať až 100 000

zápisových a mazacích cyklov. Prístup procesora k pamäti EEPROM bude podrobne opísaný

pole registrov

r0r1

r29

r30

r31

V/V registre

0x00

0x01

0x3D

0x3E

0x3F

Interná pamäť SRAM

Adresový priestor pamäte údajov

0x000

0x001

0x01D

0x01E

0x01F

0x020

0x021

0x05D

0x05E

0x05F

0x060

0x061

0x45E

0x45F

Page 28: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 28

v ďalšom texte. Tento prístup je zabezpečený prostredníctvom vyhradených registrov. Sú to

EEPROM adresovacie registre, EEPROM dátový register a EEPROM riadiaci register. Tieto

EEPROM registre sú prístupné vo V/V adresnom priestore.

Keď čítame obsah EEPROM, tak CPU je pozastavená na 4 hodinové cykly. Pri zápise

do pamäte EEPROM je CPU pozastavená na dva hodinové cykly.

Adresovacie registre EEPROM

EEARH register:

Bit 15 14 13 12 11 10 9 8

Symb. - - - - - - - EEAR8

Prístup R R R R R R R R/W

Poč.hod. 0 0 0 0 0 0 0 X

EEARL register:

Bit 7 6 5 4 3 2 1 0

Symb. EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

Poč.hod. X X X X X X X X

Bity 15 až 9

Bity 15 až 9 nie sú v MCU Atmega8 využité.

Bity 8 až 0 – EEAR8...0, EEPROM Address

EEAR register pozostáva z dvoch 8-bitových registrov EEARH a EEARL. Adresa

pamäťového miesta je uložená v bitoch EEAR0 až EEAR0. Počiatočná hodnota bitov

EEAR8..0 nie je definovaná.

EEPROM údajový register

EEDR:

Bit 7 6 5 4 3 2 1 0

Symb MSB LSB

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

Poč.hod. 0 0 0 0 0 0 0 0

Bity 7 až 0 – EEDR7..0 EEPROM Data

Pri zápise do pamäte EEPROM register EEDR obsahuje údaje, ktoré majú byť zapísané do

pamäťového miesta adresovaného obsahom registrov EEAR. Pri čítaní obsahu EEPROM

register EEDR obsahuje údaje, ktoré boli prečítané z pamäťového miesta adresovaného

obsahom registrov EEAR.

EEPROM riadiaci register

EECR:

Bit 7 6 5 4 3 2 1 0

Symb. - - - - EERIE EEMWE EEWE EERE

Prístup R R R R R/W R/W R/W R/W

Poč.hod. 0 0 0 0 0 0 X 0

Bity 7 až 4

Page 29: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 29

Bity 7 až 4 nie sú v MCU Atmega8 využité.

Bit 3 – EEMWE, EEPROM Ready Interrupt Enable

Ak je hodnota bitu EEMWE logická 1 a súčasne je nastavený I-bit v SREG, potom je

povolené prerušenie EEPROM Ready.

Bit 2 – EEMWE, EEPROM Master Write Enable

Ak bit EEMWE má hodnotu log.1, potom nastavenie bitu EEWE spôsobí, že v priebehu

štyroch hodinových cyklov, budú na vybranú adresu zapísané dáta. Ak EEMWE bude

obsahovať log.0, potom nastavenie EEWE nemá žiadny vplyv. Ak programovými

prostriedkami nastavíme bit EEMWE na hod log.1, v priebehu nasledujúcich štyroch

hodinových cyklov bude automaticky tento bit vynulovaný.

Bit 1 – EEWE, EEPROM Write Enable

Bit EEWE má funkciu strobovacieho signálu pre zápis údajov do pamäte EEPROM. Ak sú

korektne nastavené údajový a adresovacie registre, potom na zápis obsahu registra EEDR do

pamäti EEPROM je potrebné nastaviť bit EEWE. Pre zápis do pamäti EEPROM musíme

vykonať nasledujúcu procedúru:

1. Čakaj pokiaľ EEWE nemá hodnotu log.0.

2. Čakaj pokiaľ bit SPMEN v registri SPMCR nemá hodnotu log.0.

3. Zapíš hodnotu adresy EPROM do registrov EEAR.

4. Zapíš údaj do registra EEDR.

5. Zapíš log.1 do bitu EEMWE, ak bit EEWE v registri EECR je log.0.

6. V priebehu štyroch hodinových cyklov po zápise do EEMEW zapíš log.1

do bitu EEWE v registri EECR.

Pamäť EEPROM nemôže byť programovaná, pokiaľ CPU zapisuje dáta do pamäte FLASH.

Užívateľ musí zabezpečiť aby programovanie pamäte FLASH sa skončilo pred zápisom do

pamäte EEPROM. Krok 2 je nutný len v tom prípade, ak užívateľský program používa

zavádzací program, ktorý umožňuje CPU programovať pamäť FLASH.

Výskyt prerušenia medzi krokmi 5 a 6 spôsobí, že zápis do pamäte EEPROM

neprebehne korektne. Preto sa doporučuje v priebehu zápisu do pamäte EEPROM (kroky 3 až

6) globálne zakázať obsluhu prerušení. Poznamenajme, že po zápise do EEPROM sa bit

EEWE automaticky vynuluje. Užívateľský program môže hodnotu bitu EEWE testovať

a s novým zápisom čakať až pokiaľ bude jeho obsah rovný log.0. Po nastavení bitu EEWE

CPU pozastaví svoju činnosť po dobu dvoch cyklov a pokračuje realizáciou nasledujúcej

inštrukcie.

Bit 0 – EERE, EEPROM Read Enable

Bit EERE má funkciu strobovacieho signálu pre čítanie údajov z pamäte EEPROM. Ak je

korektne nastavená adresa v registroch EEAR, potom čítanie obsahu adresovanej lokácie

pamäte EEPROM je vykonané nastavením bitu EERE. Pri čítaní pamäte EEPROM sa CPU

pozastaví po dobu štyroch hodinových cyklov. Potom pokračuje vo výkone nasledujúcej

inštrukcie. Užívateľský program by mal pred čítaním EEPROM pamäte kontrolovať hodnotu

bitu EEWE, pretože nie je možné meniť obsah registrov EEAR ani čítať EEPROM pamäť

pred skončením operácie zápisu.

Na časovanie prístupu k pamäti EEPROM sa používa kalibrovaný RC oscilátor.

Typický programovací čas pamäte EEPROM je rovný 8448 periód hodinového signálu RC

oscilátora s frekvenciou 1 MHz, čo je približne 8.5ms.

Page 30: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 30

Poznámka: Bližšie informácie o práci s pamäťou EEPROM môže čitateľ získať

v technickej dokumentácii výrobcu.

3.3.4 V/V pamäťový podsystém

Všetky periférie a vstupo-výstupy MCU Atmega8 sú umiestnené vo V/V pamäťovom

priestore. Pamäťové miesta v oblasti V/V priestoru sú prístupné prostredníctvom inštrukcií IN

a OUT, ktoré umožňujú presun údajov medzi 32 registrami všeobecného použitia a V/V

pamäťovými miestami. V/V registre v adresnom priestore 0x00 až 0x1F majú bitový prístup

prostredníctvom inštrukcií SBI, CBI, SBIS a SBIC. Ak na adresovanie V/V registrov

použijeme inštrukcie IN a OUT, potom adresy V/V sú v rozsahu 0x00 až 0x3F. Ak sa na V/V

adresy pozeráme ako na priestor dát a použijeme inštrukcie LD a ST, potom k nim musíme

pripočítať hodnotu 0x20.

3.4 REŠTARTOVANIE PROCESORA A PRERUŠOVACÍ SYSTÉM

Mikrokontrolér ATmega8 má viacero zdrojov prerušení. Všetky prerušenia vrátane

reštartu majú pridelené samostatné prerušovacie vektory, ktoré sú uložené v pamäti programu.

Každé prerušenie má pridelený samostatný povoľovací bit. Ak chceme povoliť príslušné

prerušenie je potrebné nastaviť povoľovací bit a súčasne nastaviť globálny povoľovací bit (I-

bit) v stavovom registri (SREG). Ak sú naprogramované bity BLB02, alebo BLB12 (Boot

Lock bity), potom v závislosti na obsahu čítača inštrukcií môžu byť prerušenia automaticky

zakázané. Táto vlastnosť zvyšuje programovú bezpečnosť MCU.

Najnižšie adresy v pamäti programu sú preddefinované ako reštartovací a prerušovacie

vektory. Priorita obsluhy prerušení je daná adresou prerušovacieho vektora. Prerušenie

s najnižšou adresou prerušovacieho vektora má najvyššiu prioritu. Ak nastavíme IVSEL bit

v riadiacom registri prerušení (GICR), potom prerušovacie vektory budú presunuté na

začiatok bootovacej sekcie pamäte FLASH. Uvedené presunutie je možné tiež realizovať

pomocou naprogramovania bitu BOOTRST (fuse).

V prípade výskytu ľubovolnej žiadosti o povolené prerušenie sa automaticky nastaví

bit globálneho povolenia prerušení, I-bit na hodnotu nula a všetky ďalšie prerušenia budú

zakázané. Užívateľským programom potom môžeme povoliť obsluhu ďalších prerušení tak,

že v prerušovacej rutine aktuálneho prerušenia nastavíme I-bit na hodnotu 1. Všetky

povolené prerušenia potom môžu prerušiť práve prebiehajúcu obsluhu prerušenia. I-bit sa tiež

automaticky nastaví pri skončení obsluhy aktuálneho prerušenia, v rámci výkonu inštrukcie

RETI.

V zásade sa stretneme s dvoma typmi prerušení.

-Prvý typ pri výskyte žiadosti o prerušenie nastavuje príznakový bit prerušenia.

V prípade, že prerušenie je zakázané, žiadosť o prerušenie sa zapamätá v príznakovom bite

a po povolení obsluhy prerušenia bude prerušenie akceptované. Ak sa v priebehu zákazu

obsluhy prerušení vyskytne takýchto žiadostí viac- od viacerých zdrojov, budú postupne

vykonávané v poradí zodpovedajúcom ich priorite.

-Druhý typ prerušení je charakterizovaný tým, že žiadosť o prerušenie trvá len tak

dlho, pokiaľ je udalosť, ktorá ho spôsobila aktuálna. Tieto prerušenia nemajú príznakové bity.

Pokiaľ bude obsluha prerušení povolená až po skončení žiadosti o prerušenie toto prerušenie

nebude akceptované.

Keď sa skončí obsluha prerušenia výkon programu sa vracia do hlavného programu

a pokračuje inštrukciou nasledujúcou po inštrukcii, ktorá bola vykonávaná pred obsluhou

Page 31: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 31

prerušenia. Obsah stavového registra sa pri skoku do obslužného programu prerušenia

neuchováva automaticky, preto jeho uchovanie je potrebné zabezpečiť pomocou

programových prostriedkov. Použitím inštrukcie CLI je možné zakázať všetky prerušenia. Po

výkone tejto inštrukcie nebude akceptovaná žiadna žiadosť o prerušenie.

Čas potrebný na začatie výkonu obsluhy každého povoleného prerušenia je

minimálne 4 hodinové cykly. Počas týchto 4 hodinových cyklov sa obsah programového

čítača uloží do zásobníka a prostredníctvom prerušovacieho vektora sa odskočí na adresu

prvej inštrukcie obsluhy prerušenia. Ak sa žiadosť o prerušenie vyskytne v priebehu

vykonávania viac cyklovej inštrukcie táto inštrukcia sa kompletne vykoná až potom sa obslúži

aktuálna žiadosť o prerušenie. Ak sa vyskytne žiadosť o prerušenie a procesor je v režime

„sleep“ potom sa čas odozvy na prerušenie zvýši o 4 hodinové cykly. Poznamenajme, že

návrat z prerušovacej rutiny trvá tiež 4 hodinové cykly. V týchto 4 cykloch sa zo zásobníka

naplní obsah programového čítača, jeho hodnota sa zvýši o 2 a na hodnotu log.1 sa nastaví sa

I-bit v stavovom registri (SREG).

3.5 SYSTÉMOVÉ HODINY

Na obr.13 je znázornený systém generovania a distribúcie synchronizačných

hodinových signálov mikrokontroléra.

Asynchrónne

T/CI/O moduly ADC CPU jadro RAM

FLASH a

EEPROM

Riadiaca jednotka hodín

Clk ASY

Clk IO

Clk ADCClk CPU

Clk FLASH

Prepínač

Reštartovacia

logika

Watchdog

časovač

Watchdog

oscilátor

Oscilátor T/CExterný RC

oscilátor

Externé

hodiny

Oscilátor

riadený

kryštálom

Nízkofrekven-

čný OSC

Kalibrovaný

RC OSC

Obr.13 Distribúcia hodinových signálov

Poznamenajme, že z dôvodov redukcie spotreby nie sú v tom isto čase aktívne všetky

hodinové signály. Pri použití rôznych režimov so zníženou spotrebou sú niektoré časti

z obr.13 neaktívne.

Page 32: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 32

Hodinový signál Clk CPU je privedený do tých častí mikrokontroléra, ktoré

bezprostredne súvisia s CPU. Ako príklad takýchto častí je možné uviesť pole univerzálnych

registrov, stavový register, programový čítač a pod. Pri zastavení Clk CPU signálu nie je

možné vykonávať žiadne operácie a výpočty.

Hodinový signál Clk IO je využívaný väčšinou vstupno-výstupných modulov,

(čítače/časovače, SPI, USART a pod.) Clk IO sú tiež využívané v module externých

prerušení. Poznamenajme, že externé prerušenia sú tiež vyhodnocované asynchrónnou

logikou čo umožňuje akceptovať prerušenia aj pri zastavenom signále Clk IO.

Hodinový signál Clk FLASH synchronizuje činnosť riadiacich obvodov pamäte

FLASH. Signál Clk FLASH je zvyčajne aktívny spoločne so signálom Clk CPU.

Hodinový signál Clk ASY dovoľuje aby asynchrónne čítače/časovače boli ovládané

zo zdroja hodinovej frekvencie s externým kryštálom 32kHz. Takto je možné použiť tieto

čítače/časovače ako čítače reálneho času aj v prípade keď zariadenie je v režime zníženej

spotreby. Asynchrónne čítače/časovače využívajú tie isté XTAL vývody ako CPU. Je zrejmé,

že v tomto prípade je na generovanie CPU hodinového signálu využitý interný oscilátor.

Hodinový signál Clk ADC synchronizuje činnosť analógovo-číslicového prevodníka.

Jeho nezávislosť na Clk CPU a Clk IO umožňuje zastaviť činnosť CPU a vstupno-výstupných

modulov počas prevodu, čím môžeme redukovať šum generovaný digitálnymi obvodmi

mikrokontroléra a takto zvýšiť presnosť prevodu.

Mikrokontrolér dovoľuje použiť päť rôznych zdrojov hodinového signálu. Voľba

príslušného zdroja sa vykonáva prostredníctvom Flash Fuse bitov, podľa tab.2. Hodinový

signál z vybraného zdroja je vstupným signálom do generátora hodín a je distribuovaný do

príslušných modulov mikrokontroléra.

Zdroj hodinových impulzov CKSEL3 . . . 0

Externý kryštálový/keramický rezonátor 1111 - 1010

Externý nízkofrekvenčný kryštál 1001

Externý RC oscilátor 1000 - 0101

Kalibrovaný interný RC oscilátor 0100 - 0001

Externé hodiny 0000

Pozn. „1“ znamená nenaprogramované a „0“ naprogramované „Flash Fuse bity“.

Tab.2 Zdroje hodinového signálu

Ak CPU prechádza z režimu zníženej spotreby do aktívneho režimu vybraný zdroj

hodinového signálu slúži na definovanie nábehového „start-up“ času, ktorý zaisťuje stabilnú

činnosť oscilátora pred výkonom prvých inštrukcií programu. Ak CPU začína aktívnu činnosť

po reštarte, potom toto oneskorenie zabezpečí, aby napájacie napätie dosiahlo definovanú

stabilnú úroveň pred výkonom prvých inštrukcií. WDT oscilátor sa využíva na definovanie

reálneho času. Frekvencia WDT oscilátora je závislá na veľkosti napájacieho napätia.

Tabuľka 3 udáva závislosť času od počtu cyklov WDT oscilátora a napájacieho napätia.

Typická hodnota času

Vcc=5V

Typická hodnota času

Vcc=3V

Počet cyklov WDT OSC

4.1 ms 4.3 ms 4 096

65 ms 69 ms 65 536

Tab.3 Počet cyklov WDT oscilátora

Page 33: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 33

Kryštálový oscilátor využíva vstup- XTAL1 a výstup- XTAL2 invertujúceho

zosilňovača, ktorý môže byť použitý ako integrovaný oscilátor, riadený kryštálom, alebo

keramickým rezonátorom, obr.9. Prostredníctvom CKOPT fuse bitu môžeme zvoliť jeden

z dvoch rôznych režimov činnosti oscilátora. Keď bit CKOPT je naprogramovaný, (hodnota

0) výstup oscilátora bude oscilovať v plnom rozsahu. Tento režim sa využíva v prípadoch keď

zariadenie pracuje vo veľmi zašumenom prostredí, alebo keď výstup oscilátora, XTAL2

napája ďalší obvod. Oscilátor v tomto režime pracuje v plnom rozsahu. Ak bit COKPT nie je

naprogramovaný výstup oscilátora má menší rozkmit. Tento režim značne redukuje spotrebu

obvodu. V uvedenom režime činnosti má oscilátor obmedzený frekvenčný rozsah a jeho

výstup nie je možné použiť pre budenie ďalších obvodov. Maximálna frekvencia pri použití

rezonátorov je 8 MHz ak bit CKOPT nie je nenaprogramovaný a 16 MHz v prípade

naprogramovaného bitu CKOPT. Optimálne hodnoty kondezátorov C1 a C2 sú závislé na

vlastnostiach použitých rezonátorov. Základné východiská pre voľbu hodnôt kapacít C1, C2

pri použití kryštálov sú uvedené v tabuľke 4. Pre keramické rezonátory sú hodnoty použitých

kapacít dané výrobcom použitých rezonátorov.

Obr.14 Kryštálový oscilátor

CKOPT CKSEL3....1 Frekvenčný rozsah [MHz] C1 a C2 [pF]

1 101 (len pre ker. rezonátor) 0.4 - 0.9 -

1 110 0.9 – 3 12 – 22

1 111 3.0 – 8.0 12 – 22

0 101,110,111 1.0 12 – 22

Tab.4 Režimy činnosti kryštálového oscilátora

Oscilátor môže pracovať v troch režimoch. Každý z režimov je optimalizovaný pre iný

frekvenčný rozsah. Režim činnosti sa volí pomocou bitov CKSEL3 . . 1, podľa tabuľky 3.

Pomocou bitov CKSEL0 a SUT1 . 0 je možné zvoliť nábehový čas procesora - (start up).

Nábehové časy sú uvedené v tabuľke 5.

CKSEL SUT1 . 0 Nábehový čas

z režimov zo

zníženou

spotrebou

Doplnkové oneskorenie

pri reštarte (Vcc=5V)

Doporučené pri nasledovných

podmienkach

0 00 258 CK 4.1 ms Keramický rezonátor,

rýchly nábeh Vcc

GND

C2

C1 XTAL

Page 34: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 34

0 01 258 CK 65 ms Keramický rezonátor,

pomalý nábeh Ucc

0 10 1K CK – Keramický rezonátor,

povolený BOD

0 11 1K CK 4.1 ms Keramický kondenzátor,

rýchly nábeh Ucc

1 00 1K CK 65 ms Keramický rezonátor,

pomalý nábeh Ucc

1 01 16K CK – Kryštálový oscilátor,

povolený BOD

1 10 16K CK 4.1 ms Kryštálový oscilátor,

rýchly nábeh Ucc

1 11 16K CK 65 ms Kryštálový oscilátor,

pomalý nábeh Ucc

Tab.5 Nábehové časy procesora – kryštálový oscilátor

Ak ako zdroj hodinovej frekvencie použijeme hodinový nízkofrekvenčný kryštál

(32.768kHz) musíme nastaviť bity CKSEL na hodnotu 1001. Na pripojenie kryštálu sú

využité vývody XTAL1 a XTAL2 podľa obr.14. Naprogramovaním CKOPT bitu môže

užívateľ povoliť použitie interných kondenzátorov a nemusí používať externé. Nominálna

hodnota interných kondenzátorov je 36 pF. Ak použijeme nízkofrekvenčný oscilátor, potom

nábehové časy môžeme voliť pomocou SUT bitov podľa tabuľky 6.

SUT 1 . 0 Nábehový čas

z režimov zo zníženou

spotrebou

Doplnkové

oneskorenie pri

reštarte Ucc=5V

Doporučené pri nasledovných

podmienkach

00 1K CK 4.1 ms Rýchly nábeh Ucc, alebo

povolený BOD

01 1K CK 65 ms Pomalý nábeh Ucc

10 32K CK 65 ms Požadujeme stabilnú frekvenciu

po štarte

11 Rezervované

Tab.6 Nábehové časy procesora - nízkofrekvenčný kryštálový oscilátor

Pri aplikáciách v ktorých nie je požadované presné časovanie je možné použiť externý

RC oscilátor podľa obr.15.

Obr.15 Externý RC oscilátor

XTAL2

XTAL1

GND

R

C

NC

Page 35: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 35

Frekvencia oscilátora je približne určená vzťahom: f = 1/(3RC). Kapacita kondenzátora C

nemôže byť menšia než 22 pF. Naprogramovaním bitu CKOPT môže užívateľ povoliť

použitie interného 36 pF kondenzátora medzi XTAL1 a GND. Potom nie je potrebné použiť

externý kondenzátor C. RC oscilátor môže pracovať v štyroch rôznych režimoch. Režim

oscilátora môžeme zvoliť pomocou bitov CKSEL3...0 podľa tabuľky 7.

CKSEL3...0 Frekvenčný rozsah

0101 0.9

0110 0.9 – 3.0

0111 3.0 – 8.0

1000 8.0 – 12.0

Tab.7 Režimy činnosti RC oscilátora

Pri zvolenom režime RC oscilátora je nábehový čas určený SUT bitmi podľa tabuľky 8.

SUT 1 . 0 Nábehový čas

z režimov zo zníženou

spotrebou

Doplnkové

oneskorenie pri

reštarte Ucc=5V

Doporučené pri nasledovných

podmienkach

00 18 CK – BOD povolený

01 18 CK 4.1 ms Rýchly nábeh Ucc

10 18 CK 65 ms Pomalý nábeh Ucc

11 6 CK 4.1 ms Rýchly nábeh Ucc, alebo

povolený BOD

Tab.8 Nábehové časy procesora, externý RC oscilátor

Kalibrovaný interný RC oscilátor je nastavený na pevné frekvencie 1.0, 2.0, 4.0, alebo

8.0 MHz. Frekvencie sú definované pri 5V napájacieho napätia a 25C. Tento zdroj

hodinového signálu môže byť zvolený pomocou CKSEL bitov podľa tabuľky 9. V prípade

tohto výberu bude procesor pracovať bez externých komponentov. Pri použití tohto režimu bit

CKOPT musí byť nenaprogramovaný. Počas reštartu sa automaticky zapíše kalibračný byte

do kalibračného registra OSCCAL.

CKSEL3 . . 0 Nominálna frekvencia [Mhz]

0001(1) 1.0

0010 2.0

0011 4.0

0100 8.0

(1) Obvod ATmega8 sa dodáva s nastavením CKSEL3 . . 0 na hodnotu 0,0,0,1

Tab.9 Režimy kalibrovaného interného RC oscilátora

Pri zvolenom režime kalibrovaného interného RC oscilátora je nábeový čas určený SUT bitmi

podľa tabuľky 10.

SUT1 . . 0 Nábehový čas z režimov

zo zníženou spotrebou

Doplnkové

oneskorenie pri

reštarte Ucc=5V

Doporučené pri nasledovných

podmienkach

Page 36: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 36

00 6 CK – Povolený BOD

01 6 CK 4.1 ms Rýchly nábeh Ucc

10(1) 6 CK 65 ms Pomalý nábeh Ucc

11 Rezervované

(1) Obvod ATmega8 sa dodáva s nastavením SUT1.0 na hodnotu 1,0

Tab.10 Nábehové časy procesora, kalibrovaný interný RC oscilátor

Pomocou obsahu kalibračného registra oscilátora OSCCAL môžeme doladiť frekvenciu

oscilátora.

OSCCAL:

Bit 7 6 5 4 3 2 1 0

CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

Počas reštartu obvodu sa 1 MHz kalibračná hodnota automaticky prepíše do kalibračného

registra. Ak je interný RC oscilátor používaný na iných frekvenciách musí byť kalibračná

hodnota prepísaná pomocou programových prostriedkov.

V prípade použitia externého zdroja hodinových signálov bude vstup XTAL1 budený

externým zdrojom. V tomto prípade musia byť bity CKSEL naprogramované - „0000“.

Naprogramovaním bitu CKOPT užívateľ môže pripojiť interný kondenzátor 36pF medzi

XTAL1 a GND. V prípade použitia externého zdroja hodinových impulzov sú nábehové časy

určené hodnotami FUSE bitov podľa tabuľky 11.

SUT1 . . 0 Nábehový čas z režimov

zo zníženou spotrebou

Doplnkové

oneskorenie pri

reštarte Ucc=5V

Doporučené pri nasledovných

podmienkach

00 6 CK – Povolený BOD

01 6 CK 4.1 ms Rýchly nábeh Ucc

10 6 CK 65 ms Pomalý nábeh Ucc

11 Rezervované

Tab.11 Nábehové časy procesora s externým zdrojom hodinových impulzov

Pri použití externého zdroja hodinových impulzov je potrebné vyvarovať sa náhlych zmien

frekvencie externého signálu. Zmeny frekvencie väčšie než 2 medzi dvoma susednými

impulzmi môžu spôsobiť nepredvídané správanie MCU.

3.6 RIADENIE SPOTREBY, REŽIMY SO ZNÍŽENOU SPOTREBOU.

Režimy so zníženou spotrebou umožňujú vypnúť práve nepoužívané moduly

mikrokontroléra. Mikrokontrolér ponúka viacero režimov so zníženou spotrebou a

tak umožňuje užívateľovi redukovať spotrebu energie v závislosti na požiadavkách aplikácie.

Ak chceme využiť ľubovoľný z piatich úsporných režimov, potom bit SE v MCUCR registri

musí byť nastavený na hodnotu 1. Výkonom inštrukcie SLEEP prejde MCU do zvoleného

úsporného režimu. Hodnoty bitov SM2, SM1 a SM0 v registri MCUCR definujú, ktorý

z piatich možných režimov bude aktivovaný. Ak sa v priebehu úsporného režimu vyskytne

Page 37: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 37

povolené prerušenie MCU prejde do aktívneho stavu. V tomto prípade MCU bude na 4

hodinové cykly zastavená a po nábehovom čase sa realizuje príslušná obsluha prerušenia. Po

obsluhe prerušenia bude MCU pokračovať vo výkone programu, inštrukciou nasledujúcou za

inštrukciou SLEEP. Obsah pola univerzálnych registrov a pamäte SRAM ostáva nezmenený.

Register MCUCR obsahuje riadiace bity pre riadenie spotreby.

MCUCR:

Bit 7 6 5 4 3 2 1 0

SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

Poč.hodnota 0 0 0 0 0 0 0 0

Bit 7 – SE: Sleep Enable

Ak bit SE je nastavený a hodnotu 1, potom je povolené vykonanie inštrukcie SLEEP. Vhodné

je nastaviť bit SE práve pred inštrukciou SLEEP.

Bity 6, 4 – SM2 . . 0 Sleep Mode Select 2, 1 a 0

Pomocou bitov SM2, SM1 a SM2 je možné zvoliť jeden z piatich úsporných režimov MCU

podľa tab.12.

SM2 SM1 SM0 Úsporný režim

0 0 0 Idle

0 0 1 ADC noise rediction

0 1 0 Power-down

0 1 1 Power-save

1 0 0 Rezervované

1 0 1 Rezervované

1 1 0 Standby(1)

(1) Standby režim je možné využiť len s externým kryštálom, alebo rezonátorom

Tab.12 Úsporné režimy MCU

3.6.1 Idle mode, režim nečinnosti

Ak bity SM2..0 sú nastavené na hodnotu 000, potom realizácia inštrukcie SLEEP

spôsobí, že MCU prejde do režimu nečinnosti. V tomto režime je zastavená činnosť CPU, ale

SPI, USART, analógový komparátor, ADC, TWSI, čítače/časovače, watchdog a prerušovací

systém pokračujú v činnosti. Je zrejmé že v tomto režime je zastavený hodinový signál

clkCPU a clkFLASH. Z režimu nečinnosti sa MCU dostane na základe výskytu žiadosti

o prerušenie od povolených interných a externých zdrojov prerušenia.

3.6.2 ADC noise reduction mode, režim redukcie šumu

Ak sú bity SM0..2 nastavené na hodnotu 001, potom realizácia inštrukcie SLEEP

spôsobí, že MCU prejde do režimu redukcie šumu. Tento režim zastavuje CPU a niektoré I/O

obvody. V režime redukcie šumu budú zastavené nasledovné hodinové signály: clkIO,

clkCPU a clkFLASH. Toto spôsobí zníženie úrovne šumu generovaného digitálnymi obvodmi

a zvýši sa presnosť A/D prevodu. Z režimu redukcie šumu sa MCU dostane na základe

Page 38: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 38

výskytu žiadosti o prerušenie od nasledovných povolených zdrojov: koniec ADC prevodu,

externý reštart, watchdog reštart, Brown-out reštart, TWSI zhoda adresy, čítač/časovač2, SPM

a EEPROM pripravené a externé prerušenia na úroveň INT0 a INT1.

3.6.3 Power-down mode, režim zo zníženou spotrebou

Ak sú bity SM0..2 nastavené na hodnotu 010, potom realizácia inštrukcie SLEEP

spôsobí, že MCU prejde do režimu zo zníženou spotrebou. V tomto režime je zastavený

externý oscilátor. Externé prerušenia, TWSI a watch-dog pokračujú v činnosti. Z režimu so

zníženou spotrebou sa MCU dostane na základe výskytu žiadosti o prerušenie od

nasledovných povolených zdrojov: externý reštart, watchdog reštart, Brown-out reštart, TWSI

zhoda adresy a externé prerušenia na úroveň INT0 a INT1. V tomto režime sú pozastavené

generátory hodinových signálov a v činnosti zostávajú len asynchrónne pracujúce moduly.

3.6.4 Power-save mode, režim s úspornou spotrebou

Ak sú bity SM0..2 nastavené na hodnotu 011, potom realizácia inštrukcie SLEEP

spôsobí, že MCU prejde do režimu s úspornou spotrebou. Tento režim je identický

s predchádzajúcim režimom zo zníženou spotrebou s nasledovnou výnimkou: Ak

čítač/časovač2 pracuje asynchrónne (bit AS2 v ASSR je nastavený), bude v tomto režime

aktívny a v prípade výskytu žiadosti o prerušenie prejde MCU do aktívneho stavu. Ak nie je

povolená asynchronná činnosť čítača/časovača2 doporučuje sa používať režim zo zníženou

spotrebou. V tomto režime sú pozastavené všetky hodinové signály s výnimkou clkASY.

3.6.5 Standby mode, pohotovostný režim

Ak sú bity SM0..2 nastavené na hodnotu 110 a CPU využíva ako zdroj hodinového

signálu generátor s externým kryštálom/rezonátorom, potom realizácia inštrukcie SLEEP

spôsobí, že MCU prejde do pohotovostného režimu. Tento režim je identický z režimom so

zníženou spotrebou s výnimkou, že oscilátor zostáva v činnosti. Z tohto režimu MCU

prechádza do aktívneho režimu v priebehu 6 hodinových periód.

Aktívne zdroje hodinového

signálu

Oscilátory Zdroje prechodu do aktívneho stavu

Režim Clk

C

P

U

Clk

FL

AS

H

Clk

IO

Clk

A

D

C

Clk

A

S

Y

Základné

hodiny

povolené

Hodiny

časovačov

povolené

IN

T

0,1

TWI Čas

.2

SPM,

EEP-

ROM

ready

A

D

C

I/O

Idle X X X X X X X X X X X

ADC noise

red.

X X X X X X X X X

Power down X X

Power save X X X X X

Page 39: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 39

Standby X X X

Tab.13 Energeticky úsporné režimy

3.6.6 Minimalizácia spotreby

Ak chceme redukovať spotrebu zariadenia je vhodné využívať režimy so zníženou

spotrebou tak často, ako to dovoľujú aplikačné podmienky. Pripomeňme, že činnosť ADC je

povolená vo všetkých režimoch. Z hľadiska zníženia spotreby je preto účelné zakázať činnosť

ADC pred prechodom MCU do ľubovolného úsporného režimu.

Ak sa nepoužíva analógový komparátor, potom je vhodné ho vypnúť pred prechodom

do režimu nečinnosti. Ak prechádzame do režimu redukcie šumu je vhodné vypnúť analógový

komparátor. V ostatných režimoch sa analógový komparátor vypína automaticky.

Ak v aplikácii sa nevyužíva brown-out detektor je vhodné tento modul vypnúť. Ak

brown-out detektor je povolený nastavením BODEN bitu potom bude povolený vo všetkých

úsporných režimoch čím sa zvyšuje spotreba energie.

Interná napäťová referencia bude zapnutá ak je využívaná v brown-out detektore,

analógovom komparátore, alebo v ADC. Ak činnosť uvedených modulov MCU bude

zakázaná, bude zakázaná aj činnosť napäťovej referencie čím sa zníži spotreba energie.

Ak watchdog časovač nie je v aplikácii potrebný, potom z hľadiska zníženia spotreby

energie je vhodné zakázať jeho činnosť.

Ak MCU vstupuje do ľubovoľného úsporného režimu všetky I/O vývody sú

nakonfigurované tak aby mali minimálnu spotrebu.

3.7 REŠTART

Počas reštartu sa všetky vstupno-výstupné registre nastavia na ich počiatočnú hodnotu

a program sa začne vykonávať od adresy určenej reštartovacím vektorom. Pokiaľ užívateľský

program nevyužíva žiadne prerušenia, začiatok užívateľského programu môže byť

lokalizovaný na adrese reštartovacieho vektora. Táto situácia vznikne aj v prípade, ak

reštartovací vektor je v aplikačnej sekcii pamäte a prerušovacie vektory sú lokalizované

v sekcii zavádzacieho programu. Na obr.16 sú uvedené reštartovacie obvody.

Page 40: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 40

Obr.16 Reštartovacie obvody MCU

Vstupno-výstupné brány MCU sa bezprostredne po reštarte nastavia do počiatočného

stavu. Toto nastavenie nepotrebuje zdroj hodinového signálu.

Po reštarte sa prostredníctvom čítača oneskorenia predĺži interný reštart tak, aby

napájacie napätie dosiahlo stabilnú úroveň. Čas oneskorenia je definovaný užívateľom

prostredníctvom bitov CKSEL.

Mikrokontrolér Atmega8 má štyri nasledovné zdroje reštartu:

Reštart pri pripojení napájacieho napätia. MCU je reštartovaný ak napájacie napätie je

nižšie než Vpot.

Externý reštart. MCU je reštartovaný, ak na vstupe /RESET je logická 0 počas

minimálne 1.5 us.

Watchdog reštart. MCU je reštartovaný, ak je povolený watchdog a uplynie nastavený

časový úsek.

Brown-out reštart. MCU je reštartovaný ak napájacie napätie klesne pod hodnotu Vbot

a brown-out detektor je povolený.

Označenie Parameter Podmienka Min. Typ. Max. jednotka

Vpot Reštart po pripojení Ucc (nábeh)

Reštart po prippojení Ucc (pokles)

1.4

1.3

2.3

2.3

V

V

VRST Rozhodovacia úroveň na vývode 0.1 0.9 Vcc

Vcc

RESET

Reštartovacie

obvody

Obvody brown-out

reštartu

Obvody reštartuFilter

Pull-up

odpor

Watchdog

časovač

Watchdog

oscilátor

Generátor hodínČítač oneskoreniaCK

S

R

Q

TIM

EO

UT

RE

SE

T

MCU riadiaci a stavový

register, MCUCSR

interný

RESET

údajová zbernica

CKSEL3..0

SUT1..0

BOD

úroveň

Page 41: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 41

RESET

tRST Minimálna dĺžka impulzu na vývode

RESET

1.5 s

VBOD Rozhodovacia úroveň pre Brown-out

reštart

BODLEVEL=1

BODLEVEL=0

2.4

3.7

2.6

4.0

2.9

4.5

V

V

tBOD Minimálny čas pre brown-out

detekciu

BODLEVEL=1

BODLEVEL=0

2

2

s

s

VHYST Hysterézia brown-out detektora 130 MV

Tab.14 Charakteristiky reštartu MCU

3.7.1 Externý reštart

Nízka napäťová úroveň na vývode /RESET spôsobí generovanie externého reštartu.

Ak sa vyskytne na vývode /RESET impulz dlhší, ako 1.5s reštartovacie obvody budú

generovať reštart MCU. Impulz kratší než 1.5s nezaručuje spustenie reštartu. Keď signál na

vývode RESET pri nábežnej hrane dosiahne hodnotu VRST aktivuje sa čítač oneskorenia,

ktorý definuje čas tTOUT. Popísaný proces je dokumentovaný časovými priebehmi na obr.17.

Obr.17 Externý reštart

3.7.2 Detekcia brown-out

MCU obsahuje detektor brown-out (BOD), ktorý slúži na monitorovanie úrovne

napájacieho napätia. Úroveň napájacieho napätia obvod BOD porovnáva s porovnávacím

napätím, ktoré je možné voliť v dvoch úrovniach pomocou bitu BODLEVEL. Činnosť

modulu BOD môže užívateľ povoliť, alebo zakázať pomocou BODEN bitu. Ak BOD je

povolený a napájacie napätie sa zníži pod hodnotu porovnávacieho napätia VBOD-, potom je

aktivovaný Brown-out reštart. Ak napájacie napätie sa zvýši nad hodnotu VBOD+, potom sa

aktivuje čítač oneskorenia, ktorý definuje čas tTOUT. Časové diagramy znázorňujúce proces

reštartu sú uvedené na obr.18.

Vcc

RESET

tTOU T

Interný

RESET

VR ST

tTOU T

Page 42: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 42

Obr.18 Brown-out reštart

3.7.3 Watchdog reštart

Keď uplynie časový úsek definovaný watchdog čítačom potom sa generuje krátky

impulz. Na nábežnú hranu tohto impulzu sa aktivuje interný RESET a súčasne čítač

oneskorenia, ktorý definuje čas tTOUT. Uvedený proces je znázornený na obr.19.

Obr.19 Watchdog reštart

3.8 RIADIACI A STAVOVÝ REGISTER MIKROKONTROLÉRA, MCUCSR

Riadiaci a stavový register obsahuje informácie, ktorý z reštartovacích zdrojov môže

spôsobiť reštart mikrokontroléru.

MCUCSR:

Bit 7 6 5 4 3 2 1 0

- - - - WDRF BORF EXTRF PORF

Prístup R R R R R/W R/W R/W R/W

Vcc

RESET

tTOU T

Interný

RESET

tTOU T

VBOD- VBOD+

Vcc

RESET

tTOU T

Interný

RESET

tTOU T

WDT

TIME-OUT

Page 43: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 43

Poč.

hodnota

0 0 0 0 Viď

popis

Viď

popis

Viď

popis

Viď

popis

Bity 7 až 4 nie sú v MCU ATmega8 využité.

Bit 3 – WDFR, Watchdog Reset Flag

Bit WDFR sa nastaví, pri výskyte watchdog reštartu. Tento bit je nulovaný pri reštarte po

pripojení napájacieho napätia, prípadne zápisom logickej nuly.

Bit 2 – BORF, Brown-out Reset Flag

Bit BORF sa nastaví, pri výskyte brown-out reštartu. Tento bit je nulovaný pri reštarte po

pripojení napájacieho napätia, prípadne zápisom logickej nuly.

Bit 1 – EXTFR, External Reset Flag

Bit EXTFR sa nastaví, pri výskyte externého reštartu. Tento bit je nulovaný pri reštarte po

pripojení napájacieho napätia, prípadne zápisom logickej nuly.

Bit 0 – PORF, Power-on Rest Flag

Bit PORF sa nastaví, pri výskyte reštartu po pripojení napájacie napätia. Tento bit je nulovaný

len zápisom logickej nuly.

Popísané bity registra MCUCSR slúžia na identifikáciu príčiny, ktorá spôsobila reštart MCU.

3.9 ZDROJ INTERNÉHO REFERENČNÉHO NAPÄTIA

ATmega8 obsahuje zdroj interného referenčného napätia (bandgap). Uvedené

referenčné napätie sa využíva v bloku brown-out detektora a je možné ho tiež využiť ako

vstupnú hodnotu do analógového komparátora, alebo analógovo-číslicového prevodníka.

Interné referenčné napätie pre ADC (2.56V) je generované z interného zdroja bandgap

referenčného napätia.

Z dôvodu zníženia spotreby nemusí byť zdroj referenčného napätia vždy zapnutý. Zdroj

referenčného napätia je zapnutý len v nasledujúcich prípadoch:

1. Ak BOD je povolený naprogramovaním BODEN bitu.

2. Ak bandgap referenčné napätie je pripojené na vstup analógového

komparátora. ( Bit ACBG v registri ACSR je nastavený.)

3. Ak je povolená činnosť analógovo-číslicového prevodníka.

Ak činnosť BOD je zakázaná, potom užívateľ po nastavení ACBG bitu, alebo povolení ADC

prevodu musí počítať s časom nábehu referenčného napätia uvedeného v tabuľke 15. Pred

prechodom do niektorého z úsporných režimov je potrebné zabezpečiť vypnutie zdroja

referenčného napätia.

Symbol Parameter Min. Typ. Max. jednotka

VBG Bandgap referenčné napätie 1.15 1.23 1.35 V

tBG Čas nábehu referenčného napätia 40 70 s

IBG Spotreba 10 A

Tab.15 Charakteristiky interného zdroja referenčného napätia

Page 44: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 44

3.10 ČASOVAČ WATCHDOG

Watchdog časovač je budený z oddeleného integrovaného oscilátora s frekvenciou

1MHz. 1MHz je typická hodnota pri napájacom napätí 5V. Pomocou preddeličky je možné

nastaviť reštartovací interval, tab.3. Inštrukciou WDR môžeme vynulovať obsah watchdog

časovača. Pomocou obsahu bitov WDP0..2 môžeme zvoliť jednu z ôsmych možných

frekvencií hodinového signálu ako vstup do WD časovača. Ak v priebehu zvolenej periódy

nebude vykonaná inštrukcia WDR, potom bude MCU reštartovaný.

Obr.20 Watchdog časovač

Riadiaci register časovača watchdog ,WDTCR

WFTCR:

Bit 7 6 5 4 3 2 1 0

Označenie - - - WDCE WDE WDP2 WDP1 WDP0

Prístup R R R R/W R/W R/W R/W R/W

Poč. hod. 0 0 0 0 0 0 0 0

Bity 7 až 5 sú v MCU ATmega8 nevyužité.

Bit 4 – WDCE, Warchdog Change Enable

Bit WDCE musí byť nastavený (log.1), ak chceme zapísať do bitu WDE log.0 t.j. zakázať

činnosť systému watchdog. Po zápise logickej jednotky do bitu WDCE bude jeho obsah

automaticky vynulovaný po uplynutí štyroch hodinových cyklov. Pri bezpečnostných

úrovniach 1 a 2 musíme nastaviť bit WDCE aj pred zmenou obsahu bitov WDP2..0.

Bezpečnostná úroveň 1 je definovaná bitom WDTON- nenaprogramovaný, log.1.

WATCHDOG

OSCILÁTORPREDDELIČKA

MCU

RESET

WATCHDOG RESET

WDP0

WDP1

WDP2

WDE

OS

C/1

6K

OS

C/3

2K

OS

C/6

4K

OS

C/1

28K

OS

C/2

56K

OS

C/5

12K

OS

C/1

024K

OS

C/2

048K

Page 45: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 45

V tomto režime nie je po reštarte systém watchdog povolený. Je možné ho povoliť zápisom

logickej jednotky do bitu WDE. Pri jeho opätovnom zakázaní, alebo pri zmene obsahu bitov

WDP2..0 je potrebné postupovať nasledovne:

1. V tej istej operácii je potrebné zapísať log. jednotku do bitov WDCE a WDE, bez

ohľadu na predchádzajúcu hodnotu bitu WDE.

2. V priebehu nasledujúcich 4 hodinových cyklov je potrebné zapísať požadované

hodnoty bitov WDE a WDP2..0.

Bezpečnostná úroveň 2 je definovaná bitom WDTON- naprogramovaný, log.0.

V tomto režime je činnosť systému watchdog vždy povolená. V tomto prípade môže užívateľ

meniť len obsah bitov WDP2..0, podľa nasledovného postupu:

1. V tej istej operácii je potrebné zapísať logickú jednotku do bitov WDCE a WDE aj

napriek tomu, že obsah WDE je vždy logická jednotka.

2. V priebehu nasledujúcich 4 hodinových cyklov je potrebné zapísať požadované

hodnoty bitov WDP2..0 s hodnotou bitu WDCE log. 0. Hodnota bitu WDE môže

byť ľubovolná.

Bit 3 – WDE, Watchdog Enable

Činnosť systému watchdog bude povolená, ak bit WDE bude nastavený na hodnotu log.1.

Bity2..0 – WDP2, WDP1, WDP0, Watchdog Timer Prescaler 2, 1, 0

Obsah bitov WDP2..0 definujú predeličku watchdog časovača, podľa tabuľky 16.

WDP2 WDP1 WDP0 Počet periód WDT OSC Typický čas

WDT, Ucc=3V

Typický čas

WDT, Ucc=5V

0 0 0 16 384 17.1 ms 16.3 ms

0 0 1 32 768 34.3 ms 32.5 ms

0 1 0 65 536 68.5 ms 65 ms

0 1 1 131 072 0.14 s 0.13 s

1 0 0 262 144 0.27 s 0.26 s

1 0 1 524 288 0.55 s 0.52 s

1 1 0 1 048 576 1.1 s 1.0 s

1 1 1 2 097 152 2.2 s 2.1 s

Tab.16 Preddelička watchdog časovača

3.11 PRERUŠOVACÍ PODSYSTÉM

V tejto časti sú popísané len špecifické vlastnosti prerušovacieho systému MCU

ATmega8. Základné vlastnosti prerušovacieho systému boli uvedené v predchádzajúcich

častiach. MCU ATmega8 má definovaných 19 zdrojov prerušení. Sú uvedené v tabuľke 17.

Číslo prer.

vektora

Adresa(2) Zdroj Popis prerušenia

1 0x0000(1) RESET Ext.vývod, reštart po zapnutí, brown-out reštart,

watchdog reštart

2 0x0001 INT0 Externé prerušenie 0

3 0x0002 INT1 Externé prerušenie 1

4 0x0003 TIMER2COMP Časovač/čítať2, porovnávanie

Page 46: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 46

5 0x0004 TIMER2OVF Časovač/čítač2, pretečenie

6 0x0005 TIMER1CAPT Časovač/čítač1, zachytenie udalosti

7 0x0006 TIMER1COMPA Časovač/čítač1, porovnávanie s A registrom

8 0x0007 TIMER1COMPB Časovač/čítač1, porovnávanie s B registrom

9 0x0008 TIMER1OVF Časovač/čítač1, pretečenie

10 0x0009 TIMER0OVF Časovač/čítač0, pretečenie

11 0x000A SPI,STC Sériový prenos dokončený

12 0x000B USART,RXT USART, vysielanie znaku dokončené

13 0x000C USART,UDRE USART, údajový register prázdny

14 0x000D USART,TXC USART, vysielanie znaku dokončené

15 0x000E ADC A-D prevod dokončený

16 0x000F EE_RDY Pamäť EEPROM pripravená

17 0x0010 ANA_COMP Analógový komparátor

18 0x0011 TWI Dvojvodičový sériový interface

19 0x0012 SPM_RDY Pamäť programu pripravená

(1) Ak bit BOOTRST je naprogramovaný, potom pri reštarte MCU skáče na adresu

zavádzacieho programu (Boot loader).

(2) Ak bit IVSEL v registri GICR je nastavený, prerušovacie vektorysú premiestnené na

začiatok sekcie pamätezavádzacieho programu.

Tab.17 Zdroje prerušenia

V tabuľke 18 je uvedené umiestnenie prerušovacích vektorov pri rôznych hodnotách bitov

BOOTRST a IVSEL.

BOOTRST IVSEL Reštartovacia adresa Počiatočná adresa prerušovacích vektorov

1 0 0x0000 0x0001

1 1 0x0000 BR adresa + 0x0001

0 0 BR adresa 0x0001

0 1 BR adresa BR adresa + 0x0001

Tab.18 Umiestnenie reštartovacej adresy a prerušovacích vektorov

3.11.1 Premiestňovanie prerušení medzi aplikačnou a zavádzaciou časťou pamäte

Umiestnenie prerušovacích vektorov je určené hodnotou bitu IVSEL v registri riadenia

prerušení – GICR.

GICR:

Bit 7 6 5 4 3 2 1 0

INT1 INT0 - - - - - IVSEL IVCE

Prístup R/W R/W R R R R R/W R/W

P.hodnota 0 0 0 0 0 0 0 0

Bit 1 – IVSEL, Interrupt Vector Select

Ak obsah bitu IVSEL je logická nula, potom prerušovacie vektory sú umiestnené na začiatku

pamäte FLASH. Ak obsah bitu IVSEL je logická jednotka, potom prerušovacie vektory sú

Page 47: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 47

premiestnené na začiatok sekcie určenej pre zavádzací program. Adresa začiatku zavádzacej

sekcie je určená bitmi BOOTSZ. Ak chceme zmeniť obsah bitu IVSEL je potrebné

postupovať nasledovne:

1. Do bitu IVCE je potrebné zapísať log.1, (povolenie zmeny IVSEL)

2. V priebehu nasledujúcich 4 hodinových cyklov je potrebné zapísať do IVSEL

želanú hodnotu a do bitu IVCE sa zapíše log.0.

Obsluha prerušení bude automaticky zakázaná počas vykonávania predchádzajúcej sekvencie.

Pripomeňme, že obsah bitu IVCE je automaticky po nastavení vynulovaný po uplynutí

štyroch hodinových cyklov.

Bit 0 – IVCE, Interrupt Change Enable

Pomocou bitu IVCE sa povoľuje/zakazuje zmena hodnoty bitu IVSEL. Ak bit IVCE je

nastavený na logickú jednotku je možné vykonať zmenu hodnoty bitu IVSEL. V opačnom

prípade nie je možné hodnotu bitu IVSEL meniť. Bit IVCE je nulovaný automaticky po

uplynutí štyroch hodinových cyklov od jeho nastavenia, prípadne zápisom do IVSEL.

Nastavenie bitu IVCE zakáže obsluhu prerušení.

4. VSTUPNO-VÝSTUPNÉ MODULY MIKROKONTROLÉRA

Mikrokontrolér ATmega8 obsahuje rozsiahly súbor vstupno-výstupných modulov

ktoré umožňujú užívateľovi realizovať väzbu mikrokontroléra s okolím. Tieto moduly

podporujú:

Paralelnú komunikáciu, dvojhodnotové vstupy/výstupy pre všeobecné použitie:

brána B

brána C

brána D

Sériovú komunikáciu:

univerzálny synchrónny/asynchrónny vysielač/prijímač, (USART)

sériovú komunikáciu s perifériami, (SPI)

dvojvodičové sériové rozhranie, (TWI)

Prácu s reálnym časom a externými udalosťami:

časovač/čítač0

časovač/čítač1

časovač/čítač2

komparátor

modul externých prerušení

Väzbu na analógové externé prostredie:

analógovo číslicový prevodník

moduly impulzne šírkovej modulácie PWM

Korektný výkon programu:

modul systému Watch-dog

4.1 VSTUPNO-VÝSTUPNÉ BRÁNY MIKROKONTROLÉRA

Page 48: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 48

Každý vývod vstupno-výstupných brán je možné pomocou programových

prostriedkov bez ovplyvnenia ostatných vývodov danej brány nastaviť do rôznych režimov

činnosti (vstup, alebo výstup, nastavenie, alebo odpojenie pull-up odporu a pod.). Každý

výstup má symetrické záťažové charakteristiky. Všetky vývody majú voliteľné pull-up odpory

a ochranné diódy, ktoré sú zapojené podľa obr.21.

PINlog.obvody

MCU

D1

D2

Cp

Rp

Obr.21 Ekvivalentná schéma V/V vývodu

Každá V/V brána má vyhradené tri rôzne adresy vo V/V pamäťovom priestore. Tieto adresy

sú určené pre údajový register - PORTx, register smeru - DDRx a vstupy – PINx. Registre

PORTx a DDRx sú prístupné pre čítanie a zápis obsahu, pričom z PINx je možné len čítať.

Poznamenajme, že nastavením bitu PUD v registri SFIOR je možné zakázať pull-up odpory

pre všetky vývody každej brány.

Väčšina vývodov vstupno-výstupných brán má aj alternatívne funkcie, ktoré budú

popísané v ďalšom texte.

Vstupno-výstupné brány MCU sú obojsmerné s voliteľnými internými pull-up

odpormi. Na obr.22 je uvedená schéma V/V vývodu, všeobecne označeného Pxn.

Každému digitálnemu vstupo-výstupu sú priradené tri bity. Po jednom bite v troch registroch

DDRx, PORTx a PINx. Príslušné bity v registroch zodpovedajúce danému V/V budeme

označovať ako DDxn, PORTxn a PINxn. Symbol x zastupuje označenie príslušnej

brány(B,C,D) a n číslo bitu (0 až 7) danej brány.

Bity DDxn v DDRx registri definujú smer V/V vývodov. Ak v bite DDxn je zapísaná

logická 1, potom je zodpovedajúci V/V konfigurovaný ako výstup. V príade logickej 0 je

príslušný V/V konfigurovaný ako vstup.

Ak bit PORTxn obsahuje logickú 1 a súčasne je príslušný V/V konfigurovaný ako

výstupný, potom je aktivovaný pull-up odpor. Ak chceme odpojiť pull-up odpor, potom je

potrebné do príslušného bitu PORTxn zapísať logickú 0. Po reštarte, alebo pri neprítomnosti

hodinových impulzov budú všetky V/V v treťom stave.

Ak PORTxn bude konfigurovaný ako výstupný (DDxn log.1), potom zápisom logickej

hodnoty do bitu PORTxn dosiahneme to, že na príslušnom vývode MCU sa objaví napätie

zodpovedajúce zapísanej hodnote. (Logická nula nízka úroveň napätia, logická jednotka

vysoká úroveň).

Page 49: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 49

Pxn

Q D

RES

úd

ajo

zb

ern

ica

WDx

RDx

Q D

RES

WPx

RRx

PUD

RPx

QQ DD

L

ClkIO

Synchronizácia

Sleep

Význam signálov: PUD– povolenie pull-up odporov, Sleep–ridenie pri úsporných režimoch,

ClkIO hodinový signál pre V/V obvody, WDx–zápis do registra DDRx, RDx– čítanie z registra

DDRx, WPx–zápis do registra PORTx, RRx–čítanie z registra PORTx, RPx–čítanie PORTx

vývodov.

Pozn. WPx, WDx, RRx a RPx sú signály spoločné pre všetkých 8 vývodov tej istej brány.

Signály ClkIO, Sleep, PUD sú spoločné pre všetky brány.

Obr. 22 Schéma vstupno-výstupného vývodu Pxn

V tabuľke 19 je uvedený prehľad riadiacich signálov a príslušných konfigurácií vstupo-

výstupov.

DDxn PORTxn PUD V/V Pull-up Komentár

0 0 X Vstup Nie Tretí stav (Hi-Z)

0 1 0 Vstup Áno Pxn bude zdrojom prúdu

0 1 1 Vstup Nie Tretí stav (Hi-Z)

1 0 X Výstup Nie Nízke napätie na výstupe (Sink)

1 1 X Výstup Nie Vysoké napätie na výstupe (Source)

Tab.19 Konfigurácia vstupno-výstupných vývodov.

Nezávisle od hodnoty bitov určujúcich smer - DDxn môžeme čítať hodnotu z príslušného bitu

PINxn, registra PINx. Zabezpečenie synchronizácie pri čítaní hodnoty úrovne externého

napätia na príslušnom vývode a ďalšie podrobnosti sú uvedené v technickej dokumentácii

výrobcu a nebudeme ich podrobnejšie popisovať.

Z obr.22 je zrejmé, že vstupné signály môžu byť pripojené na napäťovú úroveň zeme

prostredníctvom spínača na vstupe do Shmitovho obvodu. Signál označený ako „Sleep“

generuje riadiaca jednotka MCU vo vybraných režimoch zo zníženou spotrebou. Signál

Page 50: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 50

„Sleep“ nie je aktívny pre vstupy povolených externých prerušení a pre vstupy zodpovedajúce

niektorým alternatívnym funkciám.

Ak niektoré V/V vývody nie sú v aplikácii využité, doporučuje sa na nich zaistiť

stabilnú úroveň napätia. Najjednoduchší prípad je povoliť ich interné pull-up odpory.

Pripomeňme, že ak je dôležitá aj spotreba počas reštartu zariadenia, potom je vhodné použiť

externé pull-up, prípadne pull-down odpory (odpory zapojené medzi V/V a Ucc resp.GND ).

V tomto prípade však musíme zaistiť aby nevyužité vstupy neboli konfigorované ako výstupy.

Ako už bolo spomenuté väčšina V/V vývodov má tiež alternatívne funkcie. Obr. 23

znázorňuje, ako je možné prostredníctvom riadiacich signálov využívať alternatívne funkcie

V/V vývodov.

Pxn

Q D

RES

údaj

ová

zber

nica

WDx

RDx

Q D

RES

WPx

RRx

PUD

RPx

QQ DD

L

ClkIO

synchronizácia

Sleep

1

0

PUOExn

PUOVxn

DDOExn

DDOVxn1

1

0

0

PVOExn

PVOVxn

1

0

DIEOVxn

DIEOExn

DIxn

AIOxn

Pozn.: WPx, WDx, RRx, RPx a RDx sú spoločné pre všetky vývody tej istej brány. ClkIO,

SLEEP a PUD sú spoločné pre všetky brány. Ostatné signály sú samostatné pre každý V/V

vývod. Význam riadiacich signálov pre alternatívne funkcie je uvedený v tabuľke2.

Obr.23 Alternatívne funkcie V/V brán

Tabuľka 19 uvádza funkcie riadiacich signálov alternatívnych funkcií. Riadiace signály sú

generované internými modulmi alternatívnych funkcií.

Page 51: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 51

Signál Názov Popis

PUOE Pull-up Override

Enable

Ak hodnota signálu je log.1, potom zapnutie pull-up odporu je

riadené signálom PUOV.

PUOV Pull-up Override

value

Ak PUOE je log. 1, potom pull-up odpor je zapnutý/vypnutý

keď PUOV má hodnotu log.1/ log.0.

DDOE Data Direction

Override Enable

Ak hodnota signálu je log.1, príslušný výstup je riadený

signálom DDOV. Inak bitom DDxn registra DDRx.

DDOV Data Direction

Override Value

Ak DDOE má hodnotu log.1, potom je výstup

povolený/zakázaný keď DDOV má hodnotu log.1/log.0.

PVOE Port Value

Override Enable

Ak hodnota signálu je log.1, príslušný výstup je riadený

signálom PVOV. Inak bitom PORTxn registra PORTxn.

PVOV Port Value

Override Value

Ak PVOE má hodnotu log.1, potom hodnota výstupu je daná

hodnotou PVOV.

DIEOE Digital Input

Enable Overide

Enable

Ak hodnota signálu je log.1, potom povolenie digitálneho

vstupu je riadené signálom DIEOV. Inak je povolenie

digitálneho vstupu určené stavom MCU.

DIEOV Digital Input

Enable Override

value

Ak DIEOE má hodnotu log.1, potom digitálny vstup je

povolený/zakázaný, keď DIEOV má hodnotu log.1/log.0, bez

ohľadu na stav MCU.

DI Digital Input Digitálny vstup pre alternatívne funkcie

AIO Analog

Input/Output

Analógový vstup/výstup do a z bloku alternatívnej funkcie.

Signál je pripojený priamo na vývod, môže byť využívaný

obojsmerne.

Tab.19 Riadiace signály pre alternatívne funkcie

V ďalšom texte budú stručne popísané alternatívne funkcie jednotlivých V/V vývodov každej

brány.

4.1.1 Brána B

Alternatívne funkcie brány B sú uvedené v tabuľke 20.

Vývod brány Alternatívna funkcia

PB7 XTAL2 - MCU oscilátor, vývod2

TOSC2 - oscilátor časovača, vývod2

PB6 XTAL1 – MCU oscilátor, vývod1

TOSC1 – oscilátor časovača, vývod2

PB5 SCK – SPI zbernica, hodiny

PB4 MISO – SPI zbernica dáta, master výstup/ slave vstup

PB3 MOSI – SPI zbernica dáta, master vstup/ slave výstup

OC2 – časovač/čítač2, výstup porovnania

PB2 /SS – SPI zbernica master slave výber

OC1B – časovač/čítač1, výstup porovnania s registrom B

PB1 OC1A – časovač/čítač1, výstup porovnania s registrom A

PB0 ICP1 – časovač/čítač1, záchytný vstup

Tab.20 Alternatívne funkcie vývodov brány B

Page 52: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 52

Význam jednotlivých alternatívnych funkcií je nasledovný:

XTAL2/TOSC2 – brána B, bit 7

XTAL2 - Vývod 2 oscilátora hodín MCU. Je využívaný ako vývod pre oscilátor

riadený kryštálom, prípadne pre nízkofrekvenčný kryštálový oscilátor. Ak je použitý ako

vývod oscilátora nie je ho možné využívať ako V/V vývod.

TOSC2 – Vývod 2 oscilátora pre časovač. V tejto funkcii môže byť použitý len

v prípade, ak ako MCU oscilátor je použitý interný kalibrovaný RC oscilátor a súčasne je

povolená činnosť asynchrónneho časovača vhodným nastavením vybraných bitov registra

ASSR.

XTAL1/TOSC1 – brána B, bit 6

XTAL1 - Vývod 1 oscilátora hodín MCU. Je využívaný pre všetky zdroje hodinového

signálu MCU s výnimkou interného kalibrovaného RC oscilátora. Ak je využívaný zdrojom

hodinového signálu nie je možné ho využiť ako V/V vývod.

TOSC1 – Oscilátor časovača, vývod 1. V tejto funkcii môže byť použitý len v prípade,

ak ako oscilátor MCU je použitý interný kalibrovaný RC oscilátor a súčasne je povolená

činnosť asynchrónneho časovača vhodným nastavením vybraných bitov registra ASSR.

SCK – brána B, bit 5

SCK - výstup hodinového signálu MASTER a vstup hodinového signálu SLAVE pri

komunikácii prostredníctvom rozhrania SPI. Ak činnosť SPI je povolená v režime SLAVE,

potom je tento vývod konfigurovaný ako vstup. Ak SPI je povolené v režime MASTER

potom smer vývodu je definovaný hodnotou bitu DDB5. Ak v tomto prípade je rozhranie SPI

konfigurované ako vstupné, potom prostredníctvom bitu PORTB5 môžeme ovládať

pripojenie pull-up odporu.

MISO – brána B, bit 4

MISO – vstup dát pre MASTER a výstup dát pre SLAVE pri komunikácii

prostredníctvom rozhrania SPI. Ak činnosť SPI je povolená v režime MASTER, potom je

tento vývod konfigurovaný ako vstup. Ak činnosť SPI je povolená v režime SLAVE, potom

smer vývodu je definovaný hodnotou bitu DDB4. Ak v tomto prípade je SPI konfigurované

ako vstup, potom prostredníctvom bitu PORTB4 môžeme ovládať pripojenie pull-up odporu.

MOSI/OC2 – brána B, bit 3

MOSI - výstup dát v režime MASTER a vstup dát v režime SLAVE pri komunikácii

prostredníctvom SPI. Ak činnosť SPI je povolená v režime SLAVE, potom je tento vývod

konfigurovaný ako vstupný. Ak činnosť SPI je povolená v režime MASTER potom smer

vývodu je definovaný hodnotou bitu DDB3. Ak v tomto prípade je modul SPI konfigurovaný

ako vstup, potom prostredníctvom bitu PORTB3 môžeme ovládať pripojenie pull-up odporu.

OC2 – výstup porovnania. Vývod PB3 môže slúžiť ako výstup porovnania obsahu

časovača/čítača2 s obsahom porovnávacích registrov. Vývod OC2 môže tiež slúžiť ako

výstup, v prípade, že časovač/čítač 2 pracuje v režime PWM.

Page 53: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 53

/SS/OC1B – brána B, bit 2

/SS – výber zariadenia typu SLAVE. Ak je povolená činnosť modulu SPI v režime

SLAVE, potom je uvedený vývod konfigurovaný ako vstup. Ak je aktivované SPI v režime

SLAVE, potom tento vývod je výstup a má hodnotu odpovedajúcu log.0. Ak je modul SPI

v režime MASTER, potom je smer tohto vývodu definovaný obsahom bitu DDB2. V tomto

prípade ak je SPI konfigurované ako vstup, potom prostredníctvom bitu PORTB2 môžeme

ovládať pripojenie pull-up odporu.

OC1B – výstup porovnania. Vývod PB2 môže slúžiť ako výstup porovnania obsahu

časovača/čítača1 s obsahom porovnávacích registrov B. V prípade, že časovač/čítač 1 pracuje

v režime PWM, potom vývod OC1B slúži ako výstup signálu PWM.

OC1A – brána B, bit 1

OC1A – výstup porovnania. Vývod PB1 môže slúžiť ako výstup porovnania obsahu

časovača/čítača1 s obsahom porovnávacích registrov A. V prípade, že časovač/čítač 1 pracuje

v režime PWM, potom OC1B je využitý ako výstup signálu PWM.

ICP1 – brána B, bit 0

ICP1 – vstupný záchytný vývod. Vývod PB0 môže slúžiť ako záchytný vstup pre

časovač/čítač 1.

4.1.2 Brána C

Alternatívne funkcie brány C sú uvedené v tabuľke 21.

Vývod brány Alternatívna funkcia

PC6 /RESET - reštart MCU

PC5 ADC5 - vstupný kanál A/D prevodníka

SCL – dvojvodičová sériová zbernica (TWI), hodinový signál

PC4 ADC4 - vstupný kanál A/D prevodníka

SDA – dvojvodičová sériová zbernica, dáta

PC3 ADC3 - vstupný kanál A/D prevodníka

PC2 ADC2 - vstupný kanál A/D prevodníka

PC1 ADC1 - vstupný kanál A/D prevodníka

PC0 ADC0 - vstupný kanál A/D prevodníka

Tab.21 Alternatívne funkcie vývodov brány B

/RESET – brána C, bit 6

/RESET – Ak bit RSTDISP je naprogramovaný (log.0), potom PC6 slúži ako

všeobecný V/V vývod. Ak RSTDISP je nenaprogramovaný (log.1), reštartovacie obvody

MCU sú pripojené k tomuto vývodu a potom nemôže byť využitý ako V/V vývod.

Page 54: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 54

SCL/ADC5 – brána C, bit5

SCL – hodinový signál pre dvojvodičovú sériovú zbernicu -TWI. Keď bit TWEN

v registri TWCR obsahuje logickú hodnotu 1, potom vývod PC5 je využitý pre hodinový

signál dvojvodičovej zbernice.

Vývod PC5 môže byť tiež využitý ako piaty vstupný kanál do interného A/D

prevodníka.

SDA/ADC4 – brána C, bit 4

SDA – prenos dát po dvojvodičovej sériovej údajová zbernici. Keď bit TWEN

v registri TWCR obsahuje logickú hodnotu 1, potom je povolená činnosť dvojvodičovej

sériovej zbernice a vývod PC4 je využitý pre prenos dát po dvojvodičovej sériovej zbernici.

PC4 môže byť využitý ako štvrtý vstupný kanál do interného A/D prevodníka

ADC3 – brána C, bit 3

PC3 môže byť využitý ako tretí vstupný kanál do interného A/D prevodníka.

ADC2 – brána C, bit 2

PC2 môže byť využitý ako tretí vstupný kanál do interného A/D prevodníka.

ADC1 – brána C, bit 1

PC1 môže byť využitý ako tretí vstupný kanál do interného A/D prevodníka.

ADC0 – brána C, bit 0

PC0 môže byť využitý ako tretí vstupný kanál do interného A/D prevodníka.

4.1.3 Brána D

Alternatívne funkcie brány D sú uvedené v tabuľke 22.

Vývod brány Alternatívna funkcia

PD7 AIN1 - invertujúci vstup analógového komparátora

PD6 AIN2 - neinvertujúci vstup analógového komparátora

PD5 T1 - externý vstup časovača/čítača1

PD4 XCK – vstup/výstup externého hodinového signálu pre USART

T0 – externý vstup časovača/čítača 0

PD3 INT1 – externý prerušovací vstup 1

PD2 INT0 – externý prerušovací vstup 0

PD1 TXD – výstup USART

PD0 RXD – vstup USART

Tab.22 Alternatívne funkcie vývodov brány D

AIN1 – brána D, bit 7

Page 55: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 55

AIN1 – invertujúci vstup do analógového komparátora.

AIN0 – brána D, bit 6

AIN0 – neinvertujúci vstup do analógového komparátora.

T1 – brána D, bit 5

T1 – zdroj hodinového signálu pre časovač/čítač 1.

XCK/T0 – brána D, bit 4

XCK – externý signál hodín pre modul USART.

T0 - zdroj hodinového signálu pre časovač/čítač 0.

INT1 – brána D, bit 3

INT1 – zdroj externého prerušenia 1.

INT0 – brána D, bit 2

INT0 – zdroj externého prerušenia 0.

TXD – brána D, bit 1

TXD – údaje vysielané modulom USART. Ak činnosť modulu USART je povolená,

potom PD1 je konfigurovaný ako výstup nezávisle na hodnote bitu DDD1.

RXD – brána D, bit 0

RXD – údaje prijímané modulom USART. Ak je povolená činnosť modulu USART,

potom PD0 je konfigurovaný ako vstup nezávisle na hodnote bitu DDD0. V tomto prípade je

možné ovládať pripojenie pull-up odporu prostredníctvom hodnoty bitu PORTD0.

4.2 UNIVERZÁLNY SYNCHRÓNNY/ASYNCHRÓNNY PRIJÍMAČ/VYSIELAČ,

USART

Univerzálny synchrónny a asynchrónny sériový vysielač a prijímač je flexibilná

univerzálna jednotka určená na sériovú komunikáciu. Jej základné charakteristiky sú

nasledovné:

Plne obojsmerná činnosť,

asynchrónny, alebo synchrónny komunikačný režim,

generátor prenosovej rýchlosti s vysokou rozlišovacou schopnosťou,

synchrónna činnosť v režimoch Master, alebo Slave,

Page 56: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 56

podporuje prenos dát dĺžky 5, 6, 7, 8, alebo 9 dátových bitov a 1, alebo 2 stop bity,

generátor párnej, alebo nepárnej parity a kontrola paritného bitu,

detekcia pretečenia dát,

detekcia chyby prenosu,

filtrácia šumu,

tri oddelené prerušenia, Tx kompletné, Tx dátový register prázdny a Rx kompletné,

režim multiprocesorovej komunikácie,

asynchrónny komunikačný režim s dvojnásobnou rýchlosťou.

Zjednodušená bloková schéma jednotky USART je uvedená na obr.24.

Page 57: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 57

Obr.24 Bloková schéma komunikačnej jednotky USART

Jednotka USART pozostáva s troch základných blokov. Sú to: generátor hodinového

signálu, vysielač a prijímač.

Generátor hodinového signálu je zložený s generátora prenosovej rýchlosti

a synchronizačných obvodov pre externý vstup hodinového signálu, ktorý je využívaný

v prípade, ak jednotka pracuje v synchrónnom „SLAVE“ režime. Vývod XCK sa využíva len

ak jednotka pracuje v synchrónnom prenosovom režime.

Vysielač je zložený z vyrovnávacieho registra, sériového posuvného registra,

generátora parity a riadiacich obvodov pre prenos rôznych formátov údajov. Vyrovnávací

UBRR [H:L

generátor prenosovej

rýchlosti

synchronizácia

riadenie V/V XCK

generátoer

hodinového signálu

UDR, vysielač

vysielací posuvný register

generátor

parity

riadenie V/V TxD

riadenie Tx

prijímací posuvný register

UDR, prijímač

obnova

hodín

obnova dát

kontrola

parity

riadenie RX

riadenie

V/VRxD

UCSRA UCSRB UCSRC

vysielač

prijímač

OSC

úda

jová

zb

ern

ica

Page 58: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 58

register pre zápis dovoľuje vysielať údaje bez oneskorenia medzi jednotlivými čiastkovými

prenosmi.

Prijímač je vďaka jednotkám obnovy údajov a hodinového signálu najzložitejšou

časťou modulu USART. Jednotky obnovy sa využívajú pri asynchrónnom príjme dát.

Prijímač obsahuje tiež obvod na kontrolu parity, riadiacu jednotku, posuvný register

a dvojúrovňový prijímací vyrovnávací register (UDR). Prijímač podporuje všetky formáty

prenosu dát vysielača a môže detekovať chybu príjmu, pretečenie údajov a chybu parity.

4.2.1 Generátor hodinového signálu

Generátor hodinového signálu generuje základný hodinový signál pre vysielač

a prijímač. Jednotka USART podporuje štyri základné režimy: normálny asynchrónny,

asynchrónny s dvojnásobnou rýchlosťou a synchrónne režimy „MASTER“ a „SLAVE“.

Pomocou bitu UMSEL v riadiacom a stavovom registri C (UCSRC) je možné voliť medzi

synchrónnou a asynchrónnou činnosťou jednotky. Dvojnásobná rýchlosť (len

v asynchrónnom režime) je riadená pomocou bitu U2X v registri UCSRA. V prípade

synchrónneho režimu jednotky USART, hodnota bitu pre smer vývodu XCK (DDR_XCK)

určuje, či sa využije interný zdroj hodinového signálu („MASTER režim“), alebo externý

(„SLAVE“ režim). Vývod XCK je aktívny len ak jednotka USART pracuje v synchrónnom

režime. Bloková schéma generátora hodinového signálu je uvedená na obr.20.

Pozn.: txclk – interný hodinový signál vysielača

rxclk – interný hodinový signál prijímača

xcki - vstupný signál z XCK vývodu, synchronizácia v režime „SLAVE“

xcko – výstupný signál do XCK vývodu, synchronizácia v režime „MASTER“,

fosc – frekvencia signálu na vývode XTAL, (systémové hodiny).

Obr.25 Generátor hodinového signálu jednotky USART

4.2.2 Generovanie interného hodinového signálu – generátor prenosovej rýchlosti

UBRR

preddelička /2 /4 /2

U2X

0

1

0

1

foscUBRR+1

synchr.

register

detekcia

hrany

XCK

OSC

1

0

1

0

UMSEL

DDR_XCK UCPOL

DDR_XCK

txclk

rxclk

xcki

xcko

Page 59: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 59

Generovanie interného hodinového signálu sa využíva v asynchrónnom režime

a v synchrónnom režime „MASTER“.

Register prenosovej rýchlosti jednotky USART – UBRR a k nemu pripojený čítač

nadol pracujú vo funkcii programovateľnej preddeličky, resp generátora prenosovej rýchlosti.

Čítač nadol je budený hodinovým signálom s frekvenciou fosc. Vždy, ak čítač dosiahne

hodnotu 0, alebo ak sa realizuje zápis do UBRRL naplní sa hodnotou uchovanou v registri

UBRR. Hodinový signál na výstupe čítača sa generuje pri dosiahnutí hodnoty 0. Potom

frekvencia výstupného hodinového signálu je rovná fosc/(UBRR+1). V závislosti na režime

činnosti vysielač tento výstupný hodinový signál delí hodnotou 2, 8, alebo 16. Výstupný

signál z čítača je priamo použitý ako hodinový signál prijímača a obnovovacích obvodov.

V tabuľke 23 sú uvedené vzťahy pre výpočet prenosovej rýchlosti.

Režim činnosti Výpočet prenosovej rýchlosti,

PR [bit/s]

Výpočet hodnoty UBRR

Asynchrónny normálny režim

(U2X = 0)

PR=fosc/(16(UBRR+1)) UBRR=fosc/(16PR)-1

Asynchrónny režim,

dvojnásobná rýchlosť

(U2X=1)

PR=fosc/(8(UBRR+1)) UBRR=fosc/(8PR)-1

Synchrónny režim

„MASTER“

PR=fosc/(2(UBRR+1)) UBRR=fosc/(2PR)-1

Pozn.: PR je prenosová rýchlosť v bitoch za sekundu, [b/s]

fosc je frekvencia oscilátora systémových hodín UBRR označuje obsah registrov UBRRH a UBRRL (0-4095)

Tab. 23 Vzťahy pre určenie prenosovej rýchlosti jednotky USART

Prenosová rýchlosť môže byť zdvojnásobená nastavením bitu U2X v registri UCSRA

na hodnotu log.1. Nastavenie bitu U2X má zmysel len pri asynchrónnych režimoch činnosti.

Nastavenie bitu U2X redukuje deliteľ prenosovej rýchlosti z pôvodnej hodnoty 16 na hodnotu

8. Obvody prijímača budú v tomto prípade pre vzorkovanie dát a obnovu hodín využívať

polovičný počet vzoriek a preto je potrebné presnejšie nastaviť generátor prenosovej

rýchlosti.

Externý hodinový signál sa využíva v synchrónnom „SLAVE“ režime. Externý

hodinový signál z vývodu XCK je vzorkovaný synchronizačným registrom, ktorý

minimalizuje možnosť metastability. Výstup synchronizačného registra je privedený na

detektor hrán a následne môže byť využitý vysielačom a prijímačom jednotky USART.

Uvedený proces spôsobuje oneskorenie signálu o periódy systémových hodín. Preto

maximálna použiteľná XCK externá hodinová frekvencia je ohraničená vzťahom:

4

OSCXCK

ff

Ak jednotka pracuje v synchrónnom režime (UMSEL = 1), potom vývod XCK bude

využitý ako vstup hodinového signálu – režim „SLAVE“, alebo ako výstup – režim

„MASTER“. Základný princíp vzorkovania vstupných dát na vývode RxD spočíva v tom, že

sú vždy vzorkované na opačnú hranu hodinového signálu ako zmeny dát na vývode TxD na

strane vysielača. Uvedený princíp ilustruje obr.26.

Page 60: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 60

Obr.26 Vzorkovanie vstupných dát

Na základe hodnoty bitu UCPOL v registri UCRSC je možné vybrať na ktorú hranu

hodinového signálu XCK budú vstupné dáta vzorkované a ktorá hrana bude definovať ich

zmenu pri vysielaní. Na obr.26 je ukázané, že ak UCPOL je nastavené na log.1, potom

vzorkovanie vstupných dát bude realizované na nábežnú hranu signálu XCK a zmena

výstupných dát bude synchronizovaná zostupnou hranou signálu XCK. V prípade ak UCPOL

obsahuje hodnotu log.0, situácia je opačná.

4.2.3 Formát vysielaných dát

Pod pojmom rámec budeme rozumieť postupnosť údajových bitov doplnenú o tzv.

synchronizačné bity (štart a stop bity) a prípadne aj o paritný bit. Jednotka USART celkovo

používa tridsať kombinácií ako platné formáty rámcov.

- 1 štart bit

- 5, 6, 7, 8, alebo 9 dátových bitov

- žiadny, párny, alebo nepárny paritný bit

- 1, alebo 2 stop bity

Rámec začína štart bitom, po ňom nasleduje najmenej významný dátový bit. Nasledujú

postupne ďalšie dátové bity až po najvýznamnejší. Ak je povolený paritný bit, tak nasleduje

po dátových bitoch. Rámec je ukončený stop bitom. Po kompletnom vyslaní rámca môže byť

vysielaný nasledujúci rámec, prípadne sa komunikačná linka nastaví do neaktívneho stavu.

Obr.27 ilustruje možné formáty rámcov. Bity v zátvorkách sú voliteľné.

XCK

RxD/TxD

XCK

RxD/TxD

vzorkovanie

UCPOL=1

UCPOL=0

Page 61: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 61

Obr.27 Formáty vysielaného/prijímaného rámca modulu USART

Formáty rámcov sa nastavujú pomocou bitov UCSZ2:0, UPM1:0 a USBS v registroch

UCSRB a UCSRC. Prijímač a vysielač používajú rovnaké nastavenie rámcov.

Veľkosť znaku – počet údajových bitov v rámci je určená obsahom bitov UCSZ2:0.

Obsah bitov UPM1:0 slúži na povolenie/zakázanie parity a určenie typu paritného bitu –

párny/nepárny. Obsah bitu USBS určuje počet stop bitov.

Paritný bit je vypočítaný pomocou operácie exclusive-or so všetkými údajovými

bitmi. Ak používame nepárnu paritu, potom výsledok operácie exclusive-or je negovaný.

Ppárna= dn-1 . . . d3 d2 d1d0 0

Pnepárna= dn-1 . . . d3 d2 d1d0 1,

kde P je paritný bit a dn n-tý údajový bit znaku.

Modul USART musí byť pred vlastnou komunikáciou iniciovaný. Inicializačný proces

pozostáva z nastavenia prenosovej rýchlosti, nastavenia formátu rámca a z povolenia činnosti

vysielača, alebo prijímača. V priebehu inicializácie je vhodné globálne zakázať obsluhu

prerušení. V prípade zmeny prenosovej rýchlosti, alebo formátu rámca je potrebné zaistiť

korektné ukončenie prenosu práve vysielaného znaku. Na kontrolu ukončenia prenosu je

možné využiť príznak TXC. Príznak RXC využívame na kontrolu, že v prijímacom

vyrovnávacom registri nie sú neprečítané údaje.

Nasledujúci príklad inicializácie jednotky USART ilustruje uvedené tvrdenia.

V uvedenom príklade predpokladáme asynchrónny režim, bez prerušení s pevným formátom

rámca. Prenosová rýchlosť je funkciou parametra, ktorý je uložený v registroch r17:r16.

; inicializacia modulu USART

USART:

out UBRRH, r17 ; nastavenie prenosovej rychlosti

out UBRRL, r16

ldi r16, (1<<RXEN)|(1<<TXEN) ;povolenie vysielaca a prijimaca

out UCSRB, r16

ldi r16, (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)

out UCSRC, r16 ; format ramca 8 data, 2 stop bity

ret

4.2.4 Vysielač modulu USART

St 0 1 2 3 4 (5) (6) (7) (8) (P) Sp1(Sp2) (St)

St štart bit

(n) dátové bity 0 až 8

P paritný bit

Sp stop bit

Page 62: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 62

Činnosť vysielača modulu USART sa povoľuje nastavením bitu TXEN v registri

UCSRB na hodnotu log.1. Pri povolení vysielača sa automaticky upraví funkcia vývodu TxD

na sériový výstup vysielača. Pred vykonaním ľubovoľného prenosu musí byť nastavená

prenosová rýchlosť a formát rámca. Ak vysielač pracuje v synchrónnom režime, potom vývod

XCK bude využitý na výstup hodinového signálu.

Prenos dát je iniciovaný zápisom dát do vyrovnávacieho registra vysielača, UDR.

Údaje z vyrovnávacieho registra vysielača budú prepísané do posuvného registra hneď,

akonáhle je posuvný register pripravený vyslať ďalšie dáta (bezprostredne po vyslaní

posledného stop bitu). Nasledujúci príklad programu ilustruje popísaný proces vyslania

znaku. Príznak UDRE je využívaný na kontrolu či je už register UDR uvoľnený na zápis

nového znaku. Ak používame rámce kratšie než 8 bitov, potom najvýznamnejšie bity

v registri UDR sa ignorujú. V uvedenom príklade je vysielaný údaj uložený v registri r16.

USART_vysielanie:

sbis UCSRA, UDRE ;kontrola ci je vysielaci vyrovnavaci register prazdny

rjmp USART_vysielanie

out UDR, r16 ; vysielane data do UDR

ret

Ak používame na prenos 9-bitové znaky (UCSZ = 7), potom 9-ty bit musíme pred tým

než do UDR registra zapíšeme dolných 8 bitov znaku zapísať do bitu TXB8 v registri

UCSRB. Poznamenajme, že 9-ty bit môže byť využitý v prípade multiprocesorovej

komunikácie na označenie adresového rámca.

Vysielač USART využíva dva príznakové bity na indikáciu stavu. Sú to UDRE

(USART Data Register Empty) a TXC (Transmit Complete). Oba príznaky môžu generovať

žiadosť o prerušenie. UDRE príznak oznamuje, že vyrovnávací register vysielača je

pripravený prijať nové údaje. Tento bit sa nastaví na hodnotu log.1, keď vysielací

vyrovnávací register je uvoľnený. Bit UDRE má hodnotu log.0, keď vysielací vyrovnávací

register obsahuje údaje, ktoré majú byť presunuté do posuvného registra vysielača a potom

vyslané.

Ak je povolené prerušenie pri vyprázdnení vysielacieho registra (bit UDRIE v registri

UCSRB má hodnotu log.1), potom bude generovaná žiadosť o prerušenie tak dlho, pokiaľ bit

UDRE má hodnotu log.1. Bit UDRE sa vynuluje zápisom do registra UDR. Ak využívame

prenos dát s prerušením musí obslužný program prerušenia zapísať nové dáta do registra

UDR, prípadne zakázať prerušenie. Ináč sa vyskytne nová žiadosť o prerušenie bezprostredne

po skončení predchádzajúcej obsluhy.

Príznak TXC, prenos ukončený, sa nastaví na hodnotu log.1 vtedy, keď sa dáta

v posuvnom vysielacom registri kompletne vyšlú a nové údaje nie sú zapísané do

vyrovnávacieho vysielacieho registra. Príznak TXC sa automaticky vynuluje, keď sa vykoná

príslušná obsluha prerušenia, prípadne zápisom log.1 do tohto bitu. TXC príznak sa využíva

pri komunikácii polovičným duplexom, napr. štandard RS485. V tomto prípade musí

aplikácia bezprostredne po skončení vysielania prejsť do prijímacieho režimu a uvoľniť

komunikačnú zbernicu.

Ak je povolené prerušenie pri ukončení vysielania ( bit TXCIE v registri UCSRB má

hodnotu log.1), potom pri nastavení príznaku TXC bude generovaná aj žiadosť o prerušenie.

Príznak prerušenia TXC sa vynuluje automaticky pri výkone zodpovedajúcej obsluhy

prerušenia.

Page 63: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 63

Generátor paritného bitu vypočítava paritu sériových dát každého rámca. Ak je paritný

bit povolený (UPM1=1), potom riadiaca logika vysielača vkladá paritný bit medzi posledný

údajový bit a prvý stop bit každého rámca.

4.2.5 Prijímač modulu USART

Činnosť prijímača modulu USART sa povoľuje nastavením bitu RXEN v registri

UCSRB na hodnotu log.1. Pri povolení prijímača sa automaticky upraví funkcia vývodu RxD

na sériový vstup prijímača. Pred vykonaním ľubovoľného prenosu musí byť nastavená

prenosová rýchlosť a formát rámca. Ak vysielač pracuje v synchrónnom režime, potom vývod

XCK bude využitý na prenos hodinového signálu.

Prijímač začína prijímať dáta v okamihu keď príjme platný štart bit. Každý bit

nasledujúci za štart bitom bude vzorkovaný v súlade s nastavenou prenosovou rýchlosťou,

alebo XCK hodinovým signálom a následne posúvaný do posuvného registra prijímača. Ak je

prijatý prvý stop bit (t.j. kompletný rámec je v posuvnom registri), potom kompletný obsah

posuvného registra sa presunie do prijímacieho vyrovnávacieho registra a je prístupný

z aplikačného programu prostredníctvom V/V adresy UDR.

Nasledujúci príklad ilustruje príjem znaku prostredníctvom modulu USART.

V príklade sa nevyužíva prerušenie, ale programové testovanie príznaku skončenia príjmu

znaku, RXC, (Receive Complete). Ak sa pri prenose využívajú rámce s menším počtom bitov

ako 8, potom najvýznamnejšie bity pri čítaní UDR sú maskované log.0.

USART_prijem:

sbis UCSRA, RXC ;kontrola ci uz bol prijatý znak

rjmp USART_prijem

in r16, UDR ; precitanie vyr. registra prijímaca a presun do r16

ret

Ak používame na prenos 9-bitové znaky (UCSZ = 7), potom 9-ty bit musíme čítať

z bitu RXB8 registra UCSRB pred tým než z UDR registra čítame dolných 8 bitov znaku.

Toto pravidlo dodržíme aj pri čítaní stavových príznakov. Čítanie UDR registra totiž mení

stav prijímacích vyrovnávacích registrov FIFO. Uveďme príklad príjmu 9-bitových znakov

a súčasne aj čítania stavového slova prijímača.

USART_prijem:

sbis UCSRA, RXC ;kontrola ci uz bol prijatý znak

rjmp USART_prijem

in r18, UCSRA ; precitanie stavu a 9-teho bitu a presun do r18

in r17, UCSRB

in r16, UDR

andi r18, (1<<FE)|(1<<DOR)|(1<<PE) ;test chyby prenosu, chyba vracia -1

breq USART_bez_chyby

ldi r17, HIGH(-1)

ldi r16, LOW(-1)

ret

USART_bez_chyby:

lsr r17 ; posuv do prava

andi r17, 0x01 ; maska na stavove bity

Page 64: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 64

ret

Prijímač modulu USART má jeden príznak indikujúci stav prijímača. RXC príznak

indikuje, že v prijímacom vyrovnávacom registri sú nové, ešte neprečítané dáta. Hodnota

RXC je rovná log.1, ak v prijímacom registri sú nové neprečítané dáta a log. 0, ak je prijímací

vyrovnávací register prázdny. Ak činnosť prijímača je zakázaná, (RXEN=0) RXC bit je

vynulovaný.

Ak je povolené prerušenie pri prijatí znaku ( bit RXCIE v registri UCSRB má hodnotu

log.1), potom žiadosť o prerušenie bude generovaná tak dlho, pokiaľ bit RXC má hodnotu

log.1. Ak využívame prenos dát s prerušením, potom musí obslužný program prerušenia čítať

prijaté dáta z registra UDR, čo zároveň spôsobí nulovanie príznaku RXC, prípadne zakázať

prerušenie. Ináč sa vyskytne nová žiadosť o prerušenie bezprostredne po skončení

predchádzajúcej obsluhy.

Prijímač modulu USART má tri príznaky výskytu chyby. Sú to:

- Chyba rámca, FE, (Frame Error)

- Pretečenie dát, DOR, (Data OverRun)

- Chyba parity, PE, (Parity Error)

Uvedené príznaky sú prístupné prostredníctvom registra UCSRA. Spoločnou vlastnosťou

chybových príznakov je ich umiestnenie v prijímacom vyrovnávacom registri spoločne

s rámcom, ktorý charakterizujú. Kvôli tomuto umiestneniu musí byť obsah UCSRA prečítaný

pred čítaním prijímacieho vyrovnávacieho registra UDR. Čítaním obsahu registra UDR sa

totiž mení obsah vyrovnávacích registrov. Napriek tomu, že príznaky chýb nemôžeme meniť

pomocou programu, pri zápise do registra UCSRA musia byť odpovedajúce bity rovné 0.

Príznaky chýb nemôžu generovať žiadosť o prerušenie.

Príznak FE je rovný nule, ak stop bit bol korektný, (logická 1) a je rovný log.1, ak stop

bit mal hodnotu log. 0. Tento príznak môže byť využitý na detekciu výpadku zo

synchronizácie a detekciu ďalších nekorektných podmienok prenosu. Nastavenie USBS nemá

vplyv na FE príznak prijímača.

Príznak DOR sa nastaví na log.1, ak prijímacie vyrovnávacie registre sú naplnené (dva

znaky) a súčasne je nový znak v posuvnom registri prijímača, pričom sa prijme ďalší štart bit.

To znamená, že ak sa nastavil príznak DOR došlo ku strate minimálne jedného rámca medzi

posledným a aktuálnym čítaním obsahu UDR. Príznak DOR sa automaticky vynuluje pri

presune znaku z posuvného registra prijímača do vyrovnávacieho registra.

Príznak PE indikuje, že v poslednom prijatom rámci sa vyskytla chyba paritného bitu.

Ak nie je povolená kontrola parity, bit PE má vždy hodnotu log. 0.

Obvod kontroly parity sa aktivuje nastavením bitu UPM1 na hodnotu log.1. Typ parity

párna/nepárna sa volí pomocou bitu UPM0. Ak je kontrola parity povolená, obvod kontroly

vypočítava hodnotu paritného bitu prijímaného rámca a výsledok porovnáva s prijatým

paritným bitom. Výsledok kontroly (PE) je uložený v prijímacom vyrovnávacom registri

spolu s prijímanými dátami a stop bitmi. Príznak PE je nastavený, ak znak, ktorý má byť

čítaný z prijímacieho vyrovnávacieho registra obsahoval chybu parity a kontrola parity bola

povolená.

Na rozdiel od vysielača je zákaz činnosti prijímača vykonaný bezprostredne po

vynulovaní bitu RXEN. Prijímané údaje a dáta vo vyrovnávacích registroch prijímača budú

stratené.

4.2.6 Asynchrónny príjem dát

Page 65: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 65

Pri asynchrónnom príjme dát sa na synchronizáciu sériových údajov na vývode RxD

využívajú obvody obnovenia hodinového signálu. Šumová imunita prijímača je zvýšená

pomocou filtrácie prichádzajúcich dát. Operačný rozsah pri asynchrónom príjme závisí od

presnosti generátora interného hodinového signálu, prenosovej rýchlosti prichádzajúcich dát

a dĺžke rámca.

Obvody obnovovania hodinového signálu synchronizujú interný generátor na základe

prichádzajúcich dát. Na obr.28 je zobrazený proces vzorkovania štart bitu prichádzajúceho

rámca. V normálnom režime je vzorkovacia frekvencia 16 krát vyššia než prenosová rýchlosť.

v režime s dvojnásobnou prenosovou rýchlosťou je vzorkovacia frekvencia 8 krát vyššia než

prenosová rýchlosť.

Obr.28 Proces vzorkovania prijímaných dát

Vzorky označené nulou sú vzorky odobraté v čase pokiaľ komunikačná linka nie je aktívna.

Ak obnovovacie obvody zaznamenajú na vstupe RxD zmenu z vysokej do nízkej úrovne je

iniciovaná sekvencia detekcie štart bitu. Ak symbolom „1“ bude označená prvá nulová

vzorka, potom na základe vzoriek 8, 9 a 10, v normálnom režime a vzoriek 4, 5 a 6 v režime

s dvojnásobnou prenosovou rýchlosťou sa rozhodne či bol prijatý platný štart bit. Ak dve a

viac vzoriek z uvedených troch má vysokú úroveň (H), potom prijatá zmena je vyhodnotená

ako chybná (šum), a očakáva sa ďalšia zmena vývode RxD. V prípade, že aspoň dve vzorky

majú nízku úroveň (L), potom bol prijatý platný štart bit, obvody obnovy hodinového signálu

sú synchronizované a môže sa začať s prijímaním dát.

Ak je hodinový signál prijímača synchronizovaný pomocou štart bitu môže sa začať

s príjmom a obnovou dát. Obr. 29 ilustruje proces vzorkovania dát a paritného bitu

v normálnom režime a v režime s dvojnásobnou prenosovou rýchlosťou.

Obr.29 Proces vzorkovania dát

0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3

STARTRxD

vzorka

U2X=0

0 1 2 3 4 5 6 7 8 1 2

vzorka

U2X=1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1

n-tý bitRxD

vzorka

U2X=0

1 2 3 4 5 6 7 8 1

vzorka

U2X=1

Page 66: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 66

Logická úroveň každého bitu je určená na základe hodnoty troch vzoriek (8, 9 a 10, prípadne

4, 5 a 6). Ak dve, alebo tri vzorky majú úroveň H, potom prijímaný bit bude mať priradenú

hodnotu log.1. Ak dve, alebo tri vzorky majú úroveň L, potom prijímaný bit bude mať

priradenú hodnotu log.0. Je zrejmé, že popísaný proces má charakter dolnopriepustného filtra.

Tento postup sa opakuje až do prijatia prvého stop bitu. Potom ďalšia zmena úrovne H do L je

interpretovaná ako začiatok nového štart bitu nasledujúceho rámca.

Poznamenajme že pre zabezpečenie korektnej synchronizácie príjmu je potrebné aby

generátory hodinového signálu prijímača a vysielača spĺňali isté požiadavky na presnosť

a stabilitu frekvencie. Diskusia o medzných hodnotách a chybách frekvencie generátorov na

strane vysielača a prijímača je uvedená v [1].

4.2.7 Režim multiprocesorovej komunikácie modulu USART

Režim multiprocesorovej komunikácie umožňuje pripojiť viacero mikrokontrolérov

k jednému, s významom MASTER. Nastavenie bitu MPCM v registri UCSRA dovoľuje

filtrovať prijímané dáta. Filtrácia znamená, že rámce neobsahujúce informáciu o adrese budú

ignorované a neuložia sa do prijímacích vyrovnávacích registrov. Multiprocesorový

komunikačný režim dovoľuje viacerým mikrokontrolérom typu „slave“ prijímať údaje zo

zariadenia typu MASTER. Najskôr je pomocou adresovacieho rámca vybraný mikrokontrolér,

pre ktorý budú posielané údaje určené. Nasledujúce dátové rámce bude prijímať len

adresovaný mikrokontrolér, pričom ostatné zariadenia budú tieto údaje ignorovať.

Nech procesor s významom „master“ má nastavený režim prenosu 9-bitového slova

(UCSZ=7). Ak je vysielaný adresovací rámec, potom deviaty bit TXB8 musí byť nastavený

na úroveň log.1. Naopak, pri vysielaní dátových rámcov je tento bit na hodnote log.0.

Pripomeňme, že aj zariadenia typu „slave“ musia používať 9-bitový formát rámca. Postup pri

prenose dát v režime multiprocesorovej komunikácie je nasledovný:

- Všetky zariadenia „slave“ nech sú v režime multiprocesorovej komunikácie

(UCSRA=1).

- Zariadenie „master“ vysiela adresovací rámec. Všetky zariadenia „slave“ prijímajú

tento vysielaný rámec.

- Každé zariadenie „slave“ číta obsah UDR registra a zistí či je adresované. Ak áno,

tak vynuluje MPCM bit v registri UCSRA, ak nie, tak čaká na príjem

nasledujúceho adresovacieho rámca a bit MPCM ostáva nastavený na log.1.

- Adresované zariadenie bude prijímať všetky dátové rámce až do prijatia nového

adresovacieho rámca. Ostatné mikrokontroléry s nastaveným MPCM bitom budú

dátové rámce ignorovať.

- Keď adresovaný mikrokontrolér príjme posledný dátový rámec, procesor nastaví

bit MPCM na log.1 a čaká na ďalší adresovací rámec.

Na zmenu obsahu bitu MPCM nie je vhodné používať inštrukcie SBI, CBI, pretože ich

použitím je možné vynulovať príznak TXC.

Register UBRRH zdieľa tú istú V/V adresu ako register UCSRC, preto je potrebné pri

prístupe k nemu dodržať špecifické podmienky. Ak zapisujeme na toto V/V miesto najvyšší

bit zapisovanej hodnoty (URSEL) určuje, do ktorého z týchto dvoch registrov sa bude

zapisovať. Ak URSEL bude rovný nule, potom sa prepíše UBRRH. V opačnom prípade bude

prepísaný obsah UCSRC. Nasledujúci príklad ilustruje prístup k uvedeným registrom.

Page 67: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 67

;nastav UBRRH na hodnotu 2

ldi r16,0x02

out UBRRH,r16

;nastav bity USBS a UCZI na hodnotu log.1 a ostatn0 bitz na 0

ldi r16,(1<<URSEL)|(1<<USBS)|(1<<UCSZ1)

out UCSRC,r16

Čítanie obsahu registrov UBRRH a UCSRC je relatívne zložitejšie než zápis, avšak vo

väčšine aplikácií nie je potrebné čítať obsah týchto registrov. Čítanie obsahu tejto V/V adresy

vráti obsah registra UBRRH. Ak v nasledujúcom hodinovom cykle budeme čítať znovu obsah

tej istej V/V adresy prečítame obsah registra UCSRC. Je zrejmé, že pre korektný prístup

k obsahu UCSRC je potrebné globálne zakázať prerušenia. Nasledujúci príklad ukazuje

čítanie obsahu registra UCSRC.

CITAJ UCSRC:

in r16,UBRRH

in r16,UCSRC ; obsah UCSRC je v registri r16

ret

4.2.8 Popis registrov modulu USART

Modul USART obsahuje štyri 8-bitové registre:

-údajový register UDR,

-riadiaci a stavový register A, UCSRA

-riadiaci a stavový register B, UCSRB

-riadiaci a stavový register C, UCSRC

Jeden 16-bitový register:

-register prenosovej rýchlosti UBRR.

V/V údajový register, UDR - USART I/O Data Register

UDR:

Bit 7 6 5 4 3 2 1 0

Symbol RXB7 RXB6 RXB5 RXB4 RXB3 RXB2 RXB1 RXB0

Symbol TXB7 TXB6 TXB5 TXB4 TXB3 TXB2 TXB1 TXB0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

p. hod. 0 0 0 0 0 0 0 0

Prijímací i vysielací vyrovnávací register modulu USART zdieľajú rovnakú V/V adresu

symbolicky označenú ako UDR. Zapisované údaje do UDR sa zapíšu do vysielacieho

vyrovnávacieho registra TXB. Pri čítaní UDR sa prečíta obsah prijímacieho vyrovnávacieho

registra RXB. Pri prenose 5, 6, alebo 7 bitových znakov sa pri čítaní horné bity nastavia na

hodnotu log. 0. Pri vysielaní sa horné bity ignorujú.

Vysielací vyrovnávací register môže byť prepisovaný len ak je UDRE príznak

v UCSRA registri nastavený na hodnotu log.1. V prípade, že UDRE príznak má hodnotu log.0

Page 68: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 68

sa údaje zapísané do registra UDR, vysielačom USART ignorujú. Ak je vysielanie dát

povolené a dáta zapíšeme do registra UDR, potom v prípade, že posuvný vysielací register je

prázdny, obsah UDR bude presunutý do vysielacieho posuvného registra a začne sa vysielať

prostredníctvom výstupu TxD.

Prijímacie vyrovnávacie registre pozostávajú z dvojúrovňového zásobníka FIFO. Pri

každom prístupe k zásobníku, zásobník mení svoj stav. Z toho dôvodu nie je vhodné na

modifikáciu obsahu jednotlivých bitov používať bitové inštrukcie SBI a CBI. Pri použití

testovacích inštrukcií SBIC a SBIS sa taktiež mení stav zásobníka.

Riadiaci a stavový register A, UCSRA - USART Control and Status Register A

UCSRA:

Bit 7 6 5 4 3 2 1 0

Symbol RXC TXC UDRE FE DOR PE U2X MPCM

Prístup R R/W R R R R R/W R/W

P.hod. 0 0 1 0 0 0 0 0

Bit 7 – RXC: USART Recieve Complete, Ukončený príjem znaku

Tento príznakový bit je nastavený na hodnotu log.1, ak v prijímací zásobník obsahuje

neprečítané dáta. Bit RXC je vynulovaný, ak prijímací zásobník je prázdny. Ak sa zakáže

činnosť prijímača, potom sa vynuluje zásobník a bit RXC bude obsahovať hodnotu log.0.

Príznakový bit RXC môže byť využitý na generovanie prerušenia.

Bit 6 – TXC: USART Transmit Complete, ukončené vysielanie znaku

Tento príznakový bit sa nastaví na hodnotu log.1, keď rámec vložený do vysielacieho

posuvného registra je kompletne vyslaný a nové údaje nie sú zapísané do vysielacieho

vyrovnávacieho registra (UDR). TXC príznak sa automaticky vynuluje, keď sa vykoná

príslušná obsluha prerušenia, alebo zápisom log.1 do tejto V/V lokácie. Príznak TXC môže

byť využitý na generovanie odpovedajúceho prerušenia.

Bit 5 – UDRE: USART Data Register Empty, údajový register prázdny

Príznakový bit UDRE indikuje, že vysielací vyrovnávací register je pripravený prijať

nové dáta. Ak bit UDRE má hodnotu log.1 vyrovnávací register je prázdny a pripravený na

zápis nového znaku. Príznak UDRE môže byť využitý na generovanie odpovedajúceho

prerušenia.

Bit 4 – FE: Frame Error, chyba rámca

Tento bit sa nastaví na hodnotu log.1, ak znak v prijímacom vyrovnávacom registri

obsahoval chybu rámca (prvý stop bit prijatého znaku bol rovný log.0). Hodnota bitu FE je

platná pokiaľ sa neprečíta obsah prijímacieho vyrovnávacieho registra UDR. Bit FE je rovný

nule, ak stop bit prijatého rámca má hodnotu jedna. Zápisom do registra UCSRA sa uvedený

bit vynuluje.

Bit 3 – DOR: Data OverRun, pretečenie dát

Page 69: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 69

Tento bit sa nastaví na hodnotu log.1, ak dôjde k pretečeniu pri príjme dát. Pretečenie

je charakterizované nasledovnými podmienkami: Prijímací zásobník je plný-(dva znaky),

nový znak je v prijímacom posuvnom registri a je prijatý ďalší štart bit. Hodnota bitu DOR je

platná pokiaľ sa neprečíta obsah prijímacieho vyrovnávacieho registra UDR. Zápisom do

registra UCSRA sa uvedený bit vynuluje.

Bit 2 – PE: Parity Error, chyba parity

Bit PE sa nastaví na hodnotu log.1, ak znak v prijímacom vyrovnávacom registri

obsahoval chybu parity a kontrola parity bola povolená (UPM1=1). Hodnota bitu PE je

platná, pokiaľ sa neprečíta obsah prijímacieho vyrovnávacieho registra UDR. Zápisom do

registra UCSRA sa uvedený bit vynuluje.

Bit 1 – U2X: Double the USART Transmission speed, dvojnásobná prenosová rýchlosť

Bit U2X má význam len pri asynchrónnom prenose. Ak je zvolený synchrónny prenos,

do bitu U2X zapíšeme hodnotu log.0. Pri asynchrónnej komunikácii sa zápisom logickej

jednotky do bitu U2X prenosová rýchlosť zdvojnásobí.

Bit 0 – MPCM: Multi-processor Communication Mode

Pomocou bitu MPCM povoľujeme režim multiprocesorovej komunikácie. Keď bit

MPCM obsahuje log.1, potom všetky prijímané rámce, ktoré neobsahujú informáciu o adrese

sa prijímačom USART ignorujú. Poznamenajme, že hodnota bitu MPCM nemá vplyv na

činnosť vysielača modulu USART.

Riadiaci a stavový register B, UCSRB - USART Control and Status Register B

UCSRB:

Bit 7 6 5 4 3 2 1 0

Symbol RXCIE TXCIE UDREI RXEN TXEN UCSZ2 RXB8 TXB8

Prístup R/W R/W R/W R/W R/W R/W R R/W

Poč.

hodnota

0 0 0 0 0 0 0 0

Bit 7– RXCIE: RX Complete Interrupt Enable, povolenie prerušenia od RXC

Zápisom log.1 do bitu RXCIE povoľujeme prerušenie od príznaku RXC. Prerušenie

RXC bude generované, ak bit RXCIE obsahuje hodnotu log.1, je globálne povolená obsluha

prerušení (bit I v SREG má hodnotu log.1) a súčasne sa bit RXC v registri UCSRA nastaví na

hodnotu log.1.

Bit 6 – TXCIE: TX Complete Interrupt Enable, povolenie prerušenia od TXC

Zápisom log.1 do bitu TXCIE povoľujeme prerušenie od príznaku TXC. Prerušenie

TXC bude generované, ak bit TXCIE obsahuje hodnotu log.1, je globálne povolená obsluha

prerušení (bit I v SREG má hodnotu log.1) a súčasne sa bit TXC v registri UCSRA nastaví na

hodnotu log.1.

Page 70: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 70

Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable, povolenie prerušenia od

UDRE

Zápisom log.1 do bitu UDRIE sa povolí prerušenie od príznaku UDRE. Prerušenie

UDRE bude generované, ak bit UDRIE obsahuje hodnotu log.1, je globálne povolená obsluha

prerušení (bit I v SREG má hodnotu log.1) a súčasne sa bit UDRE v registri UCSRA nastaví

na hodnotu log.1.

Bit 4 – RXEN: Receiver Enable, povolenie činnosti prijímača

Zápis log.1 do bitu RXEN sa povolí činnosť prijímača jednotky USART. Režim V/V

vývodu RxD sa nastaví na vstup do prijímača USART. Ak sa zakáže činnosť prijímača

(RXEN = 0 ), potom sa zničí obsah prijímacieho zásobníka a príznakov FE, DOR a PE.

Bit 3 – TXEN: Transmitter Enable, povolenie činnosti vysielača

Zápis log.1 do bitu TXEN povoľujeme činnosť vysielača jednotky USART. Aktuálny

režim V/V vývodu TxD sa nastaví na výstup z vysielača USART. Ak sa zakáže činnosť

prijímača (TXEN = 0 ), potom sa vyšlú všetky údaje z posuvného vysielacieho registra a z

vyrovnávacieho registra, zakáže sa činnosť vysielača a vývod TxD sa vráti do pôvodného

režimu.

Bit 2 – UCSZ2: Character Size, dĺžka znaku

Bit UCSZ2 spolu s bitmi UCSZ1:0 v registri UCSRC určuje počet údajových bitov

prenášaného znaku.

Bit 1 – RXB8: Receive Data Bit 8, prijatý údajový bit 8

Ak je nastavená dĺžka prenášaných znakov na deväť bitov, potom v bite RXB8 je

uchovaná hodnota prijatého deviateho údajového bitu. Jeho hodnota musí byť prečítaná pred

čítaním obsahu registra UDR.

Bit 0 – TXB8: Transmit Data Bit 8, vysielaný údajový bit 8

Ak je nastavená dĺžka prenášaných znakov na deväť bitov, potom TXB8 reprezentuje

deviaty vysielaný údajový bit. Deviaty údajový bit musí byť zapísaný pred zápisom spodných

ôsmych bitov do registra UDR.

Riadiaci a stavový register C, UCSRC - USART Control and Status Register C

UCSRC:

Bit 7 6 5 4 3 2 1 0

Symbol URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 1 0 0 0 0 1 1 0

Page 71: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 71

Register UCSRC zdieľa tú istú V/V lokáciu ako register UBRRH. Prístup k uvedeným

registrom je popísaný v kapitole 2.2.7.

Bit 7 – URSEL: Register Select, výber registra

Na základe hodnoty bitu URSEL je možné voliť medzi prístupom k registru UCSRC,

alebo registru UBRRH. Pri čítaní UCSRC je hodnota tohto bitu log.1. Ak zapisujeme do

registra UCSRC musí URSEL obsahovať hodnotu log.1.

Bit 6 – UMSEL: USART Mode Select, výber režimu USART

Pomocou bitu UMSEL volíme režim činnosti jednotky USART. Ak bit UMSEL má

hodnotu nula, potom USART pracuje v asynchrónnom prenosovom režime. Ak bit UMSEL

má hodnotu jedna, potom USART pracuje v synchrónnom prenosovom režime.

Bit 5:4 – UPM1:0: Parity Mode, režim parity

Tieto bity povoľujú a nastavujú typ generovania a kontroly parity. Ak je generovanie

a kontrola parity povolená, potom vysielač bude v každom rámci generovať a vysielať paritný

bit. Prijímač bude na základe prichádzajúcich dát generovať hodnotu paritného bitu

a porovnávať ho s prichádzajúcim paritným bitom v súlade s nastavením bitu UPM0. Pri

chybe parity sa nastaví príznak PE v registri UCSRA.

UPM1 UPM0 Režim parity

0 0 Zakázaná

0 1 Nevyužité

1 0 Povolená, párna parita

1 1 Povolená, nepárna parita

Tab.24 Nastavenie režimu generovania a kontroly parity

Bit 3 – USBS: Stop Bit Selct, výber stop bitu

Pomocou bitu USBS sa volí počet stop bitov, ktoré sú vložené do vysielaného rámca.

Prijímač modulu USART ignoruje nastavenie bitu USBS. Ak bit USBS má hodnotu nula,

potom vysielaný rámec obsahuje jeden stop bit. Ak bit USBS má hodnotu jedna, potom

vysielaný rámec bude obsahovať dva stop bity.

Bit 2:1 – UCSZ1:0: Character Size, dĺžka znaku

Pomocou bitov UCSZ1:0 a bitu UCSZ2 v registri UCSRB je možné nastaviť počet

dátových bitov (dĺžku znaku) vo vysielanom a prijímanom rámci.

UCSZ2 UCSZ1 UCSZ0 Dĺžka znaku

0 0 0 5 bitov

0 0 1 6 bitov

0 1 0 7 bitov

0 1 1 8 bitov

1 0 0 Nevyužité

1 0 1 Nevyužité

Page 72: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 72

1 1 0 Nevyužité

1 1 1 9 bitov

Tab.25 Nastavenie dĺžky vysielaného znaku

Bit 0 – UCPOL: Clock Polarity, polarita hodinových impulzov

Bit UCPOL je využitý len v prípade synchrónneho prenosového režimu. Ak je

používaný asynchrónny režim do bitu UCPOL zapisujeme nulu. Pomocou bitu UCPOL

definujeme vzťah medzi hodinovým signálom a vzorkovaním vstupného signálu, respektíve

okamžikom zmeny výstupného signálu.

UCPOL Zmena vysielaných dát,(TxD

vývod)

Vzorkovanie prijímaných dát, (RxD vývod)

0 Vzostupná XCK hrana Zostupná XCK hrana

1 Zostupná XCK hrana Vzostupná XCK hrana

Tab.26 Nastavenie bitu UCPOL

Registre prenosovej rýchlosti, UBRRL a UBRRH - USART Baud Rate Registers

UBRR:

Bit 15 14 13 12 11 10 9 8

Symbol URSEL - - - UBRR11 UBRR10 UBRR9 UBRR8

Prístup R/W R R R R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Bit 7 6 5 4 3 2 1 0

Symbol UBRR7 UBRR6 UBRR5 UBRR4 UBRR3 UBRR2 UBRR1 UBRR0

P.hod. 0 0 0 0 0 0 0 0

Bit 15 – URSEL: Register Select, výber registra

Na základe hodnoty bitu URSEL je možné voliť medzi prístupom k registru UCSRC,

alebo k registru UBRRH. Pri čítaní UBRRH je hodnota tohto bitu log.0. Ak zapisujeme do

registra UBRRH musí URSEL obsahovať hodnotu 1.

Bity 14:12 – nevyužité (rezervované) bity

Pri zápise do UBRRH musia byť tieto bity rovné nule.

Bity 11:0 – UBRR11:0: USART Baud Rate Register, register prenosovej rýchlosti

12-bitový register UBRR obsahuje údaj o prenosovej rýchlosti jednotky USART.

V registri UBRRH sú obsiahnuté štyri najvýznamnejšie bity a register UBRRL obsahuje osem

menej významných bitov. Zmena obsahu registra UBRR v priebehu prenosu spôsobí stratu

prijímaných a vysielaných dát. Zápisom do registra UBRRL sa bezprostredne zmení

prenosová rýchlosť.

Page 73: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 73

Vzťahy na výpočet hodnôt UBRR pre zvolenú rýchlosť prenosu a danú hodnotu

frekvencie systémových hodín sú uvedené v tabuľke 23 v kapitole 4.2.2. Tabuľka 27 udáva

hodnoty UBR pre vybrané hodnoty prenosovej rýchlosti a frekvencie systémových hodín.

Pren.

Rýchlosť [bps]

UBRR

pri fosc 4 MHz

UBRR

pri fosc 8 MHz

UBRR

pri fosc 16 MHz

2400 103 207 416

4800 51 103 207

9600 25 51 103

14.4k 16 34 68

19.2k 12 25 51

28.8k 8 16 34

38.4k 6 12 25

57.6k 3 8 16

76.8k 2 6 12

115.2k 1 3 8

230.4k 0 1 3

Tab. 27 Nastavenie prenosovej rýchlosti modulu USART

4.3 SÉRIOVÉ KOMUNIKAČNÉ ROZHRANIE –SPI

Sériové komunikačné rozhranie dovoľuje vysokorýchlostný synchrónny prenos dát

medzi mikrokontrolérom a perifériami, prípadne medzi niekoľkými mikrokontrolérmi.

Základné charakteristuky rozhrania SPI sú nasledovné:

Obojsmerný (Full-duplex) synchrónny prenos prostredníctvom troch vodičov.

Režim „MASTER“ alebo „SLAVE“.

Prenos začína LSB, alebo MSB.

Sedem programovateľných prenosových rýchlostí.

Príznak prerušenia pri ukončení prenosu.

Nastavenie príznaku pri kolízii.

Aktivácia procesora z „Idle“ režimu.

Dvojnásobná rýchlosť (Ck/2).

Page 74: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 74

Obr.30 Štruktúra SPI jednotky

Prepojenie medzi zariadením typu MASTER a SLAVE pomocou SPI je uvedené na obr.31.

Systém pozostáva z dvoch posuvných registrov a generátora hodinového signálu – zariadenie

MASTER. Zariadenie MASTER iniciuje komunikáciu keď na vývode /SS -(Slave Select)

vybraného zariadenia SLAVE generuje úroveň napätia zodpovedajúcu logickej 0. Zariadenia

MASTER a SLAVE pripravia do posuvných registrov údaje, ktoré majú byť vyslané.

Zariadenie MASTER generuje hodinový signál na vodiči SCK. Údaje sú posúvané zo

zariadenia MASTER do zariadenia SLAVE prostredníctvom vodiča MOSI- (Master out Slave

in) a súčasne zo zariadenia SLAVE do zariadenia MASTER prostredníctvom vodiča MISO –

(Master in- Slave out). Po prenose každého údajového paketu zariadenie MASTER

synchronizuje SLAVE tým, že na vývod /SS generuje úroveň napätia zodpovedajúcu log.1.

Ak bude zariadenie konfigurované v režime MASTER nepreberá automaticky riadenie

na vodiči /SS, toto musí byť realizované pomocou užívateľského programu pred započatím

komunikácie. Keď je riadenie zabezpečené, potom zápisom bytu do SPI dátového registra

začne pracovať generátor SPI hodinového signálu a 8 bitov dátového slova sa presunie do

zariadenia „SLAVE“. Po prenose jedného Bytu sa SPI generátor zastaví a nastaví sa príznak

konca prenosu (SPIF). Ak je nastavený (log.1) bit pre povolenie prerušenie od SPI bude

generovaná aj požiadavka na prerušenie. Zariadenie MASTER môže pokračovať posunom

ďalšieho bytu po jeho zápise do registra SPDR, alebo signálom „koniec paketu“- nastavením

úrovne napätia na /SS vodiči na hodnotu odpovedajúcu log.1.

delič

/2/4/8/16/32/64/128

8-bitový posuvný

register

vyrovnávací register pre

čítanie

log

ika r

iad

en

ia V

/V v

ývod

ov

S

M

S

MLSBMSB

MISO

MOSI

SCK

/SS

XTAL

výber logika hod.

signálu

riadenie SPI

stavový register SPI riadiaci register SPI

interná dátová zbernicaIRQ SPI

SP

IF

WC

OL

SP

I2X

S

M

clk

SPI clk MASTER

SP

IE

SP

E

DO

RD

MS

TR

CP

OL

CP

HA

SP

R1

SP

R0

SPI2X SPR1 SPR0

Page 75: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 75

Ak bude zariadenie konfigurované v režime SLAVE, potom jednotka SPI bude

neaktívna. Výstup MISO bude v stave vysokej impedancie tak dlho, pokiaľ vstup /SS bude na

vysokej úrovni. V tomto stave môže užívateľský program prepisovať obsah SPI údajového

registra – SPDR, ale údaje nebudú posúvané s príchodom hodinových impulzov na SCK

vstupe, až do okamžiku kedy sa na vstupe /SS nevyskytne úroveň log.0. Ak celý jeden byte

bude vyslaný, potom sa nastaví na log.1 príznak konca prenosu SPIF. Ak je povolené

prerušenie (SPIE = log.1), je generovaná aj žiadosť o obsluhu prerušenia. Zariadenie SLAVE

môže pokračovať zapísaním nových údajov do SPDR a čítaním prichádzajúcich údajov.

Posledný prichádzajúci byte ostáva vo vyrovnávacom registri.

Obr.31 Prepojenie zariadení MASTER a SLAVE

Systém SPI sa vyznačuje jednoduchou vyrovnávacou pamäťou v smere vysielania

a dvojitou pri prijímaní dát. To znamená, že byty, ktoré sú vysielané nemôžeme zapisovať do

SPI dátového registra pred tým, než je kompletne vyslaný predchádzajúci byte. Pri príjme

údajov môžeme predchádzajúci byte čítať v priebehu príjmu nasledujúceho bytu.

Predchádzajúci byte musíme prečítať pred tým než je kompletne prijatý ďalší Byte. V režime

SPI SLAVE riadiace obvody vzorkujú prichádzajúci hodinový signál na vstupe SCK.

Frekvencia hodinového signálu SPI nesmie prekročiť hodnotu fOSC/4. Keď je povolená

činnosť jednotky SPI smer vývodov MOSI, MISO, SCK a /SS je nastavený podľa tab.28.

Vývod Smer, SPI v režime MASTER Smer, SPI v režime SLAVE

MOSI Definuje užívateľ Vstup

MISO Vstup Definuje užívateľ

SCK Definuje užívateľ Vstup

/SS Definuje užívateľ Vstup

Tab.28 Nastavenie SPI vývodov

Nasledujúci príklad je ukážkou, ako môžeme nastaviť jednotku SPI do režimu MASTER

a realizovať prenos dát.

8-bitový pos.register 8-bitový pos.register

SPI generátor

hod.signálu

/SS /SS

Vcc

MISO MISO

MOSI MOSI

SCK SCK

MSB MSB LSBLSBMASTER SLAVE

posun

Page 76: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 76

;Inicializacia jednotky SPI ako MASTER

ldi r17,(1<<DD_MOSI)|(1<<DD_SCK) ; nastav MOSI a SCK na vystup

out DDR_SPI,r17 ;ostatne vstup

;Povolenie SPI - MASTER, nastav prenosovu rychlost (fck/16 )

ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPRO)

out SPCR,r17

ret

; SPI MASTER, vysielanie, vysielane data su v r16

out SPDR, r16

CAK:

sbis SPSR,SPIF ;test konca aktualneho vysielania

rjmp CAK

ret

Nasledujúci príklad je ukážkou, ako nastaviť SPI do režimu „SLAVE“ a realizovať príjem

dát.

;Inicializacia jednotky SPI ako SLAVE

ldi r17,(1<<DD_MISO) ;nastav MISO na vystup

out DDR_SPI,r17

ldi r17,(1<<SPE) ;povolenie SPI

out SPCR,r17

ret

;SPI SLAVE prijem dat

CAK1:

sbis SPSR,SPIF ;cakaj na skoncenie prijmu

rjmp CAK1

in r16,SPDR

ret

4.3.1 Funkcie vývodu /SS

Keď jednotka SPI pracuje v režime SLAVE vývod /SS je konfigurovaný ako vstupný.

Ak na vstupe /SS je úroveň napätia odpovedajúca log.0, potom je jednotka SPI aktívna

a vývod MISO je konfigurovaný užívateľom ako výstup. Všetky ďalšie vývody sú

konfigurované ako vstupné. Ak na vstupe /SS je úroveň napätia odpovedajúca log.1, potom sú

všetky vývody konfigurované ako vstup a jednotka SPI je v neaktívnom stave. To znamená,

že nebude prijímať prichádzajúce údaje.

Page 77: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 77

/SS vývod sa využíva pre bytovú/paketovú synchronizáciu. Ak /SS vývod prejde na

úroveň log.1 bezprostredne sa vynuluje prijímacia a vysielacia logika jednotky SPI.

Keď jednotka SPI pracuje v režime MASTER užívateľ môže definovať smer vývodu

/SS.

Ak vývod /SS bude konfigurovaný ako výstupný, potom vývod plní funkciu

všeobecného výstupu a nesúvisí s jednotkou SPI.

Ak vývod /SS bude kofigurovaný ako vstupný musí byť pre zaistenie operácií SPI na

úrovni log.1. Ak v tomto prípade je na vývod /SS privedená log.0 jednotka SPI túto

skutočnosť interpretuje tak, ako keby bola vybraná ďalším zariadením typu MASTER.

V tomto prípade SPI jednotka vykoná nasledujúce akcie:

1. Bit MSTR v SPCR registri je vynulovaný, čím SPI jednotka prechádza do režimu

„SLAVE“. Výsledkom prechodu do režimu SLAVE je zmena smeru vývodov

MOSI a SCK, (vstup).

2. Príznak SPIF v registri SPSR sa nastaví na log.1. V prípade povolenia prerušenia

sa vykoná obslužná rutina prerušenia.

4.3.2 Popis registrov

Riadiaci register jednotky SPI – SPCR

SPCR:

Bit 7 6 5 4 3 2 1 0

Symbol SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Riadiaci register SPCR je využitý na riadenie činnosti jednotky SPI. Význam jednotlivých

bitov je nasledovný:

Bit 7 – SPIE: Povolenie prerušenia od SPI, SPI Interrupt Enable

Ak bit SPIE obsahuje hodnotu log.1 a súčasne sú globálne povolené prerušenia,

potom pri nastavení bitu SPIF bude generovaná žiadosť o obsluhu prerušenia.

Bit 6 – SPE: Povolenie činnosti jednotky SPI, SPI Enable

Ak bit SPE obsahuje hodnotu log.1, potom je povolená činnosť jednotky SPI.

Bit 5 – DORD: Poradie dát, Data Order

Ak bit DORD obsahuje hodnotu log.1, potom prenos dát začína od LSB (najmenej

významného bitu). Ak bit DORD obsahuje hodnotu log.0, potom prenos dát začína od MSB

(najvýznamnejšieho bitu).

Bit 4 – MSTR: Výber režimu MASTER/SLAVE, Master/Slave select

Pomocou bitu MSTR volíme režim jednotky SPI. Ak bit MSTR obsahuje hodnotu

log.1 bude jednotka SPI v režime MASTER. V opačnom prípade bude SPI v režime SLAVE.

Ak vývod /SS je konfigurovaný ako vstupný a je naň privedená log.0, pričom je bit MSTR

log.1, potom sa bit MSTR vynuluje a príznak SPIF sa nastavý na hodnotu log.1.

Bit 5 – CPOL: Nastavenie polarity hodinového signálu, Clock Polarity

Page 78: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 78

Ak bit CPOL obsahuje hodnotu log.1 vysoká úroveň signálu SCK bude neaktívna. Ak

bit CPOL obsahuje hodnotu log.0 bude neaktívna nízka úroveň signálu SCK.

CPOL „prvá“ hrana signálu SCK „druhá“ (záverná) hrana signálu SCK

0 Vzostupná, (nábežná) Zostupná

1 Zostupná, (dobežná) Vzostupná

Tab.29 funkcia bitu CPOL

Bit 2 – CPHA: Nastavenie fázy hodinového signálu, Clock Phase

Obsah bitu CPHA určuje či údaje budú vzorkované na prvú, alebo druhú hranu

hodinového signálu.

CPHA „prvá“ hrana signálu SCK „druhá“ (záverná) hrana signálu SCK

0 Vzorkovanie Nastavenie

1 Nastavenie Vzorkovanie

Tab.30 funkcia bitu CPHA

Bity 1, 0 – SPR1, SPR0: Nastavenie generátora hodín, SPI Clock Rate Select 1 a 0

Ak SPI je v režime MASTER, potom pomocou obsahu bitov SPR1 a SPR0 je možné

nastaviť frekvenciu hodinového signálu SCK. Vzťah medzi signálom SCK a frekvenciou

oscilátora fosc je uvedený v nasledujúcej tabuľke.

SPI2X SPR1 SPR0 Frekvencia SCK

0 0 0 fosc/4

0 0 1 fosc/16

0 1 0 fosc/64

0 1 1 fosc/128

1 0 0 fosc/2

1 0 1 fosc/8

1 1 0 fosc/32

1 1 1 fosc/64

Tab.31 Voľba frekvencie hodinového signálu SCK

Stavový register jednotky SPI – SPSR

SPSR:

Bit 7 6 5 4 3 2 1 0

Symbol SPIF WCOL - - - - - SPI2X

Prístup R R R R R R R R/W

P.hod. 0 0 0 0 0 0 0 0

Bit 7 – SPIF: Príznak prerušenia od SPI, SPI Interrupt Flag

Po skončení sériového prenosu dát sa príznak SPI nastaví na hodnotu log.1. V prípade

že je povolené prerušenie bude generovaná aj žiadosť o obsluhu prerušenia. Aj v prípade, ak

Page 79: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 79

na vývod /SS, ktorý je v režime MASTER konfigurovaný ako vstup privedieme log.0, sa

nastaví príznak SPIF. Príznakový bit SPIF je nulovaný automaticky po skončení

zodpovedajúcej obsluhy prerušenia. Príznakový bit SPIF je tiež nulovaný čítaním SPI

stavového registra, prípadne prístupom k SPI dátovému registru.

Bit 6 – WCOL: Príznak kolízie pri zápise, Write Collision Flag Bit WCOL sa nastaví na hodnotu log.1 ak do SPI dátového registra sa zapisuje počas

prenosu dát. Bit WCOL je nulovaný čítaním SPI stavového registra, prípadne prístupom do

SPI dátového registra.

Bity 5. . .1: Nevyužité bity

Bit 0 – SPI2X: Bit dvojnásobnej rýchlosti SPI, Double SPI Speed Bit

Keď bit SPI2X má hodnotu log.1, potom v prípade, ak jednotka SPI je v režime

MASTER bude frekvencia hodinového signálu SCK dvojnásobná.

Údajový register SPI – SPDR

SPDR:

Bit 7 6 5 4 3 2 1 0

Symbol MSB LSB

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. X X X X X X X X

Údajový register SPDR sa využíva na prenos dát medzi poľom univerzálnych registrov

a posuvným registrom SPI. Zápisom do registra SPDR iniciujeme prenos dát. Čítanie registra

spôsobí prečítanie obsahu posuvného registra SPI.

4.3.3 Dátové režimy

V jednotke SPI je možné nastaviť jednu zo štyroch kombinácií fázy a polarity

hodinového signálu SCK vo vzťahu ku sériovým dátam. Každá kombinácia je určená

hodnotami bitov CPHA a CPOL riadiaceho slova. V tabuľke 32 sú uvedené jednotlivé dátové

režimy jednotky SPI.

SPI režim CPOL CPHA Prvá hrana Druhá hrana

0 0 0 Vzorkovanie (vzostupná) Nastavenie (zostupná)

1 0 1 Nastavenie (vzostupná) Vzorkovanie (zostupná)

2 1 0 Vzorkovanie (zostupná) Nastavenie (vzostupná)

3 1 1 Nastavenie (zostupná) Vzorkovanie (vzostupná)

Tab.32 Dátové režimy SPI

Page 80: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 80

Nasledujúce obrázky ilustrujú prenos bytu pri jednotlivých dátových režimoch.

Obr.32 SPI prenos pri CPHA = 0

SCK

(CPOL=0)

SCK

(CPOL=1)

okamžiky

vzorkovania

/SS

MISO

MOSI

MSB LSBDORD=0

Page 81: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 81

Obr.33 SPI prenos pri CPHA = 1

4.4 DVOJVODIČOVÉ ROZHRANIE, TWI

Dvojvodičové sériové rozhranie (TWI) je ideálne rozhranie pre mnohé aplikácie

mikrokontrolérov. Protokol rozhrania TWI dovoľuje užívateľovi vzájomne prepojiť až 128

rôznych zariadení pomocou dvojvodičovej obojsmernej zbernice. Jeden vodič slúži pre prenos

hodinového signálu (SCL), druhý pre prenos dát (SDA). Všetky externé komponenty

pozostávajú z dvoch pull-up odporov. Všetky zariadenia pripojené na zbernicu majú

samostatné adresy a obsahujú mechanizmus pripájania na zbernicu, ktorý je súčasťou TWI

protokolu. Pripojenie zariadení na zbernicu je uvedené na obr.34.

SCK

(CPOL=0)

SCK

(CPOL=1)

okamžiky

vzorkovania

/SS

MISO

MOSI

MSB LSBDORD=0

zariadenie

1

zariadenie

1

zariadenie

1

zariadenie

1

zariadenie

1

Vcc

SDA

SCL

"pull-up"

odpory

Page 82: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 82

Obr.34 TWI zbernica

V tejto časti budú použité niektoré pojmy, ktorých vysvetlenie je uvedené v tab.33.

Výraz Popis

MASTER Zariadenie, ktoré inicializuje a ukončuje prenos. Zariadenie typu MASTER

generuje hodinový signál SCL.

SLAVE Zariadenie, ktoré je adresované zariadením typu MASTER.

Vysielač Zariadenie, ktoré vysiela dáta na zbernicu

Prijímač Zariadenie, ktoré prijíma dáta zo zbernice

Tab. 33 Základné pojmy

Ako je uvedené na obr.34 obidva vodiče zbernice sú pripojené na napätie Vcc

prostredníctvom „pull-up“ odporov. Výstupné obvody TWI kompatibilných zariadení sú typu

„open-drain“, alebo pracujú s otvoreným kolektorom. Z toho vyplýva, že úroveň napätia

odpovedajúca log.0 sa vyskytne na vodiči TWI zbernice vtedy, ak jeden, alebo viac zariadení

bude generovať na svojom výstupe napäťovú úroveň log.0. V prípade, že všetky TWI

zariadenia budú mať výstupy v stave vysokej impedancie, bude vďaka „pull-up“ odporom

úroveň napätia na príslušnom vodiči zodpovedať log.1.

Počet spolupracujúcich zariadení je obmedzený kapacitou zbernice (max 400pF) a tiež

7-bitovým adresným priestorom. Detailnú špecifikáciu elektrických parametrov zbernice TWI

je možné nájsť v dokumentácii výrobcu MCU Atmega8.

4.4.1 Prenos dát a formát rámca (súbor údajov prenášaný v jednom bloku)

Každý údajový bit prenesený prostredníctvom TWI zbernice je sprevádzaný

hodinovým impulzom na vodiči SCL. Napäťová úroveň na dátovom vodiči, SDA musí byť

počas vysokej úrovne SCK stabilná, obr.35. Výnimkou je len generovanie štartovacej

a ukončovacej podmienky.

Obr.35 Priebeh signálov SCL a SDA

Zariadenie typu MASTER inicializuje a ukončuje prenos dát. Prenos je iniciovaný

zariadením MASTER, ktorý na zbernicu generuje podmienku štartu (START). Prenos

ukončuje MASTER pomocou ukončovacej podmienky (STOP). Medzi podmienkami START

a STOP je zbernica obsadená a žiadne iné zariadenie typu MASTER nemôže prevziať

riadenie zbernice. V špeciálnom prípade sa môžeme stretnúť s generovaním novej podmienky

SDA

SCL

stabilné dáta

Page 83: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 83

START medzi podmienkami START a STOP. Tento prípad sa nazýva opakovaný START

a využíva sa v prípadoch keď MASTER chce iniciovať nový prenos, bez opustenia riadenia

zbernice. Po opakovanom štarte zbernica ostáva obsadená až po nasledujúcu podmienku

STOP. Ako je znázornené na obr.36, START a STOP podmienky sú charakterizované

zmenou úrovne na SDA vodiči počas doby keď na SCL vodiči je vysoká úroveň napätia.

Obr.36 Podmienky START, STOP a opakovaný START

Adresovacie bloky prenášané prostredníctvom zbernice TWI majú 9 bitov.

Pozostávajú zo siedmych adresových bitov, jedného riadiaceho bitu - ČÍTANIE/ZÁPIS (R/W)

a bitu potvrdenia - (ACK). Ak R/W bit má hodnotu log.1, bude vykonaná operácia čítania,

inak sa vykoná operácia zápisu. Ak ľubovolné zariadenie typu SLAVE rozpozná svoju adresu

v deviatom takte hodín generuje na SDA vodič úroveň log.0. Ak je adresované zariadenie

SLAVE zaneprázdnené a nemôže odpovedať na požiadavku zariadenia MASTER v deviatom

cykle hodín (cyklus ACK) SCL bude úroveň na vodiči SDA odpovedať log.1. Potom

zariadenie typu MASTER môže vyslať podmienku STOP, alebo opakovaný START na

iniciovanie nového prenosu. Adresovací blok (paket) pozostáva z adresy a

čítacieho/zápisového bitu, ktorý sa označuje SLA+R, alebo SLA+W.

MSB adresy sa vysiela ako prvý. V priebehu návrhu môže užívateľ voľne prideľovať

adresy jednotlivým zariadeniam, ale adresa 0000000b je rezervovaná pre všeobecné výzvy.

Keď zariadenie typu MASTER vyšle všeobecnú výzvu, všetky zariadenia budú v cykle ACK

generovať na SDA úroveň log.0. Všeobecná výzva sa používa v prípade, ak zariadenie

MASTER chce všetkým zariadeniam SLAVE vyslať tú istú správu. V prípade, že vo

všeobecnej výzve je bit R/W rovný log.0, potom nasledujúci dátový paket bude prijímaný

všetkými zariadeniami SLAVE, ktoré reagovali na všeobecnú výzvu. Poznamenajme, že

všeobecná výzva s R/W bitom rovným log.1 nemá prakticky význam. V tomto prípade by

začalo súčasne vysielať viacero zariadení rôzne údaje.

Obr.37 Adresovací paket

SDA

SCL

START STOP START opakovaný START STOP

SDA

SCL

1 2 7 8 9

adr MSB adr LSB R/W ACK

Page 84: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 84

Všetky dátové pakety prenášané prostredníctvom zbernice TWI majú deväť bitov.

Obsahujú 8 dátových bitov a jeden potvrdzovací bit. Počas prenosu dát zariadenie typu

MASTER generuje hodiny a podmienky START a STOP, pričom prijímač je zodpovedný za

generovanie potvrdenia príjmu ACK. Akonáhle prijímač ponechá vodič SDA počas deviateho

cyklu hodín v stave vysokej úrovne (NACK), táto skutočnosť je interpretovaná ako

neschopnosť prijímať ďalšie dáta.

Obr.38 Údajový paket

Všeobecne je prenos zložený z podmienky START a SLA+R/W (adresa prijímača + R/W bit),

jeden, alebo viac údajových paketov a z podmienky STOP. Nie je povolený prenos prázdnej

správy ( podmienka START a bezprostredne za ňou podmienka STOP). Poznamenajme, že

zariadenie SLAVE môže podľa potreby predĺžiť nízku úroveň na vodiči SCL. Túto

skutočnosť je možné využiť v prípade ak rýchlosť SCL daná zariadením MASTER je pre

daný prijímač príliš vysoká. Predĺženie času nízkej úrovne SCL nemá vplyv na čas trvania

vysokej úrovne. Dôsledkom uvedeného je že zariadenie SLAVE môže meniť prenosovú

rýchlosť na zbernici TWI.

Protokol TWI zbernice dovoľuje na jednu zbernicu pripojiť viacero zariadení typu MASTER

(Multi-MASTER systémy). V tomto prípade je potrebné zaistiť správnu činnosť aj vtedy, keď

v tom istom čase bude iniciovaný prenos od viacerých zariadení typu MASTER. V Multi-

MASTER systémoch je potrebné vyriešiť dva základné problémy:

- V prenosovom systéme musí byť implentovaný mechanizmus na výber práve jedného

zariadenia typu MASTER. Všetky ostatné zariadenia, ktoré žiadali o pridelenie zbernice

musia zastaviť vysielanie. Tento výberový proces sa niekedy nazýva (arbitráž). Ak

zariadenie MASTER zistí, že v procese výberu je vyradené bezprostredne sa prepína do

režimu SLAVE a sleduje či nie je adresované zariadením, ktoré z výberového procesu

vyšlo ako MASTER.

- Rôzne zariadenia MASTER môžu mať rozdielne hodinové signály SCL. Preto je potrebné

zabezpečiť synchronizáciu hodinových signálov SCL od všetkých zariadení MASTER,

ktoré v tom istom čase žiadajú o pridelenie zbernice.

Vďaka skutočnosti, že na vodičoch zbernice je realizovaná logická funkcia AND (budiče

zbernice sú typu „otvorený kolektor“) je možné úspešne vyriešiť oba spomenuté

SDA

na zbernici

SCL z

vysielača

1 2 7 8 9

dáta MSB dáta LSB ACK

SDA z

vysielača

SDA z

prijímača

SLA +R/W dátový Byte

nasle

du

júci B

yt dát, S

TO

P, o

pako

vaný S

TA

RT

Page 85: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 85

problémy. Čas nízkej úrovne hodinového signálu bude rovný času nízkej úrovne SCL

„najpomalšieho“ zariadenia. Čas vysokej úrovne hodinového signálu bude rovný času

vysokej úrovne signálu SCL „najrýchlejšieho“ zariadenia typu MASTER. Poznamenajme,

že všetky zariadenia sledujú signál na vodiči SCL a synchronizujú sa pri zmenách

hodinového signálu. Proces synchronizácie viacerých zariadení typu MASTER je uvedený

na obr.39.

Obr.39 Synchronizácia hodín SCL dvoch zariadení typu MASTER

Proces výberu zariadenia MASTER vychádza zo skutočnosti, že všetky zariadenia, ktoré

žiadajú o pridelenie zbernice nepretržite monitorujú stav na vodiči SDA. Ak hodnota

prečítaná z vodiča SDA nezodpovedá hodnote, ktorú na zbernicu vyslalo zariadenie

žiadajúce zbernicu, potom je z procesu výberu vyradené. Poznamenajme, že zariadenie

bude vyradené len v tom prípade ak vysiela hodnotu log.1, pričom aspoň jedno ďalšie

zariadenie vysiela log.0. Zariadenie, ktoré je vylúčené z procesu výberu okamžite

prechádza do režimu SLAVE a pokračuje v príjme dát, kontrolujúc či nebude „víťazným“

zariadením adresované. Proces výberu bude pokračovať až na zbernici nezostane len

jedno zariadenie typu MASTER. Ak viacero zariadení typu MASTER bude adresovať to

isté zariadenie proces výberu bude zrejme pokračovať aj pri prenose dátových paketov.

Popísaný proces výberu je ilustrovaný na obr.40.

SCL

MASTER A

SCL

MASTER B

SCL na vodiči

TA nízka

úroveň

TA vysoká

úroveň

TB nízka úroveň TB vysoká úroveň

počiatok časovania nízkej úrovne

SCL všetkými zariadeniami typu

MASTER

počiatok časovania vysokej úrovne

SCL všetkými zariadeniami typu

MASTER

Page 86: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 86

Obr.40 Proces výberu zariadenia typu MASTER

Poznamenajme, že v prípade prenosových systémov s viacerými zariadeniami typu MASTER

musia všetky prenosy obsahovať rovnaký počet údajových paketov.

Modul TWI MCU Atmega8 obsahuje niekoľko funkčných blokov podľa obr.41.

Všetky registre znázornené hrubou čiarou sú prístupné prostredníctvom údajovej zbernice

procesora.

SDA od

MASTER A

SDA od

MASTER A

SDA signál na

vodiči

ŠTART

zariadenie A vyradené z

výberového procesu

Page 87: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 87

Obr.41 Štruktúra TWI modulu

Vývody SDA a SCL spolupracujú s internými časťami MCU. Výstupné budiace obvody

obsahujú obmedzovač strmosti hrán signálu ( SRC), podľa špecifikácie rozhrania zbernice

TWI. Vstupy obsahujú obvody potlačenia špičiek signálu (SF), ktoré sú kratšie než 50 ns.

Interné „pull-up“ odpory môžu byť použité nastavením príslušných bitov registra PORTC.

Interné „pull-up“ odpory môžu v niektorých prípadoch nahradiť externé odpory.

V prípade, že MCU pracuje v režime MASTER, jednotka generovania prenosovej

rýchlosti riadi periódu hodinového signálu SCL. Frekvencia signálu SCL je určená obsahom

bitov preddeličky v registri TWSR a obsahom registra TWBR. Ak MCU pracuje v režime

SLAVE prenosová rýchlosť nezávisí od nastavenia registrov TWSR a TWBR, musí byť však

minimálne 16 krát nižšia než je frekvencia hodín CPU. Frekvencia generovaného signálu SCL

je daná nasledovným vzťahom:

TWPS

CPU

SCLTWBR

CLKf

4)(216 ,

kde TWBR je hodnota uchovaná v registri TWBR

TWPS je hodnota uchovaná v príslušných bitoch preddeličky v registri TWSR

Jednotka rozhrania TWI obsahuje údajový a adresový posuvný register (TWDR),

obvody riadenia a generovania START/STOP podmienok a výberové a detekčné obvody.

SCL SDA

SRC SF SRC SF

riadenie

START/STOP

detkcia výberu

potlačenie špičiek

adr./dat pos. reg.

TWDRACK

jednotka rozhrania TWI

register adresy

TWAR

komparátor adresy

jednotka vyhodnotenia adresy

stavový register

TWSR

riadiaci register

TWCR

riadenie

riadiaca jednotka

preddelička

register pren.

rýchlosti TWBR

generátor pren. rýchl.

modul TWI

Page 88: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 88

Register TWDR obsahuje byt dát/adresy, ktorý má byť vyslaný, prípadne byt prijatých

dát/adresy. Ako doplnok k registru TWDR sa využíva bit (N)ACK, ktorý bude vysielaný,

alebo bol prijatý. Tento bit nie je priamo prístupný užívateľskému programu, iba

prostredníctvom registra TWICR. Obvody riadenia START/STOP podmienok generujú

a detekujú podmienky START, opakovaný START a STOP. Obvody riadenia START/STOP

podmienok sú schopné rozpoznať podmienky START a STOP aj v prípade, že MCU je

v niektorom z úsporných režimov. Ak je zariadenie adresované potom aktivujú MCU.

Ak TWI chce vysielať dáta v režime MASTER výberové a detekčné obvody neustále

monitorujú prenos dát na zbernici. Ak v procese výberu je zariadenie neúspešné potom

výberové a detekčné obvody informujú riadiacu jednotku TWI.

Jednotka vyhodnotenia adries kontroluje prijímané adresové byty a porovnáva ich

zhodu s obsahom 7-bitového adresového registra TWAR. Ak bit TWGCE v registri TVAR je

nastavený na hodnotu log.1, potom prijatý adresný byt je porovnávaný s adresou určenou pre

všeobecnú výzvu. Ako už bolo spomenuté, jednotka vyhodnotenia adries je schopná

vyhodnocovať adresy aj v prípade, že MCU je v úspornom režime. V prípade, že MCU je

adresovaná zariadením typu MASTER uvedie sa do aktívneho režimu.

Riadiaca jednotka monitoruje TWI zbernicu a generuje odozvu v súlade s nastavením

riadiaceho registra TWCR. Ak sa na zbernici vyskytne taká udalosť, ktorá vyžaduje zásah

aplikačného programu nastaví sa príznak prerušenia TWINT v registri TWCR.

V nasledujúcom hodinovom cykle sa prepíše obsah stavového registra TWSR, pomocou

ktorého je možné identifikovať druh udalosti. Register TWSR obsahuje relevantnú informáciu

len po nastavení príznaku TWIN. Inak obsah registra TWSR pomocou špeciálneho stavového

kódu informuje CPU, že relevantná informácia nie je prístupná. Po celý čas nastavenia

príznaku TWINT je vodič SCL prostredníctvom výstupu držaný na nízkej úrovni. To

dovoľuje aplikačnému programu reagovať na vzniknutú udalosť pred povolením ďalšieho

prenosu prostredníctvom TWI zbernice. TWIN príznak je nastavený v nasledujúcich

prípadoch:

- Po tom, čo TWI vyslala podmienku START, alebo opakovaný START.

- Po tom, čo TWI vyslala SLA+R/W.

- Po tom, čo TWI vyslala adresný byte.

- Po tom, čom TWI vypadla z procesu arbitráže (výber zariadenia typu MASTER).

- Po tom, čo bola adresovaná (vlastnou SLAVE adresou, alebo všeobecnou výzvou).

- Po tom, čo prijala byte dát.

- Po tom, čo prijala STOP, alebo opakovaný START pokiaľ bola adresovaná ako SLAVE.

- Po tom, keď bola identifikovaná chyba zbernice (neprípustné START a STOP

podmienky).

4.4.2 Popis registrov

Register prenosovej rýchlosti – TWBR

TWBR:

Bit 7 6 5 4 3 2 1 0

Symbol TWBR7 TWBR6 TWBR5 TWBR4 TWBR3 TWBR2 TWBR1 TWBR0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Bity 7:0 - Bity registra prenosovej rýchlosti TWI, TWI Bit Rate Register

Page 89: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 89

Pomocou obsahu registra TWBR sa určuje deliaci pomer generátora prenosovej

rýchlosti. Generátor prenosovej rýchlosti je delič frekvencie slúžiaci na generovanie

hodinového signálu SCL, v prípade že MCU pracuje v režime MASTER. Prenosová rýchlosť

je určená vzťahom na predchádzajúcej strane.

Riadiaci register TWI – TWCR

TWCR:

Bit 7 6 5 4 3 2 1 0

Symbol TWINT TWEA TWSTA TWSTO TWWC TWEN - TWIE

Prístup R/W R/W R/W R/W R/W R/W R R/W

P.hod. 0 0 0 0 0 0 0 0

Riadiaci register TWCR je využitý na riadenie činnosti jednotky TWI.

Bit 7 – Príznak prerušenia od TWI, TWI Interrupt Flag

Bit TWINT sa automaticky nastaví, keď TWI jednotka ukončí práve prebiehajúcu

úlohu a vyžaduje odozvu (zásah) aplikačného programu. Ak sú globálne povolené prerušenia

a súčasne je bit TWIE v registri TWCR nastavený na hodnotu log.1, potom pri nastavení bitu

TWINT bude CPU pokračovať vo výkone programu na adrese prerušovacieho vektora TWI.

Pokiaľ je bit TWINT nastavený na hodnotu log.1 výstup SCL je na nízkej úrovni. Bit TWINT

musí byť vynulovaný pomocou programu, zápisom log.1. Poznamenajme, že nulovanie

príznaku TWINT povolí činnosť na zbernici TWI. Preto obsahy všetkých registrov (stavový,

dátový a adresový) musia byť prečítané/zapísané pred vynulovaním príznakového bitu

TWINT.

Bit 6 – Povolenie potvrdzovania, TWI Enable Acknowledge Bit

Bit TWEA riadi generovanie potvrdenia príjmu impulzom ACK. Ak bit TWEA je

nastavený na hodnotu log.1, potom je impulz ACK generovaný na zbernicu TWI pri splnení

nasledujúcich podmienok:

- Ak zariadenie je v režime SLAVE a prijalo vlastnú adresu.

- Po prijatí všeobecnej výzvy, za predpokladu, že bit TWGCE v registri TWAR je

nastavený na hodnotu log.1.

- Po prijatí dátového bytu v režime MASTER prijímač, alebo SLAVE prijímač.

Zápisom log.0 do bitu TWEA bude zariadenie virtuálne, dočasne odpojené od zbernice TWI.

Rozpoznanie adresy môže znova nastaviť bit TWEA na hodnotu log.1.

Bit 5 – Bit podmienky START, TWI START Condition Bit Ak zariadenie chce na zbernici zaujať postavenie MASTER, potom aplikačný program

zapíše do bitu TWSTA log.1. Obvodové prostriedky jednotky TWI kontrolujú zbernicu a ak

je zbernica voľná generujú podmienku START. Ak nie je zbernica uvoľnená TWI jednotka

čaká pokiaľ sa na zbernici nevyskytne podmienka STOP a následne generuje podmienku

START. Po vyslaní podmienky START bit TWSTA musí byť vynulovaný programom

Bit 4 – Bit podmienky STOP, TWI Stop Condition Bit

Ak TWI jednotka je v režime MASER, potom zápisom log.1 do bitu TWSTO bude na

TWI zbernicu generovaná podmienka STOP. Po vyslaní podmienky STOP sa bit TWSTO

automaticky vynuluje. V režime SLAVE sa nastavenie bitu TWSTO používa na zotavenie po

Page 90: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 90

podmienke ERROR. V tomto prípade sa negeneruje STOP podmienka, ale zariadenie sa vráti

do neadresovaného režimu SLAVE. Jeho výstupy budú v stave vysokej impedancie.

Bit 3 – Príznak kolízie pri zápise, TWI Write Collision Flag

Bit TWWC sa nastaví, keď sa pokúšame zapísať dáta do TWI údajového registra

TWDR, a príznak TWINT má hodnotu log.0. Tento príznak je nulovaný zápisom do registra

TWDR, keď bit TWINT má hodnotu log.1.

Bit 2 – Bit povolenia TWI, TWI Enable Bit

Bit TWEN povoľuje činnosť jednotky TWI. Keď do bitu TWEN zapíšeme hodnotu

log.1 jednotka TWI preberá riadenie V/V vývodov, priradí im funkciu SCL a SDA, povolí

činnosť obmedzovača strmosti hrán signálu a filtra. Ak do bitu TWEN zapíšeme hodnotu

log.0 jednotka TWI sa vypína a prenos sa ukončí.

Bit 1 – Nevyužitý bit, Reserved Bit

Bit 0 – Povolenie prerušenia od TWI, TWI Interrupt Enable

Ak bit TWIE je nastavený na hodnotu log.1 a súčasne sú globálne povolené prerušenia

TWI jednotka bude generovať žiadosť o prerušenie vždy, ak bude nastavený príznak TWINT.

Stavový register TWI – TWSR

TWSR:

Bit 7 6 5 4 3 2 1 0

Symbol TWS7 TWS6 TWS5 TWS4 TWS3 - TWPS1 TWPS0

Prístup R R R R R R R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Bity 7..3 – TWS, Stav TWI, TWI Status

Týchto 5 bitov charakterizuje stav jednotky TWI i samotnej zbernice. Kódy

odpovedajúce jednotlivým stavom sú popísané v ďalšom texte.

Bit 2 – Nevyužitý bit, Reserved Bit

V mikrokontroléri ATmega8 sa uvedený bit nevyužíva.

Bity 1..0 –TWPS, Bity preddeličky, TWI Prescaler Bits

Obsah bitov TWPS určuje použitý deliaci pomer preddeličky podľa tabuľky 34.

TWPS1 TWPS0 Deliaci pomer

0 0 1

0 1 4

1 0 16

1 1 64

Tab.34 Hodnoty deliaceho pomeru

Údajový register TWI – TWDR

Page 91: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 91

TWDR:

Bit 7 6 5 4 3 2 1 0

Symbol TWD7 TWD6 TWD5 TWD4 TWD3 TWD2 TWD1 TWD0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 1 1 1 1 1 1 1 1

Ak je jednotka TWI vo vysielacom režime, potom register TWDR obsahuje nasledujúci byte,

ktorý bude vysielaný. Ak je jednotka TWI v režime príjmu, potom register TWDR obsahuje

posledný prijatý byte. Do registra TWDR sa nemôže zapisovať, pokiaľ sa ešte vysúva

vysielaný byt. Ak sa nastavil príznak TWINT je možné pristupovať k registru TWDR.

Poznamenajme, že k registru TWDR nemôžeme pristupovať pred prvým výskytom

prerušenia. Údaje v registri TWDR ostávajú stabilné pokiaľ príznak TWINT má hodnotu

log.1. Pokiaľ sú údaje vysúvané z registra TWDR na zbernicu tak aktuálne údaje zo zbernice

sú posúvané do registra. Register TWDR preto vždy obsahuje posledný byte ktorý bol na

zbernici, s výnimkou prechodu z úsporného režimu po prerušení od jednotky TWI. V tomto

prípade je obsah registra TWDR nedefinovaný. Bit potvrdenia príjmu ACK je nastavovaný

automaticky, vlastná CPU nemôže k nemu pristupovať.

Bity 7:0 - Bity údajového registra, TWI Data Register

Tieto bity tvoria nasledujúci údajový byte, ktorý má byť vyslaný, alebo posledný

údajový byte, ktorý bol prijatý z dvojvodičovej (TW) zbernice.

Adresový register TWI – TWAR

TWAR:

Bit 7 6 5 4 3 2 1 0

Symbol TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 1 1 1 1 1 1 1 0

Register TWAR obsahuje 7-bitovú adresu, na ktorú bude TWI reagovať vždy, ak bude

v režime SLAVE vysielač, alebo prijímač. V režime MASTER nie je potrebná. V systémoch

s viacerými zariadeniami typu MASTER musí byť register TWAR nastavený v tých

zariadeniach, ktoré môžu byť adresované ako zariadenia SLAVE druhými zariadeniami typu

MASTER.

Bit TWGCE je využitý na povolenie rozpoznávania všeobecnej výzvy (adresa 0x00).

Bity 7:1 - Bity adresového registra, TWI (Slave) Adress Register

Tieto bity obsahujú adresu TWI jednotky v režime SLAVE.

Bit 0 – Povolenie rozpoznania všeobecnej výzvy, TWI General Call Recognition Enable

Bit

Ak bit TWGCE je nastavený na hodnotu log.1, potom je povolené rozpoznávanie

všeobecnej výzvy vyskytujúcej sa na TW sériovej zbernici.

Page 92: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 92

4.4.3 Prenos údajov prostredníctvom TWI

Jednotka AVR TWI je bytovo orientovaná s plným využitím prerušení. Prerušenia sú

generované po všetkých udalostiach na zbernici. Pretože jednotka TWI využíva prerušovací

systém, CPU môže v priebehu prenosu jedného bytu vykonávať aplikačný program. Ak nie je

povolené prerušenie od TWI jednotky, prípadne sú globálne zakázané prerušenia, CPU musí

programovými prostriedkami testovať nastavenie príznaku TWINT. Príznak TWINT sa

nastaví vždy po ukončení operácie na zbernici. TWI jednotka potom očakáva odozvu od

aplikačného programu. V tomto prípade stavový register TWSR obsahuje hodnotu, ktorá

charakterizuje aktuálny stav TWI zbernice. Aplikačný program na základe tohoto stavu

rozhodne ako sa bude jednotka TWI chovať v nasledujúcom zbernicovom cykle. Správanie

jednotky TWI určuje aplikačný program prostredníctvom vhodného nastavenia registrov

TWCR a TWDR. Na nasledujúcom obrázku je znázornená spolupráca aplikačného programu

s jednotkou TWI. V uvedenom príklade zariadenie typu „MASTER“ prenáša jeden byte do

zariadenia typu „SLAVE“.

Obr.42 Komunikácia medzi aplikáciou a jednotkou TWI pri typickom prenose

1. V prvom kroku je potrebné vyslať podmienku START. Aplikácia to zaistí zápisom

definovanej hodnoty do registra TWCR. Takto iniciuje jednotku TWI na prenos

START podmienky. Týmto zápisom sa príznak TWINT nastaví na hodnotu log.1.

Zápisom log.1 do TWINT sa príznak TWINT vynuluje. Jednotka TWI nezaháji

vlastný prenos pokiaľ TWINT obsahuje hodnotu log.1. Bezprostredne po

vynulovaní bitu TWINT jednotka zaháji vlastný prenos podmienky START.

2. Po vyslaní START podmienky sa príznak TWINT v registri TWCR nastaví na

hodnotu log.1 a obnoví sa obsah TWSR, ktorý indikuje že podmienka bola úspešne

vyslaná.

3. Aplikačný program testuje obsah TWSR a zisťuje či podmienka START bola

úspešne vyslaná. Ak obsah TWSR nezodpovedá úspešnému vyslaniu START

podmienky potom aplikácia musí reagovať napríklad volaním chybovej rutiny.

V prípade, že obsah TWSR odpovedá úspešnému vyslaniu podmienky START,

potom aplikácia naplní register TWDR hodnotou SLA+W a do registra TWRC

zbernica

TWI

aplikácia

jednotka

TWI

ŠTART SLA+W A data A STOP

aplikácia

zapisuje

do

TWCR

kontrola TWSR a

zavedenie SLA+W

do TWDR a

riadenie cez TWCR

kontrola TWSR

naplnenie TWDR

dátami a riadenie

cez TWCR

kontrola TWSR a riadenie

cez TWCR, tak aby bola

vyslaná podmienka STOP

nastavenie TWINT,

stav indikuje, že

START bol vyslaný

nastavenie TWINT, stav

indikuje, že SLA+W

bolo vyslané a ACK

prijatý

nastavenie TWINT, stav

indikuje, že data boli

vyslané a ACK prijatý

1

2

3

4

5

6

7

--ilus truje nastavenie TWINT

Page 93: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 93

zapíše definovanú hodnotu, ktorá informuje TWI jednotku, že má zahájiť prenos

SLA+W z registra TWDR. Zápisom hodnoty log.1 do bitu TWINT sa nuluje

príznak TWINT. Bezprostredne po vynulovaní bitu TWINT jednotka zaháji

vlastný prenos adresovacieho paketu.

4. Ak bol adresovací paket úspešne prenesený nastaví sa príznak TWINT v registri

TWCR a súčasne sa obnoví obsah registra TWSR tak, aby odpovedal úspešnému

prenosu adresy. Obsah registra obsahuje aj informáciu či adresované zariadenie

potvrdilo, alebo nepotvrdilo príjem paketu.

5. Aplikačný program musí testovať obsah TWSR a zistiť, či bol adresovací paket

úspešne prenesený a či bol potvrdený jeho príjem. Ak obsah TWSR nezodpovedá

úspešnému vyslaniu a potvrdeniu príjmu adresovacieho paketu, potom aplikácia

musí reagovať, napríklad volaním chybovej rutiny. V prípade, že obsah TWSR

odpovedá úspešnému vyslaniu adresovacieho paketu, potom aplikácia naplní

register TWDR hodnotou dátového bytu. Do registra TWRC zapíše definovanú

hodnotu, ktorá informuje TWI jednotku, že má zahájiť prenos dátového bytu

z registra TWDR. Zápisom hodnoty log.1 TWIN sa nuluje príznak TWINT.

Bezprostredne po vynulovaní bitu TWINT jednotka zaháji vlastný prenos

údajového paketu.

6. Po prenose údajového paketu sa nastaví príznak TWINT v registri TWCR

a súčasne sa obnoví obsah registra TWSR tak, aby odpovedal úspešnému prenosu

dátového paketu. Obsah registra obsahuje aj informáciu či adresované zariadenie

potvrdilo, alebo nepotvrdilo príjem paketu.

7. Aplikačný program testuje obsah TWSR a zisťuje, či bol dátový paket úspešne

prenesený a či bol potvrdený jeho príjem. Ak obsah TWSR nezodpovedá

úspešnému vyslaniu a potvrdeniu príjmu dátového paketu, potom aplikácia musí

reagovať, napríklad volaním chybovej rutiny. V prípade, že obsah TWSR

odpovedá úspešnému vyslaniu dátového paketu, potom aplikácia zapíše do registra

TWRC definovanú hodnotu, ktorá informuje TWI jednotku, že má zahájiť prenos

podmienky STOP. Zápisom hodnoty log.1 TWINT sa nuluje príznak TWINT.

Bezprostredne po vynulovaní bitu TWINT jednotka zaháji vlastný prenos STOP

podmienky. Poznamenajme, že po prenose podmienky STOP sa už príznak

TWINT nenastaví.

Uvedený príklad mal za úlohu poukázať na základné princípy prenosu prostredníctvom

zberniceTWI.

Tieto princípy je možné zhrnúť nasledovne:

- Ak jednotka TWI ukončí ľubovolnú operáciu a očakáva odozvu aplikácie nastaví príznak

TWINT. Pokiaľ príznak TWINT je nastavený, bude na vodiči SCL TWI zbernice úroveň

logickej nuly.

- Pokiaľ TWINT má hodnotu log.0, musí užívateľ obnoviť obsah registrov TWI jednotky,

tak, aby boli relevantné pre nasledujúci zbernicový cyklus.

- Po obnovení obsahu TWI registrov aplikačný program zapíše vhodný obsah do TWCR

registra. Zápisom logickej jednotky do bitu TWINT sa príznak TWINT vynuluje.

Jednotka TWI zaháji operáciu odpovedajúcu obsahu registra TWCR.

Nasledujúci príklad ilustruje možné programové riešenie komunikácie prostredníctvom TWI.

Kód JSA Popis

1 ldi r16, (1<<TWINT)|(1<<TWSTA)|(TWEN)

Vyšli STRAT podmienku

Page 94: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 94

out TWCR, r16

2 CAK1:

in r16, TWCR

sbrs r16, TWINT

rjmp CAK1

Čakaj pokiaľ sa nenastaví príznak

TWINT, ktorý oznamuje, že

podmienka START bola uspešne

vyslaná.

3 in r16, TWSR

andi r16, 0xF8

cpi r16, START

brne CHYBA

Kontroluj hodnotu TWI stavového

registra. Ak je stav rozdielny od

stavu START, potom sa vyskytla

chyba.

3 ldi r16,SLA_W

out TWDR, r16

ldi r16, (1<<TWINT)|(1<<TWEN)

out TWCR, r16

Nastav TWDR register na hodnotu

SLA_W, vynuluj príznak TWINT

a začni prenos adresy.

4 CAK2:

in r16, TWCR

sbrs r16,TWINT

rjmp CAK2

Čakaj pokiaľ sa nenastaví príznak

TWINT, ktorý oznamuje, že adresa

bola vyslaná a prijatá odpoveď

ACK, alebo NACK.

5 in r16,TWSR

andi r16, 0xF8

cpi MT_SLA_ACK

brne CHYBA

Kontroluj hodnotu TWI stavového

registra. Ak je stav rozdielny od

stavu MT_SLA_ACK, potom sa

vyskytla chyba.

5 ldi r16, DATA

out TWDR, r16

ldi r16, (1<<TWINT)|(1<<TWEN)

out TWCR, r16

Naplň TWDR register hodnotou

DATA, vynuluj príznak TWINT

a začni prenos dát.

6 CAK3:

in r16,TWCR

sbrs r16, TWINT

rjmp CAK3

Čakaj pokiaľ sa nenastaví príznak

TWINT, ktorý oznamuje, že dáta

boli vyslané a bola prijatá odpoveď

ACK, alebo NACK.

7 in r16,TWSR

andi r16,0xF8

cpi r16, MT_DATA_ACK

brne CHYBA

Kontroluj hodnotu TWI stavového

registra. Ak je stav rozdielny od

stavu MT_DATA_ACK, potom sa

vyskytla chyba.

7 ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)

out TWCR, r16

Vyšli STOP podmienku

Vyslanie jedného bytu dát prostredníctvom TWI jednotky.

Jednotka TWI môže pracovať v štyroch základných režimoch. Sú to režimy:

- Vysielač MASTER, (MT),

- prijímač MASTER, (MR),

- vysielač SLAVE, (ST),

- prijímač SLAVE, (SR).

4.4.4 Režimy činnosti modulu TWI

Page 95: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 95

Nasledujúca časť je venovaná popisu jednotlivých režimov. V popise režimov sú použité

nasledujúce skratky:

- S: START podmienka

- Rs: opakovaná START podmienka

- R: čítanie bitu (vysoká úroveň na SDA)

- W: zápis bitu (nízka úroveň na SDA)

- A: bit potvrdenia, ACK (nízka úroveň na SDA)

- /A: bit negatívneho potvrdenia, NACK, (vysoká úroveň na SDA)

- Data: 8-bitový údajový byte

- P: STOP podmienka

- SLA: adresa zariadenia typu SLAVE

4.4.4.1 Režim vysielač MASTER

V režime MT sa vysielajú dátové byty do adresovaného zariadenia pracujúceho

v režime prijímač SLAVE. Po prechode do režimu MASTER musí byť vyslaná START

podmienka. Formát nasledujúceho adresovacieho paketu určí či zariadenia prejde do režimu

MT, alebo MR. Ak adresovací paket bude v tvare SLA_W, potom zariadenie prechádza do

režimu MT, ak bude v tvare SLA_R, potom zariadenie prejde do režimu MR. Predpokladáme,

že kódy stavov, ktoré sú uvedené v tejto časti majú nulové hodnoty v bitoch preddeličky.

START podmienka bude vyslaná, ak do registra TWCR zapíšeme nasledujúcu hodnotu.

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

hodnota 1 X 1 0 X 1 0 X

Bit TWEN musí byť nastavený na hodnotu log.1, aby bola povolená činnosť TWI jednotky.

Bit TWSTA musí byť nastavený na hodnotu log.1, aby bol vyslaná podmienka START.

Do bitu TWINT musí byť zapísaná hodnota log.1, aby bol vynulovaný príznak TWINT.

Jednotka TWI začne testovať dvojvodičovú sériovú zbernicu a generovať START podmienku

akonáhle bude zbernica uvoľnená. Po vyslaní podmienky START sa nastaví príznak TWINT

a kód stavu v registri TWSR na hodnotu 0x80. Zápisom SLA+W do registra TWDR prejde

zariadenie do režimu MT. Po vynulovaní príznaku TWINT (zápisom log.1 do bitu TWINT)

jednotka pokračuje v prenose. Príznak TWINT vynulujeme zápisom nasledujúcej hodnoty do

registra TWCR.

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

hodnota 1 X 0 0 X 1 0 X

Po tom, keď jednotka TWI vyšle SLA+W a príjme ACK/NACK bit príznak TWINT sa znova

nastaví a súčasne sa nastaví kód stavu v registri TWSR na jednu z možných hodnôt – 0x18,

0x20, alebo 0x38. Význam týchto kódov je uvedený v tabuľke 33. Po úspešnom prenose

SLA+W bude prenos pokračovať prenosom údajového bytu. Prenášaný Byt je potrebné

zapísať do registra TWDR. Poznamenajme, že údajový byte je možné do registra TWDR

zapísať len v prípade, ak príznak TWINT je nastavený na log.1. V opačnom prípade je prístup

do TWDR zakázaný a nastaví sa bit TWWC, ktorý signalizuje kolíziu pri zápise. Po zápise

bytu do TWDR vynulujeme príznak TWINT a prenos pokračuje. Príznak TWINT

vynulujeme zápisom nasledujúcej hodnoty do registra TWCR.

Page 96: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 96

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

Hodnota 1 X 0 0 X 1 0 X

Tento krok sa opakuje až do okamžiku, kedy nie je prenesený posledný údajový byt. Potom

prenos končí generovaním podmienky STOP, alebo podmienky opakovaný START. Tieto

podmienky sú iniciované zápisom jednej z nasledujúcich hodnôt do registra TWCR.

TWCR ( STOP ):

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

hodnota 1 X 0 1 X 1 0 X

TWCR (opakovaný START):

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

hodnota 1 X 1 0 X 1 0 X

Po podmienke opakovaný START môže zariadenie pristúpiť znova na to isté zariadenie typu

SLAVE, alebo nové zariadenie typu SLAVE bez vyslania STOP podmienky. Opakovaný

START dovoľuje teda zariadeniu typu MASTER presmerovať prenos na iné zariadenie typu

SLAVE, prepnúť sa z režimu MT na režim MR bez straty riadenia zbernice.

Kód

stavu

(TWSR)

Stav TWI Odpoveď aplikačného programu Nasledujúca činnosť TWI

Do/z TWDR Do TWCR

STA STO TWINT TWEA

0x08 Bola vyslaná

„START

podmienka“

Load

SLA+W

0 0 1 X SLA+W bude vyslané.

ACK, alebo NACK bude

prijaté.

0x10 Bola vyslaná

„pomienka

opakovaný

START“

Load

SLA+W,

príp. SLA+R

0

0

0

0

1

1

X

X

SLA+W bude vyslané a

ACK/NACK bude prijaté.

SLA+R bude vyslané a

ACK/NACK bude prijaté.

0x18 Bolo vyslané

SLA+W a ACK

bolo prijaté

Load dáta,

alebo žiadna

TWDR akcia

0

1

0

1

0

0

1

1

1

1

1

1

X

X

X

X

Bude vyslaný údajový byt

a prijaté ACK/NACK.

Bude vyslaný „O. START“.

Bude vyslaný „STOP“

a TWSTO bude nulovaný.

Bude vyslaný „STOP“ po

„START“ a TWSTO bude

nulovaný.

0x20 Bolo vyslané

SLA+W a

NACK bolo

prijaté

Load dáta,

alebo žiadna

TWDR akcia

0

1

0

1

0

0

1

1

1

1

1

1

X

X

X

X

Bude vyslaný údajový Byt

a prijaté ACK/NACK.

Bude vyslaný „ O. START“.

Bude vyslaný „STOP“.

a TWSTO bude nulovaný.

Bude vyslaný „STOP“ po

„START“ a TWSTO bude

nulovaný.

Page 97: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 97

0x28 Údajový byt bol

vyslaný a bolo

prijaté ACK

Load dáta,

alebo žiadna

TWDR akcia

0

1

0

1

0

0

1

1

1

1

1

1

X

X

X

X

Bude vyslaný údajový byte

a prijatý bude ACK/NACK.

Bude vyslaný „OP. START“.

Bude vyslaný „STOP“

a TWSTO bude nulovaný.

Bude vyslaný „STOP“ po

„START“ a TWSTO bude

nulovaný.

0x30 Údajový byt bol

vyslaný a bolo

prijaté NACK

Load dáta,

alebo žiadna

TWDR akcia

0

1

0

1

0

0

1

1

1

1

1

1

X

X

X

X

Bude vyslaný údajový byte

a prijatý ACK/NACK.

Bude vyslaný „OP. START“.

Bude vyslaný „STOP“

a TWSTO bude nulovaný

Bude vyslaný „STOP“ po

„START“ a TWSTO bude

nulovaný.

0x38 Strata

výberového

procesu

Žiadna

TWDR akcia

0

1

0

0

1

1

X

X

TWI bude uvoľnená

a zariadenie prejde do režimu

neadresovaný „SLAVE“.

Po uvoľnení zbernice bude

vysielaná „START“ podmienka

Tab.34 Kódy stavov TWI v režime vysielač „MASTER“, (MT)

4.4.4.2 Režim prijímač MASTER, (MR)

V režime MR sa prijímajú dátové byty od adresovaného zariadenia pracujúceho

v režime vysielač SLAVE. Po prechode do režimu MASTER musí zariadenie vyslať START

podmienku. Formát nasledujúceho adresovacieho paketu určí či zariadenia prejde do režimu

MT, alebo MR. Ak adresovací paket bude v tvare SLA+W, potom zariadenie prechádza do

režimu MT, ak bude v tvare SLA+R, potom zariadenie prejde do režimu MR. Predpokladáme,

že kódy stavov uvedených v tejto časti obsahujú nulové hodnoty v bitoch preddeličky.

START podmienka bude vyslaná, ak do registra TWCR bude zapísaná nasledujúca hodnota.

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

Hodnota 1 X 1 0 X 1 0 X

Bit TWEN musí byť nastavený na hodnotu log.1, aby bola povolená činnosť TWI jednotky.

Bit TWSTA musí byť nastavený na hodnotu log.1, aby bol vyslaná podmienka START.

Do bitu TWINT musí byť zapísaná hodnota log.1, aby bol vynulovaný príznak TWINT.

Jednotka TWI začne testovať dvojvodičovú sériovú zbernicu a akonáhle bude zbernica

uvoľnená generovať START podmienku. Po vyslaní podmienky START sa nastaví príznak

TWINT a kód stavu v registri TWSR na hodnotu 0x08. Zápisom SLA+R do registra TWDR

prejde zariadenie do režimu MR. Po vynulovaní príznaku TWINT (zápisom log.1 do bitu

TWINT) jednotka bude pokračovať v prenose. Činnosť TWI pokračuje zápisom nasledujúcej

hodnoty do registra TWCR.

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

Hodnota 1 X 0 0 X 1 0 X

Page 98: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 98

Po tom, keď jednotka TWI vyšle SLA+R a príjme ACK/NACK bit, príznak TWINT sa znova

nastaví a súčasne sa nastaví kód stavu v registri TWSR na jednu z možných hodnôt – 0x38,

0x40, alebo 0x48. Význam týchto kódov je uvedený v tabuľke 34. Prijaté dáta môžeme čítať

z TWDR registra hneď potom, keď sa nastaví príznak TWINT. Posledný krok sa opakuje až

pokiaľ nie je prijatý posledný byte. Po prijatí posledného bytu bude MR informovať

vysielajúce zariadenie typu „SLAVE“ (ST) vyslaním NACK. Prenos končí generovaním

podmienky „STOP“, alebo opakovaný „START“ podmienky. Podmienky „STOP“ alebo

opakovaný „START“ sú generované zápisom jednej z nasledujúcich hodnôt do registra

TWCR:

TWCR ( STOP ):

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

Hodnota 1 X 0 1 X 1 0 X

TWCR ( opakovaný START):

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

hodnota 1 X 1 0 X 1 0 X

Po podmienke opakovaný START (stav 0x10) môže zariadenie pristúpiť znova na to isté

zariadenie typu SLAVE, alebo nové zariadenie typu SLAVE bez vyslania STOP podmienky.

Opakovaný START dovoľuje teda zariadeniu typu MASTER presmerovať prenos na iné

zariadenie typu SLAVE, prípadne prepnúť sa z režimu MR na režim MT bez straty riadenia

zbernice.

Kód

stavu

(TWSR)

Stav TWI Odpoveď aplikačného programu Nasledujúca činnosť TWI

Do/z TWDR Do TWCR

STA STO TWINT TWEA

0x08 Bola vyslaná

„START

podmienka“

Load SLA+R 0 0 1 X SLA+R bude vyslané a

ACK, alebo NACK bude

prijaté.

0x10 Bola vyslaná

„pomienka

opakovaný

START“

Load

SLA+R,

príp.

SLA+W

0

0

0

0

1

1

X

X

SLA+R bude vyslané

a ACK/NACK bude prijaté.

SLA+W bude vyslané a

TWI sa prepne do MT režimu.

0x38 Proces výberu

„MASTRA“

počas SLA+R

neúspešný,

alebo NACK

bit

Žiadna

TWDR akcia

0

1

0

0

1

1

X

X

TWI sériová zbernica bude

uvoľnená a zariadenie prejde do

neadresovaného SLAVE

režimu.

Bude vyslaný „START“ po

uvolnení zbernice

0x40 Bolo vyslané

SLA+R a ACK

bolo prijaté

Žiadna

TWDR akcia

0

0

0

0

1

1

0

1

Bude prijatý údajový Byte

a vyslaný NACK.

Bude prijatý údajový Byte

a vyslaný ACK.

0x48 Bolo vyslané

SLA+R

a NACK bolo

prijaté

Žiadna

TWDR akcia

1

0

1

0

1

1

1

1

1

X

X

X

Bude vyslaný „OPAKOVANÝ

START“.

Bude vyslaný „ STOP“

a TWSTO sa vynuluje.

Bude vyslaný „STOP“ po

„START“ a TWSTO bude

nulovaný.

Page 99: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 99

0x50 Údajový Byte

bol prijatý

a bolo vyslané

ACK

Čítaj dáta 0

0

0

0

1

1

0

1

Bude prijímaný údajový byte

a vyslaný NACK.

Bude prijímaný údajový Byte

a vyslaný ACK.

0x58 Údajový Byte

bol prijatý

a bolo vyslané

NACK

Čítaj dáta 1

0

1

0

1

1

1

1

1

X

X

X

Bude vyslaný „OPAKOVANÝ

START“.

Bude vyslaný „ STOP“

a TWSTO sa vynuluje.

Bude vyslaný „STOP“ po

„START“ a TWSTO bude

nulovaný.

Tab.35 Kódy stavov TWI v režime prijímač „MASTER“, (MR)

4.4.4.3 Režim prijímač SLAVE, (SR)

V režime SR sa prijímajú dátové byty od zariadenia pracujúceho v režime MT. Na

iniciovanie režimu SR musíme registre TWAR a TWCR nastaviť nasledovne:

TWAR:

Symbol TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE

Hodnota Adr.6 Adr.0

Vyšších sedem bitov registra TWAR definuje vlastnú adresu zariadenia. Ak bit TWGCE je

nastavený na hodnotu log.1, potom zariadenie bude reagovať na všeobecnú výzvu (adr.0x00),

v opačnom prípade ju bude ignorovať.

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

Hodnota 0 1 0 0 0 1 0 X

Bit TWEN musí byť nastavený na hodnotu log.1, aby bola povolená činnosť TWI jednotky.

Bit TWEA musí byť nastavený na hodnotu log.1, aby bolo povolené potvrdenie príjmu, ak

bolo zariadenie adresované. Bity TWSTA a TWSTO musia byť nastavené na hodnotu log.0.

Keď registre TWAR a TWCR boli nastavené TWI čaká pokiaľ bude adresované vlastnou

adresou, alebo všeobecnou výzvou, ak bola povolená. Poznamenajme, že adresa je

sprevádzaná bitom riadenia smeru dát (SLA+W/R). Ak má bit riadenia smeru dát hodnotu

log.0 (W), potom TWI prejde do režimu SR, inak prejde do režimu ST. Po prijatí vlastnej

adresy sa nastaví príznak TWINT a aktuálny stavový kód do registra TWSR. Stavový kód sa

využíva na určenie odpovedajúcej akcie pomocou aplikačného programu. Popis možných

stavových kódov je uvedený v tabuľke 35.

Ak bit TWEA bude počas prenosu vynulovaný TWI informuje o tom, po prijatí

dátového bytu, zariadenie „MASTER“ vyslaním symbolu NACK prostredníctvom vodiča

SDA. Toto môže byť využité na informovanie vysielajúceho zariadenia, že „SLAVE“ nie je

schopný prijať ďalšie údaje. Pokiaľ TWEA má hodnotu log. 0 zariadenie nereaguje na príjem

vlastnej adresy. Zbernica je však neustále sledovaná a v ľubovolnom čase môžeme

nastavením TWEA pokračovať v rozpoznávaní adresy. Z uvedeného vyplýva, že TWEA bit

môžeme využívať na dočasné odpojenie TWI od dvojvodičovej sériovej zbernice.

Page 100: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 100

Vo všetkých úsporných režimoch okrem „Idle“ je hodinový signál TWI vypnutý. Ak

TWEA bit má hodnotu log.1 jednotka TWI môže potvrdiť príjem vlastnej adresy, alebo

všeobecnej výzvy. Potom zariadenie bude prechádzať do aktívneho režimu, pričom sa

pozastaví signál SCL až dokiaľ sa TWINT príznak nevynuluje. Ďalší príjem dát bude už

prebiehať normálne. Poznamenajme, že v tomto prípade môže zariadenie, ktoré bolo

adresované a prechádza do aktívneho režimu pomerne dlhú dobu blokovať dvojvodičovú

sériovú zbernicu. Pripomeňme, že pri prechode do aktívneho režimu register TWDR

neobsahuje posledný byte zo sériovej zbernice.

Kód

stavu

(TWSR)

Stav TWI Odpoveď aplikačného programu Nasledujúca činnosť TWI

Do/z TWDR Do TWCR

STA STO TWINT TWEA

0x60 Bola prijatá

vlastná SLA+W

a vyslané ACK

Žiadna

TWDR akcia

X

X

0

0

1

1

0

1

Bude prijatý údajový Byte

a NACK vyslané.

Bude prijatý údajový Byte

a ACK vyslané.

0x68 Proces výberu

„MASTRA“

pri SLA+R/W

neúspešný,

vlastná SLA+W

prijatá, vyslané

ACK

Žiadna

TWDR akcia

X

X

0

0

1

1

0

1

Bude prijatý údajový Byte

a NACK vyslané.

Bude prijatý údajový Byte

a ACK vyslané.

0x70 Prijatá

všeobecná

výzva a ACK

vyslané

Žiadna

TWDR akcia

X

X

0

0

1

1

0

1

Bude prijatý údajový Byte

a NACK vyslané.

Bude prijatý údajový Byte

a ACK vyslané.

0x78 Proces výberu

„MASTRA“

pri SLA+R/W

neúspešný,

všeobecná

výzva prijatá,

vyslané ACK

Žiadna

TWDR akcia

X

X

0

0

1

1

0

1

Bude prijatý údajový Byte

a vyslaný NACK.

Bude prijatý údajový Byte

a vyslaný ACK.

0x80 Predtým

adresované ako

SLA+W, údaje

prijaté a ACK

vyslané

Čítaj údajový

Byte

X

X

0

0

1

1

0

1

Bude prijatý údajový Byte

a vyslaný NACK.

Bude prijatý údajový Byte

a vyslaný ACK.

0x88 Predtým

adresované ako

SLA+W, údaje

prijaté a NACK

vyslané

Čítaj údajový

Byte

0

0

1

1

0

0

0

0

1

1

1

1

0

1

0

1

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

Page 101: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 101

0x90 Predtým

adresované

všeobecnou

výzvou, údaje

prijaté a ACK

vyslané

Čítaj údajový

Byte

X

X

0

0

1

1

0

1

Bude prijatý údajový Byte

a vyslaný NACK.

Bude prijatý údajový Byte

a vyslaný ACK.

0x98 Predtým

adresované

všeobecnou

výzvou, údaje

prijaté a NACK

vyslané

Čítaj údajový

Byte

0

0

1

1

0

0

0

0

1

1

1

1

0

1

0

1

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

0xa0 Bola prijatá

STOP, alebo

opak. START

podmienka

Žiadna akcia 0

0

1

1

0

0

0

0

1

1

1

1

0

1

0

1

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

Bude prepnutý do neadr.

SLAVE režimu, s rozpoznáva

SLA, príp. všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

Tab.36 Kódy stavov TWI v režime prijímač „SLAVE“, (SR)

4.4.4.4 Režim vysielač SLAVE, (ST)

V režime ST sa vysielajú dátové Byty do zariadenia pracujúceho v režime MR. Na

iniciovanie režimu ST musíme registre TWAR a TWCR nastaviť nasledovne:

TWAR:

Symbol TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE

Hodnota Adr.6 Adr.0

Vyšších sedem bitov registra TWAR definuje vlastnú adresu zariadenia. Ak bit TWGCE je

nastavený na hodnotu log.1, potom zariadenie bude reagovať na všeobecnú výzvu (adr.0x00),

v opačnom prípade ju bude ignorovať.

Page 102: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 102

TWCR:

Symbol TWINT TWEA TWSTA TWSTO TWCC TWEN - TWIE

Hodnota 0 1 0 0 0 1 0 X

Bit TWEN musí byť nastavený na hodnotu log.1, aby bola povolená činnosť TWI jednotky.

Bit TWEA musí byť nastavený na hodnotu log.1, aby bolo povolené potvrdenie príjmu, ak

bolo zariadenie adresované. Bity TWSTA a TWSTO musia byť nastavené na hodnotu log.0.

Keď registre TWAR a TWCR boli nastavené TWI čaká pokiaľ bude adresované

vlastnou adresou, alebo všeobecnou výzvou, ak bola povolená. Poznamenajme, že adresa je

sprevádzaná bitom riadenia smeru dát (SLA+W/R). Ak má bit riadenia smeru dát hodnotu

log.1 (R), potom TWI prejde do režimu ST, inak prejde do režimu SR. Po prijatí vlastnej

adresy sa nastaví príznak TWINT a aktuálny stavový kód v registri TWSR. Stavový kód sa

využíva na určenie odpovedajúcej akcie aplikačného programu. Popis možných stavových

kódov je uvedený v tabuľke 36.

Ak bit TWEA bit bude počas prenosu vynulovaný, TWI vyšle posledný byte prenosu

a prejde do stavu 0xC0, alebo 0xC8 podľa toho či prijímajúce zariadenie odpovedá NACK,

alebo ACK. Jednotka TWI sa prepne do neadresovaného SLAVE režimu a ignoruje činnosť

prijímajúceho zariadenia. Potom zariadenie MR bude prijímať sériový tok logických 1. Do

stavu 0xC8 TWI prechádza aj v prípade, ak zariadenie MT požaduje ďalšie údajové byty

(vyslaním ACK), hoci zariadenie ST už vyslalo posledný byte.

Pokiaľ TWEA má hodnotu log. 0 zariadenie nereaguje na príjem vlastnej adresy.

Zbernica je však neustále sledovaná a v ľubovolnom čase môžeme nastavením TWEA

pokračovať v rozpoznávaní adresy. Z uvedeného vyplýva, že TWEA bit môžeme využívať na

dočasné odpojenie zariadenia TWI od dvojvodičovej sériovej zbernice.

Vo všetkých úsporných režimoch okrem „Idle“ je hodinový signál TWI vypnutý. Ak

TWEA bit má hodnotu log.1 TWI môže potvrdiť príjem vlastnej adresy, alebo všeobecnej

výzvy. Potom zariadenie bude prechádzať do aktívneho režimu, pričom sa pozastaví signál

SCL až dokiaľ sa TWINT príznak nevynuluje. Ďalší prenos dát bude už prebiehať normálne.

Poznamenajme, že v tomto prípade môže zariadenie, ktoré bolo adresované a prechádza do

aktívneho režimu pomerne dlhú dobu blokovať dvojvodičovú sériovú zbernicu. Pripomeňme,

že pri prechode do aktívneho režimu register TWDR neobsahuje posledný byte zo sériovej

zbernice.

Kód

stavu

(TWSR)

Stav TWI Odpoveď aplikačného programu Nasledujúca činnosť TWI

Do/z TWDR Do TWCR

STA STO TWINT TWEA

0xA8 Bola prijatá

vlastná SLA+R

a vyslané ACK

Naplň

údajovým

Bytom

X

X

0

0

1

1

0

1

Bude vyslaný údajový Byte

a NACK prijaté.

Bude vyslaný údajový Byte

a ACK prijaté.

0xB0 Proces výberu

„MASTRA“

pri SLA+R/W

neúspešný,

vlastná SLA+R

prijatá, vyslané

ACK

Naplň

údajovým

Bytom

X

X

0

0

1

1

0

1

Bude vyslaný údajový Byte

a NACK prijaté.

Bude vyslaný údajový Byte

a ACK prijaté.

0xB8 Údajový Byte

z TWDR bol

vyslaný a ACK

prijaté

Naplň

údajovým

Bytom

X

X

0

0

1

1

0

1

Bude vyslaný údajový Byte

a NACK prijaté.

Bude vyslaný údajový Byte

a ACK prijaté.

Page 103: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 103

0xC0 Údajový Byte

z TWDR bol

vyslaný

a NACK prijaté

Žiadna

TWDR akcia

0

0

1

1

0

0

0

0

1

1

1

1

0

1

0

1

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu,

vysiela START ak sa uvoľní

zbernica.

0xC8 Posledný

údajový Byte

z TWDR bol

vyslaný,

(TWEA=0)

a ACK prijaté

Žiadne

TWDR akcia

0

0

1

1

0

0

0

0

1

1

1

1

0

1

0

1

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu.

Bude prepnutý do neadr.

SLAVE režimu, nerozpoznáva

SLA ani všeobecnú výzvu, po

uvolnení zbernice vysiela

START.

Bude prepnutý do neadr.

SLAVE režimu, rozpoznáva

SLA, príp. všeobecnú výzvu, po

uvoľnení zbernice vysiela

START.

Tab.37 Kódy stavov TWI v režime vysielač „SLAVE“, (ST)

4.4.4.5 Ďalšie stavy

Jednotka TWI môže nadobúdať ďalšie dva stavy, ktoré neodpovedajú stavom

uvedeným v predchádzajúcich tabuľkách. Je to stav 0xF8, ktorý indikuje, že nie je prístupná

žiadna relevantná informácia, pretože nebol nastavený príznak TWINT. Stav 0x00 indikuje,

že v priebehu sériovej komunikácie sa vyskytla chyba prenosu. Chyba je indikovaná

v prípade, ak v priebehu prenosu sa podmienka „START“, prípadne „STOP“ vyskytne na

neprípustnej pozícii. Ako príklad takejto neprípustnej pozície je výskyt „START/STOP“

podmienky v priebehu prenosu adresového bytu, dátového bytu, alebo bitu potvrdenia. Pri

výskyte chyby prenosu sa nastaví príznak TWINT. V tomto prípade je potrebné nastaviť bit

TWSTO a príznak TWINT vynulovať zápisom log.1.

Kód

stavu

(TWSR)

Stav TWI Odpoveď aplikačného programu Nasledujúca činnosť TWI

Do/z TWDR Do TWCR

STA STO TWINT TWEA

Page 104: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 104

0xF8 Nerelevantná

stav. informácia

(TWINT= 0)

Žiadna

TWDR akcia

Žiadna akcia Bude prebiehať aktuálny proces

0x00 Chyba zbernice Žiadna

TWDR akcia

0 1 1 X Má efekt len na interný

hardware TWI, nevysiela STOP

na zbernicu. Zbernica je

uvoľnená a TWSTO sa nuluje.

Tab.38 Ďalšie kódy stavov jednotky TWI

4.4.4.6 Kombinovanie viacerých TWI režimov

V mnohých prípadoch je pre úspešné ukončenie celej operácie prenosu dát potrebné

kombinovať viaceré TWI režimy. Ako príklad uveďme príklad čítania údajov zo sériovej

pamäte EEPROM. Uvedený príklad pozostáva z nasledujúcich štyroch krokov:

1. Inicializácia prenosu,

2. prenos adresy, ktorej obsah bude čítaný,

3. čítanie dát,

4. ukončenie prenosu.

V tomto prípade budú údaje prenášané od zariadenia typu „MASTER“ do zariadenia typu

„SLAVE“ a opačne. Najskôr zariadenie „MASTER“ musí informovať pamäť EEPROM

z ktorého pamäťového miesta sa bude čítať. Na túto činnosť musí byť zariadenie v režime

MT. Potom musia byť čítané údaje prenesené z pamäte do zariadenia „MASTER“. Zariadenie

„MASTER“ bude v režime MR. Zariadenie typu „MASTER“ musí mať kontrolu nad

zbernicou aj v prípade zmeny smeru prenosu. Žiadne ďalšie zariadenie typu „MASTER“ by

nemalo medzi vyslaním adresy a čítaním obsahu pamäte prevziať riadenie zbernice. Kontrola

nad zbernicou pri zmene smeru je zaistená vyslaním opakovanej „START“ podmienky.

Popísaný príklad je ilustrovaný na obr.43.

Obr.43 Príklad kombinácie viacerých režimov TWI

4.4.4.7 Systém s niekoľkými zariadeniami typu „MASTER“ (Multy-Master System)

Ak na jednej zbernici je pripojených viacero zariadení typu „MASTER“, je zrejmé, že

prenos môže byť súčasne iniciovaný viacerými zariadeniami. TWI štandard musí zabezpečiť,

aby len jedno zariadenie typu „MASTER“ prevzalo riadenie zbernice, pričom nesmie dôjsť ku

strate prenášaných informácií. V praktických prípadoch sa môžu vyskytnúť nasledujúce tri

situácie:

Ak dva , alebo viacero zariadení typu „MASTER“ vykonávajú identickú komunikáciu

so zariadením typu „SLAVE“, potom ani jedno zo zariadení „MASTER“ a ani žiadne ďalšie

zariadenie „SLAVE“ túto skutočnosť nerozpozná a komunikácia prebehne v poriadku.

S SLA+W A adresa A os SLA+R A dáta /A P

MT režim MR režim

S= START, os= opakovaný START, A=ACK, /A=NACK, P= STOP

Prenos MASTER -->SLAVE Prenos SLAVE -->MASTER

Page 105: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 105

Ak dva , alebo viacero zariadení typu „MASTER“ pristupujú k tomu istému

zariadeniu „SLAVE“ s rôznymi dátami, alebo bitom smeru, potom sa stretneme s procesom

výberu jedného zariadenia „MASTER“. Zariadenie, ktoré bude vysielať na vodič SDA

dvojvodičovej zbernice hodnotu log.1, pokiaľ druhé zariadenie vysiela hodnotu log.0 stratí

možnosť riadiť zbernicu. Po strate riadenia zbernice bude zariadenie prepnuté do

neadresovaného SLAVE režimu, alebo bude čakať na uvoľnenie zbernice a po jej uvoľnení

začne vysielať novú podmienku „START“.

Ak dva , alebo viacero zariadení typu „MASTER“ pristupujú k rôznym zariadeniam

typu „SLAVE“, potom proces výberu sa uskutoční už v priebehu vysielania SLA. Proces

výberu je identický s predchádzajúcim prípadom. Zariadenie, ktoré bude vysielať na vodič

SDA dvojvodičovej zbernice hodnotu log.1, pokiaľ druhé zariadenie vysiela hodnotu log.0

stratí možnosť riadiť zbernicu. Po strate riadenia zbernice bude zariadenie prepnuté do

„SLAVE“ režimu a kontroluje či nie je adresované víťazným zariadením „MASTER“. Ak je

adresované prepne sa do SR, alebo ST režimu v závislosti od hodnoty bitu smeru- (R/W). Ak

nie je adresované prepne sa do neadresovaného „SLAVE“ režimu, alebo čaká na uvoľnenie

zbernice a po jej uvoľnení vysiela novú „START“ podmienku.

4.5 ČASOVAČ/ČÍTAČ 0

Časovač/čítač 0 je tvorený modulom univerzálneho, jednokanálového 8-bitového

časovača/čítača. Jeho základné charakteristiky súnasledovné:

- jednokanálový čítač

- frekvenčný generátor

- čítač externých udalostí

- 10-bitová preddelička hodinového signálu

Bloková štruktúra 8-bitového časovača/čítača je uvedená na obr.44.

úd

ajo

zb

ern

ica

TCCRn

Riadenie

TCNTn

=0xFF

Detektor

hrán

z preddeličky

Tn

TOVn žiadosť

o prerušenie

Výber zdroja hod.

impulzov

clk

Časovač/čítač

Obr.44 8-bitový časovač/čítač

Časovač/čítač 0 (TCNT0) je 8-bitový register. Žiadosti o prerušenie sú uchované v registri

príznakov prerušení časovača (TIFR). Všetky prerušenia sú individuálne maskované pomocou

Page 106: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 106

registra masiek prerušení časovača (TIMSK). Registre TIFR a TIMSK nie sú uvedené na

obr.44, pretože sú využívané aj niektorými modulmi ďalších časovačov.

Časovač/čítač 0 môže byť budený internými obvodmi, výstupom preddeličky, alebo

externým zdrojom hodinového signálu, prostredníctvom vstupu T0. Blok výberu zdroja

hodinových impulzov určuje zdroj hodinového signálu a taktiež vyberá hranu, na ktorú má

byť obsah čítača inkrementovaný. Časovač/čítač 0 nie je aktívny, ak nie je vybraný žiadny

zdroj hodinového signálu.

Ako bolo spomenuté v predchádzajúcom texte časovač/čítač môže byť budený

interným, alebo externým zdrojom hodinového signálu. Výber zdroja zaisťuje časť, ktorá je

riadená bitmi CS02..0 v riadiacom registri TCCR0.

Základná časť časovača/čítača je programovateľná jednotka čítača. Smer počítania je

vždy nahor (t.j. inkrement). Čítač pretečie, ak jeho obsah prekročí hodnotu MAX=0xFF,

v tomto prípade sa jeho obsah (nastaví na hodnotu BOTTOM= 0x00). V normálnom režime

sa nastaví príznak prerušenia TOV0 v tom istom hodinovom cykle, v ktorom sa obsah čítača

nastaví na hodnotu BOTTOM. V tomto prípade sa príznak TOV0 správa ako deviaty bit 8-

bitového čítača. Nasledujúce časové priebehy znázorňujú činnosť čítača bez použitia

preddeličky.

clkIO

clkTn

TCNTn

TOVn

MAX-1 MAX BOTTOM BOTTOM+1

Obr.45 Časové priebehy signálov

4.5.1 Registre časovača/čítača 0

Časovač/čítač 0 využíva štyry osembitové registre. Sú to:

- riadiaci register- TCCR0,

- register časovača/čítača0- TCNT0,

- register masiek prerušení- TIMSK,

- register príznakov prerušení- TIFR.

Riadiaci register časovača/čítača 0, TCCR0

TCCR0:

Bit 7 6 5 4 3 2 1 0

Symbol - - - - - CS02 CS01 CS00

Prístup R R R R R R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Tri bity CS00, CS01 a CS00 sa používajú na výber zdroja hodinového signálu. Ich význam je

uvedený v tab.39.

Page 107: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 107

CSO2 CS01 CS00 Popis

0 0 0 Žiadny zdroj hodinového signálu, časovač/čítač je zastavený

0 0 1 ClkIO (bez preddelenia)

0 1 0 ClkIO/8 ( z preddeličky)

0 1 1 ClkIO/64

1 0 0 ClkIO/256

1 0 1 ClkIO/1024

1 1 0 Externý zdroj, vývod T0, zostupná hrana hodinových impulzov

1 1 1 Externý zdroj, vývod T0, nábežná hrana hodinových impulzov

Tab.39 Výber zdroja hodinového signálu

Register časovača/čítača, TCNT0

TCNT0:

Bit 7 6 5 4 3 2 1 0

Symbol TCNT07 . . . . . . TCNT00

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Register masiek prerušení, TIMSK

TIMSK:

Bit 7 6 5 4 3 2 1 0

Symbol OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 - TOIE0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 0 – TOIE0: povolenie prerušenia pri pretečení časovača/čítača0, Timer/Counter0

Overflow Interrupt Enable

Ak bit TOIE0 má hodnotu log.1 a súčasne je globálne povolené prerušenie (bit

I v SREG má hodnotu log.1), potom je povolené prerušenie pri pretečení TCNT0.

Register príznakov prerušenia od časovačov/čítačov, TIFR

TIFR:

Bit 7 6 5 4 3 2 1 0

Symbol OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 - TOV0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 0 – TOV0: príznak pretečenia registra TCNT0, Timer/Counter0 Overfow Flag

V prípade pretečenia registra TCNT0. sa bit TOV0 nastaví na hodnotu log.1. Bit

TOV0 je automaticky vynulovaný v priebehu realizácie obsluhy zodpovedajúceho prerušenia.

Obsah bitu TOV0 je možné tiež vynulovať zápisom log.1.

Page 108: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 108

4.5.2 Preddelička časovača/čítača0 a časovača/čítača1

Časvač/čítač0 a časovač/čítač1 zdieľajú rovnaký modul preddeličky, pričom môžu

mať rozdielne individuálne nastavenia.

Časovač/čítač môže byť budený priamo zo systémových hodín. Tento režim využíva

maximálnu hodinovú frekvenciu rovnú fCLK_IO. Ďalšie možnosti ponúka výstup preddeličky.

Sú to frekvencie fCLK_IO/8, fCLK_IO/64, fCLK_IO/256, fCLK_IO/1024. Preddelička pracuje nezávisle

na logike vlastných čítačov a slúži pre časovač/čítač0 a časovač/čítač1. V špeciálnych

prípadoch je možné na zabezpečenie synchronizácie užívateľským programom reštartovať

preddeličku.

Časovač/čítač0/1 môže byť budený aj z externého zdroja hodinového signálu

prostredníctvom vstupov T0/T1. Vstupy T0/1 sú vzorkované jeden krát počas každej periódy

systémových hodín. Takto vzorkovaný signál potom prechádza cez detektor hrán. Detektor

hrán generuje impulz na každú pozitívnu (CSn2:0=7), alebo negatívnu (CSn2:0=6) hranu.

Vstupné obvody T0/T1 sú uvedené na obr. 46.

Tn D DQ Q

LE

D Q

Clk IO

synchronizáciadetekcia

hrán

Obr.46 Vstupné obvody T0/T1

Synchronizačné obvody a detektor hrán spôsobuje oneskorenie 2.5 až 3.5 periód systémových

hodín medzi výskytom hrany na vstupe Tn a zmenou hodnoty príslušného čítača. Pre

zabezpečenie korektného vzorkovania musí byť každá polperióda externých hodín (na vstupe

Tn) dlhšia než perióda systémových hodín.

Page 109: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 109

10-bitová preddeličkaclk

IO

CS10

CS11

CS12

CS00

CS01

CS02

PSR10

T0

T1

synchronizácia

clear

Ck/8

Ck/64

Ck/256

Ck/1024

0 0

Zdroj hodinového signálu

clk

Zdroj hodinového signálu

clkT1 T0

Obr.47 Obvody preddeličky

4.4.5 V/V register špeciálnych funkcií SFIOR

SFIOR:

Bit 7 6 5 4 3 2 1 0

Symbol - - - - ACME PUD PSR2 PSR10

Prístup R R R R R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 0 – PSR10: Reštart preddeličky TCNT1 a TCNT2, Prescaler Reset TCNT1 a TCNT2 Zápisom log.1 do bitu PSR10 sa reštaruje preddelička. Bit PSR10 sa po vykonaní

operácie reštart automaticky vynuluje.

4.6 16-BITOVÝ ČASOVAČ/ČÍTAČ1

16-bitový časovač/čítač umožňuje užívateľovi časovať vykonávanie programu,

realizovať generátor priebehov, maranie časových parametrov signálov a pod.. Jeho základné

charakteristiky sú nasledovné:

- 16-bitová štruktúra

- dve nezávislé porovnávacie jednotky

- výstupné porovnávacie registre s pomocným registrom

- vstupnú záchytnú jednotku

- jednotku na potlačenie šumu

- automatické nulovanie časovača pri zhode

- fázovo korektná PWM

- možnosť voľby periódy PWM

- frekvenčný generátor

- čítač externých udalostí

Page 110: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 110

- štyri nezávislé zdroje prerušenia (TOV1, OCF1A, OCF1B, ICF1)

Bloková schéma časovača/čítača1 je uvedená na obr.48.

riadeniedetekcia

hránTn

z preddeličky

TOVn prerušenie

výber zdroja hodín

clkTn

TCNTn

časovač/čítač

smer

nulovanie

počítanie

= =0

TOP

BOTTOM

=

OCRnA

=

OCRnB

ICRn

TCCRnA TCCRnB

W

generátorOCnA

OCFnA, pož. o

prerušenie

hodnota

TOP

W

generátor

OCFnB

OCnB

Detekcia

hán

ICFn

Potlačenie

šumu

ICPn

z ana.komp.

úd

ajo

zb

ern

ica

Obr.48 Bloková schéma 16-bitového časovača/čítača

Registre TCNT1, OCR1A/B a ICR1 sú 16-bitové registre. Registre TCCR1A/B sú 8-bitové

registre. Všetky žiadosti o prerušenie sú prístupné v registri príznakov prerušení časovača

TIFR. Všetky prerušenia sú individuálne maskované pomocou maskovacieho registra

TIMSK. Registre TIFR a TIMSK nie sú na obr.48 znázornené, pretože ich využívajú aj iné

moduly MCU. Časovač/čítač1 môže byť budený interne, prostredníctvom preddeličky,

prípadne externým zdrojom, prostredníctvom vstupu T1. Blok výberu zdroja hodín určuje

príslušný zdroj a aktívnu hranu hodinových impulzov. Výstup z bloku výberu hodín je

označený ak clkT1.

Hodnota výstupných porovnávacích registrov OCR1A/B je nepretržite porovnávaná

s obsahom časovača/čítača1. Výsledok porovnania môže byť využitý na generovanie

signálov, alebo PWM na výstupe OC1A/B. Zhoda obsahov registrov TCNT1 a OCR1A/B

môže byť využitá na generovanie žiadosti o prerušenie.

Pomocou vstupného záchytného registra ICR1 môže byť zapamätaný obsah TCNT1

v okamžiku výskytu definovanej udalosti na vstupe ICP1, prípadne na vstupoch analógového

komparátora. Blok potlačenia šumu znižuje riziko výskytu neželateľných signálov, ktoré

môžu byť generované vonkajším šumom.

Maximálna hodnota časovača/čítača môže byť v niektorých režimoch definovaná

pomocou registrov OCR1A, ICR1, alebo pevne nastavenou hodnotou.

Definície hodnôt TOP, BOOTOM a MAX sú uvedené v tab.40.

Page 111: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 111

Označenie Popis

BOTTOM Po dosiahnutí tejto hodnoty čítač prechádza na hodnotu 0x0000

MAX 0xFFFF

TOP TOP hodnote môže byť priradená jedna z nasledujúcich pevných hodnôt

(0x00FF, 0x01FF, 0x03FF), alebo hodnota uchovaná v registroch OCR1A,

prípadne ICR1. Priradenie závisí na zvolenom režime.

Tab.40 Popis hodnôt BOTTOM, MAX a TOP

16-bitové registre TCNT1, OCR1A/B a ICR1 sú pre CPU prístupné prostredníctvom

8-bitovej údajovej zbernice. Z toho vyplýva, že prístup k 16-bitovým registrom je realizovaný

prostredníctvom dvojnásobného čítania/zápisu 8-bitových hodnôt. 16-bitový časovač má

priradený jeden pomocný 8-bitový register na dočasné uchovanie vyššieho bytu dát. Tento

dočasný register využívajú viaceré 16-bitové registre na prechodné uchovanie dát. Ak

zapisujeme údaje do 16-bitového registra najskôr sa zapíše vyšší byte, ktorý sa uloží do

dočasného registra. Pri následnom zapisovaní nižšieho bytu sa v tom istom hodinovom cykle

obsah dočasného registra kopíruje do vyššieho bytu 16-bitového registra. Ak čítame nižší byte

16-bitového registra v tom istom čase sa automaticky kopíruje obsah vyššieho bytu do

pomocného registra. Poznamenajme, že nie všetky 16-bitové registre využívajú pomocný

register. Pri čítaní obsahu registrov OCR1A/B sa pomocný register nevyužíva.

Z uvedeného vyplýva, že v prípade 16-bitového zápisu musí byť vyšší byt zapísaný

pred nižším. V prípade čítania nižší byt musí byť čítaný ako prvý.

Základnou časťou 16-bitového časovača/čítača je jednotka programovateľného

obojsmerného čítača. Na obr.49 je uvedená bloková štruktúra.

TCNT1H TCNT1L

TCNT1 16 bitový čítač

TEMP 8bit

Údajová zbernica

RiadenieT1Detekt.

hrany

Z preddeličky

clkT1

TOV1

počítaj

nuluj

smer

TOP BOTTOM

výber zdroja hod.

impulzov

Obr.49 Bloková schéma jednotky čítača

V priebehu popisu činnosti časovača/čítača1 budú použité nasledovné označenia signálov:

- POČÍTAJ: Inkrementovanie, alebo dekrementovanie obsahu TCTN1.

- SMER: Výber medzi inkrementovaním a dekrementovaním obsahu TCTN1.

- NULUJ: Nulovanie obsahu TCTN1 (nastavenie obsahu na hodnotu 0x0000).

- clkT1: Hodinový signál časovača/čítača1.

- TOP: Signalizácia že TCTN1 dosiahol maximálnu hodnotu.

- BOTTOM: Signalizácia že TCTN1 dosiahol minimálnu hodnotu.

Page 112: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 112

16-bitový čítač je mapovaný do dvoch 8-bitových registrov vo V/V pamäťovom

priestore. Vyšší register TCNT1H obsahuje horných 8 bitov čítača. Nižší register TCNT1L

obsahuje spodných 8 bitov čítača. Keď CPU pristupuje na TCNT1H V/V pamäťovú lokáciu,

tak nepristupuje priamo k TCNT1H, ale k pomocnému registru TEMP. Obsah pomocného

registra TEMP je obnovovaný (napĺňaný aktuálnou hodnotou TCTN1H) vždy, keď čítame

obsah registra TCNT1L. Obsah registra TCTN1H je obnovovaný (napĺňaný aktuálnou

hodnotou z TEMP) vždy, keď sa vykonáva zápis do registra TCTN1L. Tento mechanizmus

dovoľuje CPU zapisovať/čítať obsah 16-bitového registra v jednom hodinovom cykle.

V závislosti od použitej operácie môže byť obsah čítača nulovaný, inkrementovaný,

alebo dekrementovaný v jednom hodinovom cykle clkT1. Hodinový signál clkT1 môže byť

generovaný interným, alebo externým hodinovým zdrojom. Ak nie je vybraný zdroj

hodinového signálu čítač sa zastaví.

Časovač/čítač spolupracuje so vstupnou záchytnou jednotkou. Pri výskyte definovanej

externej udalosti sa môže zapamätať aktuálny obsah čítača. Externý signál indikujúci výskyt

udalosti je privedený na vstup ICP1, alebo na jednotku analógového komparátora. Bloková

schéma vstupnej záchytnej jednotky je uvedená na obr.50. Ak sa vyskytne definovaná udalosť

( na vstupe ICP1, prípadne na analógovom komparátore ) po jej vyhodnotení v detektore hrán

bude iniciovaný zápis obsahu TCNT1 do záchytného registra ICR1. Príznak výskytu udalosti

ICF1 sa v tom istom hodinovom cykle nastaví na hodnotu log.1. Ak je povolené prerušenie

(TICIE = log.1), potom sa generuje aj žiadosť o prerušenie. Príznak ICF1 sa automaticky

vynuluje počas výkonu obsluhy prerušenia. Taktiež je možné príznak ICF1 vynulovať

zápisom log.1.

ICR1H ICR1L

ICR1 16 bit register

TCNT1H TCNT1L

TCNT1 16-bit register

TEMP

Údajová zbernica

ICP1

ACO+

-

ACIC

Obmedz.

šumuDetekt.hrán

ICNC ICES

ICF1

WR

Obr.50 Vstupná záchytná jednotka

Pri čítaní obsahu vstupného záchytného registra ICR1 sa prvý číta dolný byt ICR1L a potom

horný byt ICR1H. Pri čítaní dolného bytu sa obsah horného ICR1H prepíše do pomocného

registra TEMP. Potom, pri čítaní horného bytu CPU pristupuje k pomocnému registru TEMP.

Page 113: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 113

V prípade, že pracujeme v režime „Generátora priebehov“ (nastavené bity WGM 13:0),

potom do registra ICR1 môže CPU aj zapisovať. V tomto prípade musí byť obsah registra

ICR1H zapísaný ako prvý, t.j. pred zápisom do registra ICR1L.

Ako základný zdroj signálov pre vstupnú záchytnú jednotku slúži vstupný záchytný

vývod mikrokontroléra ICP1. Alternatívne môže byť pre túto funkciu využitý aj analógový

komparátor. Výber analógového komparátora definujeme nastavením bitu ACIC v riadiacom

a stavovom registri analógového komparátora ACSR na hodnotu log.1. Obidva vstupy, ICP1

a ACO sú spracovávané obdobne ako vstup T1, popísaný vyššie.

Obvody potláčania šumu zvyšujú šumovú imunitu. Vstupný signál do obvodov

potláčania šumu je vzorkovaný počas 4 periód hodinnového signálu. Všetky štyri vzorky

musia mať rovnakú hodnotu, aby bola príslušná zmena vyslaná do detektora hrán. Povolenie

činnosti obvodov potláčania šumu je realizované nastavením bitu ICNC1 v registri TCCR1B

na hodnotu log.1. Je zrejmé, že ak činnosť obvodov potláčania šumu je povolená, potom je

potrebné rátať s doplnkovým oneskorením štyroch periód systémových hodín.

Základná výhoda použitia vstupnej záchytnej jednotky spočíva v znížení zaťaženia

procesora pri sledovaní externých udalostí.

Blok časovača/čítača1 obsahuje aj výstupné porovnávacie jednotky. 16-bitový

komparátor priebežne porovnáva obsah TCNT1 s obsahom výstupných porovnávacích

registrov OCR1x. Ak sa obsah TCNT1 rovná obsahu OCR1x, komparátor generuje signál

zhody. Tento signál nastaví v nasledujúcom hodinovom cykle výstupný porovnávací príznak

OCF1x. Ak je povolené prerušenie (OCIE1x = 1), potom nastavenie porovnávacieho

príznaku súčasne generuje aj žiadosť o obsluhu prerušenia. Príznak OCF1x sa automaticky

vynuluje v priebehu obsluhy prerušenia. Príznak OCF1x môže byť vynulovaný aj zápisom

log.1. Generátor priebehov (PWM) taktiež využíva signál zhody v súlade so zvoleným

režimom (WGM13:0) a výstupným porovnávacím režimom (COM1x1:0). Na obr.51 je

uvedená bloková štruktúra výstupnej porovnávacej jednotky.

Page 114: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 114

údajová zbernica

TEMP (8 BIT)

OCRnxH (8 bit) OCRnxL (8 bit)

OCRnx buffer (16-bitový register)

TCNTnH (8 bit) TCNTnL (8 bit)

TCNTn (16-bitový čítač)

OCRnxH (8 bit) OCRnxL (8 bit)

OCRnx (16bitový register)

= 16-bitový komparátor

Generátor priebehov OCnxTOP

BOTTOM

WGMn3:0 COMnx1:0

OCFnx

žiadosť o prer.

Obr.51 Výstupná porovnávacia jednotka

Register OCR1x je dvojnásobný. Takto je možné synchrónne meniť obsah OCR1x

porovnávacieho registra. Ak je povolený režim dvojnásobného pamätania, potom má CPU

prístup do OCR1x vyrovnávacieho registra. V opačnom prípade pri zakázanom

dvojnásobnom pamätaní CPU pristupuje priamo k registrom OCR1x. Obsah registrov OCR1x

(vyrovnávací, alebo priamo register) môže byť zmenený len operáciou zápisu. Zápis do

registrov OCR1x je realizovaný pomocou pomocného registra TEMP. Z toho vyplýva, že

vyšší byt musí byť zapísaný ako prvý. Uloží sa do pomocného registra TEMP a pri zápise

dolného bytu sa obsah TEMP prepíše v tom istom hodinovom cykle do registra OCR1xH.

Ak výstupná porovnávacia jednotka nie je v režime PWM, potom pri zhode obsahov

TCTN1 a OCR1x výstup 16-bitového komparátora môže byť zmenený zápisom log.1 do bitu

FOC1x. Toto prepísanie výstupu nemá za následok nastavenie príznaku OCF1x, ale

vynuluje/nastaví obsah časovača a zmení hodnotu výstupu OC1x v súlade s nastavením bitov

COM1x1:0.

Zápis do registra TCNT1 blokuje v nasledujúcom hodinovom cykle výstup

komparátora. Táto vlastnosť umožňuje nastaviť porovnávací register OCR1x na rovnakú

hodnotu ako má TCTN1 bez vyvolania prerušenia. Uvedená vlastnosťmá aj nasledujúce

dôsledky. Ak meníme obsah TCNT1 a používame výstupné porovnávacie kanály, potom ak

zapíšeme do TCNT1 rovnakú hodnotu ako je v OCR1x, tak bude ignorovaný signál

oznamujúci zhodu obsahov. Dôsledkom bude, že na výstupe generátora dostaneme

nekorektné výsledky. Z toho vyplýva, že v PWM režimoch s premennou hodnotou TOP by

sme nemali zapisovať hodnotu TOP do TCNT1, pretože signál zhody bude ignorovaný a čítač

Page 115: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 115

bude pokračovať až do hodnoty 0xFFFF. Podobne nie je vhodné zapisovať do TCTN1

hodnotu BOTTOM pri počítaní smerom nadol.

Bity COM1x1:0 majú dve funkcie. Generátor priebehov ich využíva na definovanie

stavu na OC1x pri nasledujúcej zhode. Bity COM1x1:0 tiež určujú aký zdroj bude pripojený

na výstup mikrokontroléra OC1x. Táto skutočnosť je ilustrovaná na obr.52.

Generátor

priebehov

1

COMnx1

COMnx0

FOCnx

D Q

D Q

D Q

OCnx

PORT

úd

ajo

zb

ern

ica

clk IO

OCnx

1

0

Obr.52 Výstupné obvody porovnávacej jednotky

Výstup OC1x bude prepísaný výstupom generátora priebehov, ak aspoň jeden z bitov

COM1x1:0 je nastavený na hodnotu log.1, pričom smer vývodu (vstup/výstup) OC1x je

riadený obsahom príslušného bitu v registri DDR. Z tohoto dôvodu je potrebné nastaviť aj

príslušný bit v registri DDR tak, aby vývod OC1x bol konfigurovaný ako výstup.

Generátor priebehov využíva bity COM1x1:0 rozdielne v normálnom, CTC a PWM

režime.

Režim činnosti časovača/čítača je určený kombináciou režimu generátora priebehov (

bity WGM13:0) a výstupného porovnávacieho režimu (bity COM1x1:0).

Najjednoduchší režim činnosti je „normálny režim“ (WGM13:0 = 0). V normálnom

režime je smer počítania TCNT1 nastavený smerom nahor (inkrement). Čítač pri počítaní

nahor jednoducho dosiahne hodnotu MAX = 0xFFFF a pri jej prekročení začína od hodnoty

BOTTOM = 0x0000. V tomto režime sa príznak pretečenia TOV1 nastaví v tom istom

hodinovom cykle, keď čítač dosiahne hodnotu 0x0000.

Režim „CTC“ (Clear Timer on Compare) (WGM13:0 = 4, alebo12) je

charakterizovaný tým, že obsah čítača TCTN1 je vynulovaný ak jeho hodnota dosiahne

hodnotu uloženú v OCR1A (WGM13:0 = 4), alebo ICR1 (WGM13:0 = 12). Hdnota

v OCR1A, alebo ICR1 udáva TOP, najvyššiu hodnotu čítača. V tomto režime sa obsah čítača

TCNT1 inkrementuje až dosiahne hodnotu uloženú v OCR1A, alebo ICR1, potom sa obsah

čítača vynuluje. Obr.53 znázorňuje správanie sa čítača v režime CTC.

Page 116: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 116

OC1A

zmena úrovne

TCNT1

(COM1A1:0=1)

perióda 1 2 3

Obr.53 Režim CTC

Žiadosť o prerušenie (príznaky OCF1A, alebo ICF1) môže byť generovaná vždy, keď obsah

čítača dosiahne hodnotu TOP definovanú obsahom OCR1A, alebo ICR1. Ak je prerušenie

povolené, potom v rámci obslužnej rutiny môže byť zmenená príslušná hodnota TOP.

V tomto prípade je potrebné si uvedomiť, že ak nová hodnota TOP je blízko hodnoty

BOTTOM a čítač je budený rýchlym hodinovým signálom, potom môže obsah TCNT1 do

okamžiku zápisu presiahnuť túto novú TOP hodnotu. V tomto prípade čítač bude pokračovať

vo zvyšovaní obsahu až po hodnotu 0xFFFF a znova pokračuje od hodnoty 0x0000. Pri

generovaní priebehov v CTC režime výstup OC1A môže byť nastavený na zmenu log.

úrovne, potom každá zhoda obsahov spôsobí zmenu logickej úrovne na vývode OC1A. Ak

OCR1 je nastavený na hodnotu 0x0000 potom maximálna dosiahnuteľná frekvencia na

výstupe je rovná fclkIO/2,. Frekvencia signálu na výstupe OC1A je daná vzťahom:

)11(2

1AOCRN

ff clkIO

AOC

,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

Tak ako v normálnom režime i v režime CTC sa príznak TOV1 nastaví v tom istom

hodinovom cykle, v ktorom TCTN1 nadobúda hodnotu 0x0000.

Režim „ rýchla PWM“ (Fast Pulse Width Modulation), (WGM13:0 = 5, 6, 7 14, alebo

15) generuje impulzný šírkovo modulovaný signál. V tomto režime sa obsah čítača zvyšuje od

hodnoty BOTTOM do hodnoty TOP, naplní sa hodnotou BOTTOM a pokračuje vo zvyšovaní

svojej hodnoty. V neinvertujúcom výstupnom porovnávacom režime výstup OC1x sa nastaví

pri zhode obsahov čítača TCNT1a OCR1x a vynuluje sa pri dosiahnutí hodnoty TOP. Pri

invertujúcom režime pracuje obrátene. Rýchla PWM je dva razy rýchlejšia než fázovo

korektná, prípadne fázovo a frekvenčne korektná PWM.

Rozlíšenie rýchlej PWM môže byť pevné, 8, 9, alebo 10 bitov, prípadne definované

obsahom ICR1, alebo OCR1A. Minimálne povolené rozlíšenie je 2 bity (ICR1, alebo OCR1A

je nastavené na hodnotu 0x0003). Maximálne rozlíšenie je 16 bitov (ICR1, alebo OCR1A je

nastavené na hodnotu MAX). Rozlíšenie PWM je dané nasledujúcim vzťahom:

)2log(

)1log(

TOPRFPWM

Page 117: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 117

V režime rýchlej PWM sa čítač inkrementuje pokiaľ jeho hodnota nenadobudne jednu

z definovaných hodnôt 0x00FF, 0x01FF, alebo 0x03FF (WGM13:0 = 5, 6, alebo 7), hodnotu

v ICR1 (WGM13:0 = 14), alebo hodnotu v OCR1A (WGM13:0 = 15). V nasledujúcom

hodinovom cykle po dosiahnutí definovanej hodnoty sa jeho obsah vynuluje. Na obr.54 je

znázornená činnosť časovača/čítača v režime rýchlej PWM.

TCNT1

OC1x

COM11:0=2

OC1x

COM11:0=3

Nastavenie

hodnoty

TOP

prerušenie

na TOP

Obr.54 Režim rýchlej PWM

Priebehy výstupu OC1x a /OC1x na obr.54 znázorňujú neinvertujúcu a invertujúcu PWM.

Malé horizontálne úsečky na priebehu TCNT1 znázorňujú obsah porovnávacích registrov

OCR1x a súčasne definujú časové okamžiky, v ktorých je dosiahnutá zhoda s obsahom

TCNT1. Príznak pretečenia sa nastaví, keď obsah čítača dosiahne hodnotu TOP. Ak jeden

z registrov OCR1A, alebo ICR1 sa využíva pre definovanie hodnoty TOP, potom sa súčasne

nastaví aj príznak OCF1A, alebo ICF1. Ak je obsluha prerušenia povolená, potom pomocou

obslužného programu prerušenia môžeme zmeniť hodnotu TOP, prípadne porovnávaciu

hodnotu.

Ak v obslužnom programe meníme hodnotu TOP je potrebné zaistiť aby nová hodnota TOP

bola vyššia než hodnoty v porovnávacích registroch. Poznamenajme, že register ICR1 nie je

dvojnásobný, preto pri menení jeho hodnoty je potrebné postupovať opatrne. Pri použití

registra ICR1 na definovanie TOP hodnoty je vhodné, keď sa v priebehu činnosti PWM TOP

hodnota nemení. Ak sa základná frekvencia PWM v priebehu činnosti mení je vhodnejšie na

definovanie hodnoty TOP používať register OCR1A. Frekvenciu PWM môžeme určiť na

základe nasledujúceho vzťahu:

)1(

1TOPN

ff clkIO

xPWMOC

,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

V režime fázovo korektnej PWM (WGM13:0 = 1,2,3,10, alebo 11) sa na

definovanom výstupe OC1x generuje fázovo korektný PWM signál. V tomto režime sa

hodnota čítača zvyšuje (inkrementuje) od hodnoty BOTTOM (0x0000) až po hodnotu TOP

a potom sa následne dekrementuje po hodnotu BOTTOM. V neinvertujúcom výstupnom

porovnávacom režime je výstup OC1x vynulovaný v prípade rovnosti obsahov TCNT1

a OCR1x pri počítaní smerom nahor a nastavuje sa pri počítaní smerom nadol.

V invertujúcom režime je situácia opačná. Maximálna dosiahnuteľná základná frekvencia

Page 118: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 118

fázovo korektnej PWM je nižšia než pri rýchlej PWM. Tento režim je často používaný pri

riadení motorov. Rozlíšenie PWM je pevné 8, 9, alebo 10 bitov, prípadne definované

obsahom registrov ICR1, alebo OCR1A. Najmenšie použiteľné rozlíšenie je 2 bity (ICR1,

alebo OCR1A) je nastavené na hodnotu 0x0003). Maximálne rozlíšenie je 16 bitov (ICR1,

alebo OCR1A je nastavené na hodnotu MAX). Rozlíšenie PWM je dané nasledujúcim

vzťahom:

)2log(

)1log(

TOPRPCPWM

V režime fázovo korektnej PWM je obsah čítača inkrementovaný až do okamžiku, pokiaľ

nedosiahne jednu z pevne nastavených hodnôt 0x00FF, 0x01FF, alebo 0x03FF (WGM13:0 =

1, 2, alebo 3), prípadne hodnotu uloženú v ICR1 (WGM13:0 = 10), alebo hodnotu v OCR1A

(WGM13:0 = 11). Po dosiahnutí definovanej hodnoty sa mení smer čítača. Obsah čítača bude

práve jeden hodinový cyklus rovný hodnote TOP. Na obr.55 je znázornená činnosť

časovača/čítača v režime fázovo korektnej PWM.

TCNT1

OC1x

COM11:0=2

Nastav príznak

prerušenia

TOV1,

prerušenie na

BOTTOM

Nastavenie

hodnoty TOP

prerušenie na

TOP

Obr.55 Režim fázovo korektnej PWM

Malé horizontálne úsečky na hranách signálu TCNT1 znázorňujú obsah porovnávacieho

registra OCR1x a súčasne definujú časové okamžiky, v ktorých je dosiahnutá zhoda

s obsahom TCNT1. Príznak prerušenia OC1x sa nastaví pri dosiahnutí zhody obsahov OCR1x

a TCNT1. Príznak pretečenia TOV1 sa nastaví vždy, keď čítač dosiahne hodnotu BOTTOM.

Ak jeden z registrov OCR1A, alebo ICR1 sa využíva pre definovanie hodnoty TOP, potom sa

súčasne nastaví aj príznak OCF1A, alebo ICF1. Príznaky prerušenia sa môžu využiť na

generovanie prerušení vždy, keď obsah čítača dosiahne hodnotu TOP, alebo BOTTOM. Pri

definovaní novej TOP hodnoty je potrebné zabezpečiť, aby bola väčšia, alebo rovná než

hodnoty v porovnávacích registroch. Frekvenciu fázovo korektnej PWM môžeme určiť na

základe nasledujúceho vzťahu:

NTOP

ff clkIO

xPWMOC2

1 ,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

V režime fázovo a frekvenčne korektnej PWM (WGM13:0 = 8, alebo 9) sa na definovanom

výstupe OC1x generuje fázovo korektný PWM signál. V tomto režime sa hodnota čítača

inkrementuje od hodnoty BOTTOM (0x0000) až po hodnotu TOP a potom sa následne

dekrementuje po hodnotu BOTTOM. V neinvertujúcom výstupnom porovnávacom režime je

pri počítaní smerom nahor výstup OC1x nulovaný v prípade rovnosti obsahov TCNT1

Page 119: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 119

a OCR1x. Nastavuje sa v okamžiku zhody, pri počítaní smerom nadol. V invertujúcom režime

je situácia opačná. Maximálna dosiahnuteľná základná frekvencia fázovo a frekvenčne

korektnej PWM je nižšia než pri rýchlej PWM. Tento režim je často používaný pri riadení

motorov. Rozlíšenie PWM je definované obsahom registrov ICR1, alebo OCR1A. Najmenšie

použiteľné rozlíšenie je 2 bity. Vtedy je ICR1, alebo OCR1A nastavené na hodnotu 0x0003.

Maximálne rozlíšenie je 16 bitov, ak ICR1, alebo OCR1A je nastavené na hodnotu MAX.

Rozlíšenie PWM je dané nasledujúcim vzťahom:

)2log(

)1log(

TOPRPFCPWM

V režime fázovo a frekvenčne korektnej PWM je obsah čítača inkrementovaný až do

okamžiku, v ktorom nedosiahne jednu z hodnôt nastavených v registri ICR1 (WGM13:0 = 8),

alebo v registri OCR1A (WGM13:0 = 9). Ak čítač dosiahne hodnotu TOP zmení smer

počítania. Obsah čítača bude rovný hodnote TOP práve jeden hodinový cyklus. Na obr.56 je

znázornená činnosť časovača/čítača v režime fázovo a frekvenčne korektnej PWM.

TCNT1

OC1x

COM11:0=2

Update TOP

Nastav príznak

prerušenia

TOV1,

prerušenie na

BOTTOM

prušenie na

TOP

Obr.56 Režim fázovo a frekvenčne korektnej PWM

Na obr.56 je na definovanie hodnoty TOP použitý register OCR1A, alebo ICR1. Príznak

OC1A, alebo ICF1 sa nastaví, keď obsah TCTN1 dosiahne hodnotu TOP. Príznaky prerušenia

môžu byť využité na generovanie prerušení v časových okamžikoch, v ktorých obsah TCNT1

dosiahne hodnotu TOP, alebo BOTTOM. Frekvenciu fázovo a frekvenčne korektnej PWM

môžeme určiť na základe nasledujúceho vzťahu:

NTOP

ff clkIO

xPWMOC2

1 ,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

Priebehy na obr.57 znázorňujú nastavenie príznaku OCF1x. Čítač využíva

preddeličku, fclkTn = fclkIO/8.

Page 120: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 120

clk

clk

IO

Tn

TCNT1 OCR1x - 1 OCR1x OCR1x + 1

hodnota OCR1xOCR1x

OCF1x

Obr.57 Časové priebehy časovač/čítač1

Na obr.58 sú znázornené časové postupnosti časovača/čítača1 v rôznych režimoch.

clk

clk

IO

Tn

TOP-1 TOP BOTTOM

TOP - 1 TOP TOP - 1

BOTTOM

+ 1

stará hodnota OCR1x nová hodnota OCR1xOCR1x

update na TOP

TOV1 a

ICF1

TCNT1

(PC a PFC PWM)

TCNT1

(CTC a FPWM)

Obr.58 Časové priebehy čítač/časovač v režimoch (CTC, FPWM, PC PWM a PFC PWM)

4.6.1 Popis registrov

Riadiaci register A časovača/čítača 1, TCCR1A

TCCR1A

Bit 7 6 5 4 3 2 1 0

Symbol COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

Prístup R R R R R R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bity 6:7 - COM1A1:0: Výstupný porovnávací režim pre kanál A, Compare Output

Mode for channel A

Bity 5: 4 - COM1B1:0: Výstupný porovnávací režim pre kanál B, Compare Output

Mode for channel B

Page 121: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 121

Pomocou obsahu bitov COM1A1:0, prípadne COM1B1:0 je určené správanie výstupu OC1A,

prípadne OC1B. Tabuľka 41 popisuje funkciu bitov COM1x1:0 za predpokladu, že bity

WGM13:0 sú nastavené tak, aby časovač/čítač pracoval v normálnom režime, alebo v režime

CTC ( nie v režimoch PWM).

COM1A1/

COM1B1

COM1A0/

COM1B0

Popis

0 0 Normálna V/V funkcia, OC1A/OC1B odpojené

0 1 Zmena výstupu OC1A/OC1B na zhodu pri porovnávaní

1 0 Nulovanie (nízka úroveň) OC1A/OC1B na zhodu pri

porovnávaní

1 1 Nastavenie (vysoká úroveň) OC1A/OC1B na zhodu pri

porovnávaní

Tab.41 Porovnávací výstupný režim

Tabuľka 42 popisuje funkciu bitov COM1x1:0 za predpokladu, že bity WGM13:0 sú

nastavené tak, aby časovač/čítač pracoval v režime rýchlej PWM.

COM1A1/

COM1B1

COM1A0/

COM1B0

Popis

0 0 Normálna V/V funkcia, OC1A/OC1B odpojené

0 1 WGM13:0 =15, zmena výstupu OC1A pri zhode, výstup OC1B

je odpojený (normálna V/V funkcia). Pri iných nastaveniach

WGM1 je OC1A/OC1B odpojené.

1 0 Nulovanie (nízka úroveň) OC1A/OC1B na zhodu, nastavenie

OC1A/OC1B pri dosiahnutí hodnoty TOP.

1 1 Nastavenie (vysoká úroveň) OC1A/OC1B na zhodu, nulovanie

OC1A/OC1B pri dosiahnutí hodnoty TOP.

Tab.42 Porovnávací výstupný režim v režime rýchlej PWM

Tabuľka 43 popisuje funkciu bitov COM1x1:0 za predpokladu, že bity WGM13:0 sú

nastavené tak, aby časovač/čítač pracoval v režime fázovo korektnej a fázovo a frekvenčne

korektnej PWM.

COM1A1/

COM1B1

COM1A0/

COM1B0

Popis

0 0 Normálna V/V funkcia, OC1A/OC1B odpojené

0 1 WGM13:0 =9, alebo14, zmena výstupu OC1A pri zhode, výstup

OC1B je odpojený (normálna V/V funkcia). Pri iných

nastaveniach WGM1 je OC1A/OC1B odpojené.

1 0 Nulovanie (nízka úroveň) OC1A/OC1B na zhodu pri zvyšovaní

obsahu TCNT1, nastavenie OC1A/OC1B na zhodu pri znižovaní

obsahu TCNT1.

1 1 Nastavenie (vysoká úroveň) OC1A/OC1B na zhodu pri

zvyšovaní obsahu TCNT1, nulovanie OC1A/OC1B na zhodu pri

znižovaní obsahu TCNT1.

Page 122: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 122

Tab.43 Porovnávací výstupný režim v režime fázovo korektnej a fázovo a frekvenčne

korektnej PWM

Bit 3 – FOC1A: Vnútenie výstupu porovnania na kanál A, Force Output Compare for

channel A

Bit 2 – FOC1B: Vnútenie výstupu porovnania na kanál B, Force Output Compare for

channel B

Bity FOC1A/FOC1B sú aktívne len v normálnom a CTC režime, nie v PWM

režimoch. V režimoch PWM musia byť nastavené na hodnotu log.0. Ak v FOC1A/FOC1B

bitoch je zapísaná logická 1, potom výstupom porovnávacej jednotky je priamo ovládaný

generátor priebehov.

Bit 1:0 – WGM11:0: Režim generovania priebehov, Waveform Generation Mode

Bity WGM11:0 spolu s bitmi WGM13:2 v registri TCCR1B riadia počítacie sekvencie

čítača, určujú zdroj pre hodnotu TOP a typ generovania priebehov. Režimy činnosti

časovača/čítača sú nasledovné:

Normálny režim (čítač),

nulovanie čítača na zhodu pri porovnaní (CTC režim),

tri režimy PWM (rýchla, fázovo korektná a frekvenčne a fázovo korektná).

Tabuľka 44 popisuje jednotlivé režimy.

Rež. WGM

13

WGM12

(CTC1)

WGM11

(PWM11)

WGM10

(PWM10)

Režim činnosti

Č/Č

TOP Prepis

OCR1x

TOV1

nastavenie

na

0 0 0 0 0 Normálny 0xFFFF Hneď MAX

1 0 0 0 1 PWM, fáz.

korektný, 8-bit

0x00FF TOP BOTTOM

2 0 0 1 0 PWM, fáz.

korektný, 9-bit

0x01FF TOP BOTTOM

3 0 0 1 1 PWM, fáz.

korektný, 10-bit

0x03FF TOP BOTTOM

4 0 1 0 0 CTC OCR1A Hneď MAX

5 0 1 0 1 PWM rýchla, 8-bit 0x00FF TOP TOP

6 0 1 1 0 PWM rýchla, 9-bit 0x01FF TOP TOP

7 0 1 1 1 PWM rýchla, 10-bit 0x03FF TOP TOP

8 1 0 0 0 PWM fázovo a

frekvenčne korekt.

ICR1 BOTT. BOOTOM

9 1 0 0 1 PWM fázovo a

frekvenčne korekt.

OCR1A BOTT. BOTTOM

10 1 0 1 0 PWM fázovo

korektná

ICR1 TOP BOTTOM

11 1 0 1 1 PWM fázovo

korektná

OCR1A TOP BOTTOM

12 1 1 0 0 CTC ICR1 Hneď MAX

13 - - - - Nevyužité - - -

14 1 1 1 0 PWM rýchla ICR1 TOP TOP

15 1 1 1 1 PWM rýchla OCR1A TOP TOP

Tab.44 Režimy generovania priebehov

Riadiaci register B časovača/čítača 1, TCCR1B

Page 123: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 123

TCCR1B:

Bit 7 6 5 4 3 2 1 0

Symbol ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10

Prístup R/W R/W R R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 7 - ICNC1: Potlačenie šumu na záchytnom vstupe, Input Capture Noise Canceler

Nastavením bitu ICNC1 na hodnotu log.1 sa aktivuje blok potlačenia šumu na

záchytnom vstupe ICP1. Funkcia filtrácie vyžaduje na zmenu výstupnej hodnoty štyri

rovnaké, po sebe idúce vzorky vstupného signálu na vstupe ICP1. Blok potlačenia šumu

spôsobuje oneskorenie signálu o 4 periódy hodinového signálu.

Bit 6 - ICES1: Voľba hrany signálu na záchytnom vstupe, Input Capture Edge Select

Pomocou bitu ICES1 je možné zvoliť aktívnu hranu signálu na vstupe ICP1. Ak bit

ICES1 obsahuje hodnotu log.0, potom je aktívna zostupná hrana signálu. Ak bit ICES1

obsahuje hodnotu log.1, potom je aktívna nábežná hrana signálu. Keď sa na vstupe ICP1

objaví vybraná hrana signálu, potom aktuálna hodnota čítača sa prepíše do záchytného

registra ICR1 a súčasne sa nastaví príznak ICF1. Ak je register ICR1 využívaný na

definovanie hodnoty TOP, potom je vstup ICP1 odpojený.

Bit 5 - : Nevyužitý (rezervovaný) bit

Bit 4 - WGM13:2: Režim generovania priebehov, Waveform Generation Mode

Popis bitov je uvedený vyššie, v tabuľke 43.

Bit 2:0 - CS12:0: Voľba hodinového signálu, Clock Select

Pomocou bitov CS12:0 je možné zvoliť zdroj hodinového signálu pre vstup

časovača/čítača podľa tabuľky 45.

CS12 CS11 CS10 Popis

0 0 0 Nie je vybraný žiadny zdroj hodinového signálu (STOP)

0 0 1 clkIO

0 1 0 ClkIO/8 ( výstup preddeličky)

0 1 1 ClkIO/64 ( výstup preddeličky)

1 0 0 ClkIO/256 ( výstup preddeličky)

1 0 1 ClkIO/1024 ( výstup preddeličky)

1 1 0 Externý vstup na vývode T1, záverná hrana signálu

1 1 1 Externý vstup na vývode T1, nábežná hrana signálu

Tab.45 Výber zdroja hodinového signálu

Ak je zvolený externý zdroj, potom aj v prípade, že vývod T1 je konfigurovaný ako výstup

definovaná zmena jeho hodnoty, bude interpretovaná ako vstupný hodinový signál. Táto

vlastnosť dovoľuje programové riadenie zvyšovania/znižovania obsahu čítača.

Časovač/čítač1 – TCNT1H a TCNT1L

TCNT1:

Page 124: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 124

Bit 7 6 5 4 3 2 1 0

Symbol TCTN1 15:8 (TCTN1H)

Symbol TCTN1 7:0 (TCTN1L)

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Dve V/V pamäťové miesta (TCTN1L a TCTN1H) ponúkajú možnosť čítať/zapisovať obsah

16-bitového čítača TCNT1. Aby bolo možné obsah čítača čítať/zapisovať simultánne je

prístup do časti TCNT1H realizovaný prostredníctvom pomocného 8-bitového registra

TEMP. Poznamenajme, že tento pomocný register využívajú aj ďalšie 16-bitové registre

v bloku čítača/časovača1.

Výstupný porovnávací register 1A – OCR1AH a OCR1AL

OCR1A

Bit 7 6 5 4 3 2 1 0

Symbol OCR1A 15:8 (OCR1AH)

Symbol OCR1A 7:0 (OCR1AL)

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Výstupný porovnávací register 1B – OCR1BH a OCR1AL

OCR1B:

Bit 7 6 5 4 3 2 1 0

Symbol OCR1B 15:8 (OCR1BH)

Symbol OCR1B 7:0 (OCR1BL)

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Výstupné porovnávacie registre obsahujú hodnoty, ktoré sú priebežne porovnávané

s obsahom čítača TCNT1. Zhoda obsahov môže byť využitá na generovanie žiadosti

o prerušenie, prípadne v procese generovania priebehov na výstupe OC1x. Na zaistenie

simultánneho prístupu k obom 8-bitovým registrom ( OCR1BL a OCR1BH) sa využíva

pomocný register TEMP.

Vstupný záchytný register 1 – ICR1H a ICR1L

ICR1:

Bit 7 6 5 4 3 2 1 0

Symbol ICR1 15:8 (ICR1H)

Symbol ICR1 7:0 (ICR1L)

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

Page 125: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 125

P. hod. 0 0 0 0 0 0 0 0

Obsah vstupného záchytného registra je obnovovaný (prepisovaný) obsahom TCNT1 vždy, ak

sa na vstupe ICP1, alebo na analógovom komparátore vyskytne definovaná udalosť. Register

ICR1 môže byť tiež využitý na definovanie hodnoty TOP. Na zaistenie simultánneho prístupu

k obom 8-bitovým registrom ( OCR1BL a OCR1BH) sa využíva pomocný register TEMP.

Maskovací register prerušení od časovača/čítača, TIMSK

TIMSK:

Bit 7 6 5 4 3 2 1 0

Symbol OCIE2 TOIE2 TICE1 OCIE1A OCIE1B TOIE1 - TOIE0

Prístup R/W R/W R/W R/W R/W R/W R R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 5 - TICE1: Povolenie prerušenia od vstupnej záchytnej udalosti, Input Capture

Interrupt Enable

Ak bit TICE1 je nastavený na hodnotu log.1, potom v prípade, že aj bit I v stavovom

registri je nastavený na hodnotu log.1 (globálne povolenie prerušení), je povolené prerušenie

pri výskyte udalosti, ktorá spôsobí prepis obsahu TCTN1 do ICR1.

Bit 4 - OCIE1A: Povolenie prerušenia na zhodu obsahov TCTN1 a OCR1A,

Timer/Counter1, Output Compare A Match Interrupt Enable

Ak bit OCIE1A je nastavený na hodnotu log.1, potom v prípade že sú globálne

povolené prerušenia, je povolené prerušenie pri zhode obsahu časovača/čítača1 s obsahom

výstupného porovnávacieho registra OCR1A.

Bit 3 - OCIE1B: Povolenie prerušenia na zhodu obsahov TCTN1 a OCR1B,

Timer/Counter1, Output Compare B Match Interrupt Enable

Ak bit OCIE1B je nastavený na hodnotu log.1 a sú globálne povolené prerušenia,

potom je povolené prerušenie pri zhode obsahu časovača/čítača1 s obsahom výstupného

porovnávacieho registra OCR1B.

Bit 2 - TOIE1: Povolenie prerušenia pri pretečení TCTN1, Overflow Interrupt Enable

Ak bit TOIE1 je nastavený na hodnotu log.1 a súčasne sú globálne povolené

prerušenia, potom je povolené prerušenie pri pretečení časovača/čítača1.

Register príznakov prerušení od časovača/čítača1, TIFR

TIFR:

Bit 7 6 5 4 3 2 1 0

Symbol OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 - TOV0

Prístup R/W R/W R/W R/W R/W R/W R R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 5 - ICF1: Časovač/čítač1, vstupný záchytný príznak, Timer/Counter1,Input Capture

Flag

Page 126: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 126

Bit ICF1 sa nastaví na hodnotu log.1 pri výskyte definovanej udalosti na vstupe ICP1.

Ak je register ICR1 využitý na definovanie hodnoty TOP, príznak ICF1 sa nastaví na hodnotu

log.1 vtedy, keď obsah čítača dosiahne hodnotu TOP. Bit ICF1 je automaticky vynulovaný pri

výkone odpovedajúcej, alebo zápisom hodnoty log.1.

Bit 4 - OCF1A: Časovač/čítač1, príznak zhody obsahov TCTN1 a OCR1A,

Timer/Counter1, Output Compare A Match Flag

Bit OCF1A sa nastaví na hodnotu log.1 v hodinovom cykle po dosiahnutí rovnosti

obsahov registrov TCNT1 a OCR1A. Bit OCF1A sa automaticky vynuluje pri výkone

odpovedajúcej prerušovacej rutiny, alebo zápisom hodnoty log.1.

Bit 3 - OCF1B: Časovač/čítač1, príznak zhody obsahov TCTN1 a OCR1B,

Timer/Counter1, Output Compare B Match Flag

Bit OCF1B sa nastaví na hodnotu log.1 v hodinovom cykle po dosiahnutí rovnosti

obsahov registrov TCNT1 a OCR1B. Bit OCF1B sa automaticky vynuluje pri výkone

odpovedajúcej prerušovacej rutiny, alebo zápisom hodnoty log.1.

Bit 2 - TOV1: Časovač/čítač1, príznak pretečenia, Timer/Counter1, Overflow Flag

V normálnom a CTC režime sa bit TOV1 nastaví na hodnotu log.1 pri pretečení čítača.

Správanie sa príznaku TOV1 v iných režimoch bolo uvedené v tab.43. Bit TOV1 sa

automaticky vynuluje pri výkone odpovedajúcej prerušovacej rutiny, alebo zápisom hodnoty

log.1.

4.7 8-BITOVÝ ČASOVAČ/ČÍTAČ2

Časovač/čítač2 je univerzálna jednotka jednokanálového 8-bitového časovača/čítača.

Jeho základné charakteristiky sú nasledovné:

- jednokanálový čítač

- automatické nulovanie časovača pri zhode

- fázovo korektná PWM

- frekvenčný generátor

- 10-bitová preddelička hodinového signálu

- dva nezávislé zdroje prerušenia (TOV2 a OCF2)

- môže byť budený z generátora s externým kryštálom 32 kHz nezávisle na hodinovom

signále clkIO

Page 127: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 127

Bloková schéma časovača/čítača2 je uvedená na obr.59

Obr.59 Bloková schéma 8-bitového časovača/čítača

Registre TCNT2 OCR2 sú 8-bitové registre. Všetky príznaky žiadostí o prerušenie sú

prístupné v registri príznakov prerušení časovača TIFR. Všetky prerušenia sú individuálne

maskované pomocou maskovacieho registra TIMSK. Registre TIFR a TIMSK nie sú na

obr.54 znázornené, pretože ich využívajú aj iné moduly MCU.

Časovač/čítač2 môže byť budený interne, prostredníctvom preddeličky, alebo

asynchrónne, prostredníctvom vývodov TOSC1/2. Asynchrónna činnosť je riadená

prostredníctvom asynchrónneho stavového registra (ASSR). Blok výberu hodinového signálu

určuje zdroj hodinového signálu pre inkrementáciu/dekrementáciu obsahu časovača/čítača.

Ak nie je vybraný žiadny zdroj hodinového signálu, potom časovač/čítač nie je aktívny.

Hodnota výstupného porovnávacieho registra OCR2 je nepretržite porovnávaná

s obsahom časovača/čítača2. Výsledok porovnania môže byť využitý na generovanie PWM

na výstupe OC2. Zhoda obsahov registrov TCNT2 a OCR2 nastaví príznak OCF2 a môže byť

využitá na generovanie žiadosti o prerušenie.

Definície hodnôt TOP, BOOTOM a MAX ,ktoré budú používané v nasledujúcom texte sú

uvedené v tab.46.

Označenie Popis

úda

jová

zb

ern

ica

TCCRn

Riadiace obvody

TOVn

TCNTn

smer

nulovanie

počítaj

TOPpreddelička

clk Tn

T/C

OSC

TOSC1

TOSC2

časovač/čítač

=

=0 =0xFF

BOTTOM

generátor

priebehov

OCn

OCn

clk I/O

OCRn

synchronizačná

jednotka

clkI/O

clkASY

ASSRn

synchron.

stavový príznak

výber asynchr.

režim u (ASn)stavové

príznaky

Page 128: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 128

BOTTOM Po dosiahnutí tejto hodnoty čítač prechádza na hodnotu 0x00

MAX 0xFF

TOP TOP hodnote môže byť priradená pevná hodnota 0xFF, alebo hodnota uchovaná

v registri OCR2. Priradenie závisí na zvolenom režime činnosti.

Tab.46 Popis hodnôt BOTTOM, MAX a TOP

Časovač/čítač môže byť budený interným synchrónnym zdrojom hodinového signálu,

alebo z externého asynchrónneho zdroja. Zdroj hodinového signálu clkT2 je totožný

s hodinovým signálom MCU clkI/O. V prípade, ak bit AS2 v registri ASSR obsahuje log.1,

potom ako zdroj hodinových impulzov bude využitý externý oscilátor, vývody TOSC1

a TOSC2.

Základnou časťou 8-bitového časovača/čítača je programovateľná obojsmerná

jednotka čítača. Na obr.60 je uvedená bloková schéma čítača a jeho pomocných obvodov.

Popis signálov:

nulovanie vynuluje obsah TCNT2

počítanie inkrementuje, alebo dekrementuje obsah TCNT2

smer vyberá medzi funkciou dekrementu, alebo inkrementu obsahu

clkT2 hodinový signál TCNT2

TOP signalizuje že obsah TCNT2 dosiahol maximálnu hodnotu

BOTTOM signalizuje že obsah TCNT2 dosiahol minimálnu hodnotu

Obr.60 Bloková schéma 8-bitového čítača

V závislosti na zvolenom režime činnosti je obsah čítača v každej perióde hodinového signálu

clkT2 vynulovaný, inkrementovaný, alebo dekrementovaný. Signál clkT2 môže byť generovaný

interným, alebo externým zdrojom. Výber zdroja hodinového signálu je realizovaný pomocou

bitov CS22:0. Ak nie je vybraný žiadny zdroj hodinového signálu (CS22:0=0) časovač bude

zastavený. Obsah časovača TCNT2 je pre CPU prístupný aj v prípade zastavenia časovača.

Proces počítania je definovaný obsahom bitov WGM21 a WGM20 v registri TCCR2.

Príznak pretečenia časovača/čítača TOV2 sa nastavuje v súlade s režimom činnosti,

ktorý je určený obsahom bitov WGM21:0. Príznak TOV2 sa môže využiť na generovanie

žiadosti o prerušenie CPU.

Modul časovača/čítača2 obsahuje výstupnú porovnávaciu jednotku. Jej súčasťou je 8-

bitový komparátor, ktorý priebežne porovnáva obsah TCNT2 s výstupným porovnávacím

registrom OCR2. Ak obsah TCNT2 je zhodný s obsahom OCR2 komparátor signalizuje

zhodu. Táto zhoda obsahov spôsobí v nasledujúcom hodinovom cykle nastavenie (log.1)

TCNT2riadiaca

logika

počítanie

nulovanie

smer

TOV2údajová zbernica

preddelička

T/C

OSC

TOSC1

TOSC2

BOTTOM TOPclk

I/O

clkT2

Page 129: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 129

výstupného porovnávacieho príznaku OCF2. V prípade že je povolené zodpovedajúce

prerušenie (OCIE2=1) nastavenie príznaku vyvolá prerušenie CPU. Príznak OCF2 sa

automaticky vynuluje v priebehu obsluhy prerušenia, prípadne príznak OCF2 je možné

vynulovať programovo zápisom hodnoty log.1 do príslušného bitu jeho V/V lokácie.

Generátor priebbehov využíva signál zhody na generovanie výstupu v súlade s nastaveným

režimom činnosti - bity WGM21:0 a s výstupným porovnávacím režimom - bity COM21:0.

Na obr.61 je bloková schéma výstupnej porovnávacej jednotky.

Obr.61 Výstupná porovnávacie jednotka

V prípade režimov PWM je register OCR2 zálohovaný. V režimoch CTC nie je zálohovanie

registra OCR2 povolené. Zálohovanie registra OCR2 umožňuje synchronizáciu prepisovania

obsahu porovnávacieho registra OCR2 pri dosiahnutí TOP, alebo BOTTOM hodnoty. Ak je

povolené zálohovanie OCR2, potom CPU pristupuje k vyrovnávaciemu registru. V opačnom

prípade pristupuje priamo k OCR2.

Ak jednotka časovača/čítača nepracuje v režimoch PWM, potom výstup komparátora

môže byť prepísaný zápisom logickej jednotky do bitu FOC2. Toto prepísanie výstup

nespôsobí nastavenie príznaku OCF2, ale vyvolá prepísanie/vynulovanie obsahu časovača

Výstup OC2 sa bude správať tak, ako keby skutočne došlo k zhode obsahov porovnávacieho

registra a časovača.

Pri operácii zápisu do registra TCNT2 je blokovaný signál zhody obsahov

v nasledujúcej perióde hodinového signálu clkT2. Táto vlastnosť umožňuje pri zastavenom

čítači naplniť register OCR2 tou istou hodnotou ako je v TCNT2 bez vyvolania prerušenia po

povolení hodinového signálu do časovača/čítača.

Ak v ľubovolnom režime činnosti zapisujeme do registra TCNT2 bude v priebehu

nasledujúceho hodinového cyklu blokovaný signál zhody obsahov. Z toho dôvodu, ak

využívame výstupný porovnávací kanál počas činnosti čítača a súčasne sa mení obsah TCNT2

údajová zbernica

OCR2 TCNT2

8-bitový komparátor

generátor priebehov

OCF2

TOP

BOTTOM

FOC2

WGM21:0 COM21:0

OC

Page 130: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 130

môže dôjsť k strate signálu zhody. Ak je hodnota zapísaná do TCNT2 rovná hodnote OCR2

bude blokovaný signál zhody, čoho dôsledkom je nekorektná činnosť generátora priebehov.

Jednoduchšie povedané nie je vhodné pri počítaní nadol zapisovať do TCNT2 hodnotu rovnú

BOTTOM.

Bity definujúce porovnávací výstupný režim majú dve funkcie. Generátor priebehov

využíva bity COM21:0 na definovanie stavu na výstupe OC2 pri výskyte nasledujúcej zhody.

Pomocou bitov COM21:0 je tiež možné voliť zdroj signálu pre výstup OC2, obr.62.

Obr.62 Výstupné obvody porovnávacej jednotky

Všeobecná vstupno/výstupná funkcia vývodu OC2 je pri vhodnej voľbe COM21:0 nahradená

výstupom D-preklápacieho OC2, pričom smer vývodu OC2 je riadený výstupom registra

DDR. Z tohto dôvodu je potrebné nastaviť vývod OC2 na výstupný režim. Toto riešenie

výstupných obvodov vývodu OC2 dovoľuje nastaviť stav OC2 pred vlastným povolením

výstupného režimu vývodu OC2.

Režim činnosti časovača/čítača je určený kombináciou režimu generátora priebehov

(bity WGM21:0) a výstupného porovnávacieho režimu (bity COM21:0).

Najjednoduchší režim činnosti je „normálny režim“ (WGM21:0 = 0). V normálnom

režime je smer počítania TCNT1 vždy smerom nahor (inkrement). Čítač pri počítaní nahor

jednoducho dosiahne hodnotu TOP = 0xFF a pri jej prekročení začína od hodnoty BOTTOM

= 0x00. V tomto režime sa príznak pretečenia TOV2 nastaví v tom istom hodinovom cykle, v

ktorom čítač nadobudne hodnotu 0x00. Príznak TOV2 sa v tomto prípade správa ako 9-ty bit .

Režim „CTC“ (Clear Timer on Compare), (WGM21:0 = 2) je charakterizovaný tým,

že obsah čítača TCTN2 je vynulovaný ak jeho hodnota dosiahne hodnotu obsahu uloženú v

generátor

priebehovFOC2

COM20

COM21

D Q

OC2

1

0OC2

D Q

PORT

D Q

DDR

clk I/O

úda

jová

zb

ern

ica

Page 131: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 131

registri OCR2. Obsah registra OCR2 definuje TOP hodnotu čítača. Obr.63 znázorňuje

správanie sa čítača v režime CTC.

Obr.63 Režim CTC

Žiadosť o prerušenie (nastavenie príznaku OCF2) môže byť generovaná vždy, keď obsah

čítača dosiahne hodnotu TOP. Ak je povolené prerušenie v obslužnej rutine môžeme zmeniť

príslušnú hodnotu TOP. V tomto prípade je potrebné si uvedomiť, že ak nová hodnota TOP je

blízko hodnoty BOTTOM a čítač je budený hodinovým signálov s vysokou frekvenciou môže

obsah TCNT2 do okamžiku zápisu presiahnuť túto novú TOP hodnotu. Potom čítač pokračuje

v inkrementovaní obsahu až po hodnotu 0xFF a znova pokračuje od hodnoty 0x00. Pri

generovaní priebehov v CTC režime a ak je výstup OC2 nastavený na zmenu log. úrovne,

potom každá zhoda obsahov spôsobí zmenu logickej úrovne na vývode OC2. Ak register

OCR2 je nastavený na hodnotu 0x00, potom maximálna dosiahnuteľná frekvencia na výstupe

OC2 je rovná fclkI/O/2,. Frekvencia signálu na výstupe OC2 je daná vzťahom:

)21(2

2OCRN

ff clkIOOC

,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

Tak, ako v normálnom režime aj v režime CTC sa príznak TOV2 nastaví v tom istom

hodinovom cykle, v ktorom TCTN2 nadobúda hodnotu 0x00.

Režim „ rýchla PWM“ (Fast Pulse Width Modulation), (WGM1:0 = 3) generuje

impulzný šírkovo modulovaný signál. V tomto režime sa obsah čítača zvyšuje od hodnoty

BOTTOM do hodnoty TOP, potom sa naplní hodnotou BOTTOM a pokračuje vo zvyšovaní

svojej hodnoty. V neinvertujúcom výstupnom porovnávacom režime je výstup OC2

vynulovaný pri zhode obsahov čítača TCNT2 a OCR2 a nastaví sa na hodnotu jedna pri

dosiahnutí hodnoty BOTTOM. Pri invertujúcom režime výstup OC2 pracuje obrátene. Rýchla

PWM je dva razy rýchlejšia než fázovo korektná, prípadne fázovo a frekvenčne korektná

PWM.

V režime rýchlej PWM obsah čítača je inkrementovaný až pokiaľ nedosiahne hodnotu MAX.

V nasledujúcej perióde hodinového signálu je čítač TCNT2 vynulovaný. Časové priebehy

v režime rýchlej PWM sú uvedené na obr.63. Horizontálne úsečky na priebehu TCNT2

reprezentujú zhodu obsahov TCNT2 a OCR2.

nastavenie príznaku OC2

TCNT2

OC2

zmena(COM21:0=1)

perióda 1 2 3 4

Page 132: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 132

Obr. 63 Časové priebehy signálov v režime rýchlej PWM

Príznak pretečenia časovača/čítača (TOV2) sa nastaví vždy, keď čítač dosiahne hodnotu

MAX. Ak je povolené prerušenie, potom v obslužnej rutine prerušenia je možné meniť

porovnávaciu hodnotu. V režime rýchlej PWM porovnávacia jednotka umožňuje na výstupe

OC2 generovať šírkovo modulovaný signál. Nastavením bitov COM21:0 na hodnotu 2

dostaneme neinvertujúcu PWM. Inverzný PWM výstup dostaneme, ak bity COM21:0

nastavíme na hodnotu 3. Poznamenajme, že vývod OC2 musí byť nastavený do výstupného

režimu.

Frekvenciu PWM môžeme určiť na základe nasledujúceho vzťahu:

)1(

1TOPN

ff clkIO

xPWMOC

,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

V režime fázovo korektnej PWM (WGM21:0 = 1) sa na výstupe OC2 generuje

fázovo korektný PWM signál. V tomto režime sa hodnota čítača zvyšuje (inkrementuje) od

hodnoty BOTTOM až po hodnotu MAX a potom sa následne dekrementuje po hodnotu

BOTTOM. V neinvertujúcom výstupnom porovnávacom režime výstup OC2 je nulovaný

v prípade rovnosti obsahov TCNT2 a OCR2 pri počítaní smerom nahor a nastavuje sa

v prípade zhody pri počítaní smerom nadol. V invertujúcom režime je situácia opačná.

Maximálna dosiahnuteľná základná frekvencia fázovo korektnej PWM je nižšia než pri

rýchlej PWM. Tento režim je často používaný pri riadení motorov. Rozlíšenie PWM je pevné-

8 bitov.

V režime fázovo korektnej PWM je obsah čítača inkrementovaný až do okamžiku, v ktorom

nedosiahne hodnotu MAX. Po dosiahnutí definovanej hodnoty MAX sa mení smer čítača.

Obsah čítača bude rovný hodnote MAX práve jeden hodinový cyklus. Na obr.65 je

znázornená činnosť časovača/čítača v režime fázovo korektnej PWM.

OC2 (COM21:0=3)

(COM21:0=2)OC2

obnovenie obsahu OCR2 a nastavenie príznaku TOV2

nastavenie príznaku OCR2

TCNT2

perióda1 2 3 4 5 6 7

Page 133: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 133

Obr.65 Režim fázovo korektnej PWM

Malé horizontálne úsečky na hranách signálu TCNT2 znázorňujú obsah porovnávacieho

registra OCR2 a definujú časové okamžiky, v ktorých sa dosiahne jeho zhoda s obsahom

TCNT2. Príznak pretečenia TOV2 sa nastaví, keď čítač dosiahne hodnotu BOTTOM.

Príznak prerušenia sa môže využiť na generovanie prerušenia v čase, keď obsah čítača

dosiahne hodnotu BOTTOM. Frekvenciu fázovo korektnej PWM môžeme určiť na základe

nasledujúceho vzťahu:

510

/2

N

ff OclkI

PCPWMOC ,

kde N je koeficient vyjadrujúci nastavenie preddeličky (1, 8, 64, 256, alebo 1024).

Na nasledujúcich obrázkoch je znázornená činnosť časovača/čítača v synchrónnom

režime.

Obr.66 Časové priebehy TCNT2 bez preddeličky

TCTN2

OC2

OC2

COM21:0=2

COM21:0=3

nastavenie TOV2

zmena OCR2

nastavenie OC2

1 2 3perióda

MAX-1 MAX BOTTOM BOTTOM+1

clk I/O

clkT2

(clk /1)I/O

TCNT2

TOV2

Page 134: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 134

Obr.67 Časové priebehy TCNT2 s preddeličkou, N=8

Obr.68 Časové priebehy časovača/čítača

Obr.69 Časové priebehy, časovač/čítač v režime CTC

MAX-1 MAX BOTTOM BOTTOM

+1

TOV2

TCNT2

clkT2

clkI/O

OCR2-1 OCR2 OCR2+1 OCR2+2

OCR2

TCNT2

clkT2

clkI/O

hodnota OCR2

OCF2

TOP-1 TOP BOTTOM BOTTOM

+1

OCR2

TCNT2

clkT2

clkI/O

TOP

OCF2

(CTC)

Page 135: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 135

4.7.1 Popis registrov

Riadiaci register časovača/čítača 2, TCCR2

TCCR2:

Bit 7 6 5 4 3 2 1 0

Symbol FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

Prístup W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 7 - FOC2:Výstup porovnávacieho obvodu, Force Output Compare

Bit FOC2 je aktívny len ak obsah bitov WGM nedefinuje režim PWM. Z hľadiska

zaručenia kompatibility s budúcimi MCU do bitu FOC2 zapisujeme hodnotu logická nula ak

jednotka jev režime PWM. Ak zapíšeme do bitu FOC2 hodnotu jedna je výsledok porovnania

vnútený do jednotky generátora priebehov. Výstup OC2 sa potom mení v súlade s nastavením

bitov COM21:0. Bit FOC2 negeneruje žiadosť o prerušenie, ale nuluje časovač v režime

CTC, pričom sa obsah registra OCR2 využíva ako hodnota TOP. Pri čítaní bitu FOC2 vždy

prečítame nulu.

Bity 6: 3 - WGM21:0: Režim generátora priebehov, Waveform Generator Mode Pomocou obsahu bitov WGM21:0 je možné riadiť smer čítača, určovať zdroj pre

uchovanie hodnoty TOP a typ generátora priebehov. Možné režimy činnosti časovača/čítača

sú:

normálny režim,

nulovanie čítača pri zhode (CTC) režim,

dva typy impulznej šírkovej modulácie.

Jednotlivé režimy činnosti sú uvedené v tabuľke 47.

Režim WGM21

(CTC)

WGM20

(PWM2)

Režim činnosti

TCNT2

TOP Zmena

OCR2

Nastavenie

prízn. TOV2

0 0 0 Normálny 0xFF Ihneď MAX

1 0 1 PWMn fáz. korektná 0xFF TOP BOTTOM

2 1 0 CTC OCR2 Ihneď MAX

3 1 1 Rýchla PWM 0xFF TOP MAX

Tab.47 Režimy činnosti TCNT2

Bity 5:4 – COM21:0: Výstupný porovnávací režim, Compare Match Output Mode

Pomocou obsahu bitov COM21:0 sa riadi správanie výstupného porovnávacieho

vývodu OC2. Ak aspoň jeden z bitov COM21:0 obsahuje logickú jednotku, potom na vývod

OC2 je pripojený zdroj signálu podľa tab.48. Popis uvedený v tabuľke 48 platí v prípade, ak

bity WGM21:0 sú nastavené tak, aby definovali normálny, alebo CTC režim.

COM21 COM20 Popis

0 0 Normálna V/V funkcia, OC2 odpojené

0 1 Zmena výstupu OC2 na zhodu pri porovnávaní

1 0 Nulovanie (nízka úroveň) OC2 na zhodu pri porovnávaní

1 1 Nastavenie (vysoká úroveň) OC2 na zhodu pri porovnávaní

Page 136: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 136

Tab.48 Porovnávací výstupný režim v normálnom, alebo CTC režime

Tabuľka 49 popisuje funkciu bitov COM21:0 za predpokladu, že bity WGM21:0 sú nastavené

tak, aby časovač/čítač pracoval v režime rýchlej PWM.

COM21 COM20 Popis

0 0 Normálna V/V funkcia, OC2 odpojené

0 1 Nevyužité

1 0 Nulovanie OC2 na zhodu, nastavenie OC2 pri dosiahnutí hodnoty

TOP.

1 1 Nastavenie OC2 na zhodu, nulovanie OC2 pri dosiahnutí hodnoty

TOP.

Tab.49 Porovnávací výstupný režim v režime rýchlej PWM

Tabuľka 50 popisuje funkciu bitov COM21:0 za predpokladu, že bity WGM21:0 sú nastavené

tak, aby časovač/čítač pracoval v režime fázovo korektnej PWM.

COM21 COM20 Popis

0 0 Normálna V/V funkcia, OC2 odpojené

0 1 Nevyužité

1 0 Nulovanie OC2 na zhodu pri zvyšovaní obsahu TCNT2,

nastavenie OC2 na zhodu pri znižovaní obsahu TCNT2.

1 1 Nastavenie OC2 na zhodu pri zvyšovaní obsahu TCNT2,

nulovanie OC2 na zhodu pri znižovaní obsahu TCNT2.

Tab.50 Porovnávací výstupný režim v režime fázovo korektnej PWM

Bity 2:0 – CS22:0: výber zdroja hodinového signálu, Clock Select

Tieto tri bity určujú zdroj hodinového signálu pre časovač/čítač 2, podľa tabuľky 51.

CS12 CS11 CS10 Popis

0 0 0 Nie je vybraný žiadny zdroj hodinového signálu (STOP)

0 0 1 ClkT2S

0 1 0 ClkT2S/8 ( výstup preddeličky)

0 1 1 ClkT2S/32 ( výstup preddeličky)

1 0 0 ClkT2S/64 ( výstup preddeličky)

1 0 1 ClkT2S/128 ( výstup preddeličky)

1 1 0 ClkT2S/256 ( výstup preddeličky)

1 1 1 ClkT2S/1024 ( výstup preddeličky)

Tab.51 Výber zdroja hodinového signálu

Časovač/čítač2 – TCNT2

TCNT2:

Bit 7 6 5 4 3 2 1 0

Page 137: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 137

Symbol TCTN2 7:0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Register časovača/čítača umožňuje zapisovať a čítať obsah časovača/čítača 2. Zápis do

registra TCNT2 blokuje v nasledujúcej perióde hodín operáciu porovnania. Preto pri zmene

obsahu registra TCNT2 počas činnosti čítača sa stretávame s rizikom straty zhody obsahov

TCNT2 a OCR2.

Výstupný porovnávací register – OCR2

OCR2:

Bit 7 6 5 4 3 2 1 0

Symbol OCR2 7:0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Výstupný porovnávací register obsahuje 8-bitovú hodnotu, ktorá je priebežne porovnávaná

s obsahom čítača TCNT2. Zhoda obsahov môže byť využitá na generovanie žiadosti

o prerušenie, prípadne v procese generovania PWM signálu na výstupe OC2.

4.7.2 Asynchrónna činnosť časovača/čítača 2

Asynchrónny stavový register, ASSR

ASSR:

Bit 7 6 5 4 3 2 1 0

Symbol - - - - AS2 TCN2UB OCR2UB TCR2UB

Prístup R R R R R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 3- AS2: Asynchrónny časovač/čítač, Asynchronous Timer/Counter2

Ak bit AS2 obsahuje hodnotu log.0, potom časovač/čítač2 je budený zo zdroja V/V

hodinových impulzov, clkI/O . Ak bit AS2 obsahuje hodnotu log.1, potom časovač/čítač2 je

budený z generátora hodinových impulzov s externým kryštálovým rezonátorom.

Poznamenjme, že pri zmene hodnoty bitu AS2 môže dôjsť k zničeniu obsahu registrov

TCNT2, OCR2 a TCCR2.

Bit 2- TCN2UB: Register TCNT2 zaneprázdnený, Timer/Counter2 Update Busy

V prípade ak časovač/čítač2 pracuje v asynchrónnom režime, potom pri zápise do

registra TCNT2 sa bit TCNT2UB nastaví na hodnotu log.1. Keď obsah registra TCNT2 je

prepísaný z vyrovnávacieho registra bit TCNT2UB sa automaticky vynuluje. Je zrejmé, že

logická nula v tomto bite indikuje, že register TCNT2 je pripravený na zápis novej hodnoty.

Page 138: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 138

Bit 1- OCR2UB: Register OCR2 zaneprázdnený, Output Compare Register2 Update

Busy

V prípade ak časovač/čítač2 pracuje v asynchrónnom režime, potom pri zápise do

registra OCR2 sa bit OCR2UB nastaví na hodnotu log.1. Keď obsah registra OCR2 je

prepísaný z vyrovnávacieho registra, bit OCR2UB sa automaticky vynuluje. Je zrejmé, že

logická nula v tomto bite indikuje, že register OCR2 je pripravený na zápis novej hodnoty.

Bit 0- TCR2UB: Riadiaci register TCCR2 zaneprázdnený, Timer/Counter Control

Register2 Update Busy

V prípade ak časovač/čítač2 pracuje v asynchrónnom režime, potom pri zápise do

registra TCCR2 sa bit TCR2UB nastaví na hodnotu log.1. Keď obsah registra TCCR2 je

prepísaný z vyrovnávacieho registra, bit TCR2UB sa automaticky vynuluje. Je zrejmé, že

logická nula v tomto bite indikuje, že register TCCR2 je pripravený na zápis novej hodnoty.

Ak vykonávame zápis do ľubovolného z uvedených troch registrov časovača/čítača2

pokiaľ je príslušný bit zaneprázdnenia nastavený na logickú jednotku, môže byť nová hodnota

zničená a spôsobiť výskyt neopodstatneného prerušenia.

Poznamenajme, že pri čítaní obsahu registra TCNT2 prečítame aktuálnu hodnotu

časovača, pričom pri čítaní obsahu registrov OCR2 a TCCR2 prečítame hodnotu

z vyrovnávacieho registra.

Pri asynchrónnej činnosti časovača/čítača2 musíme dodržiavať nasledujúce

podmienky:

- Keď meníme zdroj budiaceho hodinového signálu časovača/čítača2 (zmena medzi

asynchrónnou a synchrónnou činnosťou) obsah registrov TCNT2, OCR2 a TCCR2

sa môže zničiť. Z toho dôvodu je doporučený nasledovný postup:

1. Zakázať prerušenia vynulovaním bitov OCIE2 a TOIE2.

2. Zvoliť zdroj hodinového signálu nastavením bitu AS2.

3. Zapísať nové hodnoty do registrov TCNT2, OCR2 a TCCR2.

4. Prepnúť na asynchrónnu činnosť a počkať na vynulovanie bitov TCN2UB,

OCR2UB a TCR2UB.

5. Vynulovať príznakové bity prerušení časovača/čítača2.

6. Ak v aplikácii sú využívané prerušenia, potom ich povoliť.

Poznamenajme, že:

Oscilátor je optimalizovaný pre kryštálový rezonátor 32.768 KHz. Priojenie externého

zdroja hodinového signálu na vývod TOSC1 môže spôsobiť nekorektné správanie. Frekvencia

hodinového signálu CPU musí byť minimálne štyri krát vyššia než frekvencia oscilátora.

Pri zápise do registrov TCNT2, OCR2, alebo TCCR2 zapisovaná hodnota je prenesená

do vyrovnávacieho registra a následne po dvoch nábežných hranách na vývode TOSC1 je

prepísaná do cieľového registra. Užívateľ nemôže zapisovať novú hodnotu pred tým, než

obsah vyrovnávacieho registra je prenesený do cieľového registra. Každý z troch zmienených

registrov má vlastný vyrovnávací register. Z toho vyplýva, že zápis do TCNT2 neovplyvní

prenos dát do ďalších dvoch registrov časovača/čítača2.

Page 139: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 139

Ak procesor prechádza do režimu so zníženou spotrebou po zápise do registrov

TCNT2, OCR2, alebo TCCR2, je potrebné aby prenos údajov bol korektne ukončený. Najmä

v prípade, ak sa má procesor aktivovať na základe prerušenia od časovača/čítača2.

Ak časovač/čítač2 je využitý na aktivovanie procesora z režimu s úspornou spotrebou

a po aktivácii procesor znova prechádza do úsporného režimu je potrebné pripomenúť

nasledovné: Prerušovacia logika vyžaduje na reštartovanie jednu periódu hodinového signálu

na vývode TOSC1. Ak aktívny čas procesora je kratší, prerušenie sa nevyskytne a procesor

ostane v úspornom režime. Postup, ktorý zaručí korektnú činnosť aj v prípade, keď užívateľ

nie je schopný odhadnúť aktívny čas procesora je uvedený v 1.

Ak je zvolená asynchronná činnosť časovača/čítača2 je oscilátor 32.768 kHz

v činnosti, s výnimkou režimov Power-down, alebo Standby. Po reštarte procesora, prípadne

po aktivovaní z režimov Power-down, alebo Standby užívateľ musí rešpektovať, že oscilátor

vyžaduje na stabilizáciu frekvencie až jednu sekundu.

Detailný popis činnosti časovača/čítača2 v asynchrónnom režime pri prechode

z režimov Power-save, alebo Extended Standby je uvedený v 1.

Maskovací register prerušení od časovača/čítača, TIMSK

TIMSK:

Bit 7 6 5 4 3 2 1 0

Symbol OCIE2 TOIE2 TICE1 OCIE1A OCIE1B TOIE1 - TOIE0

Prístup R/W R/W R/W R/W R/W R/W R R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 7 - OCIE2: Povolenie prerušenia pri zhode obsahov TCNT2 a OCCR2,

Timer/Counter2, Output Compare Match Interrupt Enable

Ak bit OCIE2 je nastavený na hodnotu log.1, potom v prípade že aj bit I v stavovom

registri je nastavený na hodnotu log.1 (globálne povolenie prerušení), bude povolené

prerušenie pri zhode obsahov časovača/čítača2 a registra OCCR2.

Bit 6 - TOIE2: Povolenie prerušenia pri pretečení TCNT2, Timer/Counter2 Overflow

Interrupt Enable

Ak bit TOIE2 je nastavený na hodnotu log.1, potom v prípade, že sú globálne

povolené prerušenia, bude povolené prerušenie pri pretečení obsahu časovača/čítača2. .

Register príznakov prerušení od časovača/čítača1, TIFR

TIFR:

Bit 7 6 5 4 3 2 1 0

Symbol OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 - TOV0

Prístup R/W R/W R/W R/W R/W R/W R R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 7 - 0CF2: Príznak zhody obsahov TCNT2 a OCR2, Output Compare Flag2

Bit OCF2 sa nastaví na hodnotu log.1, ak sa vyskytne zhoda obsahov v registroch

TCNT2 a OCR2. Bit OCF2 sa automaticky vynuluje pri obsluhe odpovedajúceho prerušenia.

Bit OCF2 môže byť vynulovaný aj zápisom logickej jednotky.

Page 140: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 140

Bit 6 - TOV2: Časovač/čítač2, príznak pretečenia, Timer/Counter2, Overflow Flag

Bit TOV1 sa nastaví na hodnotu log.1 pri pretečení časovača/čítača2. Bit TOV2 sa

automaticky vynuluje pri obsluhe odpovedajúceho prerušenia, alebo zápisom hodnoty log.1.

V PWM režime sa tento bit nastaví v hodnote 0x00, t.j. keď časovač/čítač2 mení smer

počítania.

Na obr.70 je zobrazený zdroj hodinového signálu pre časovač/čítač2.

Obr.70 Zdroj hodinového signálu pre časovač/čítač2.

Hodinový signál pre časovač/čítač2 je označený clkT2S. Signál clkT2S je pri štarte MCU

pripojený na signál clkI/O. Nastavením bitu AS2 v registri ASSR na hodnotu log.1 je

časovač/čítač2 napájaný z asynchrónneho zdroja hodinových impulzov – vývod TOSC1. Táto

možnosť dovoľuje použiť časovač/čítač2 v úlohe čítača reálneho času (RTC). Ak bit AS2 je

nastavený na hodnotu log.1, potom vývody MCU TOSC1 a TOSC2 sú odpojené od V/V

brány B a medzi ne sa pripája kryštálový rezonátor. Oscilátor je navrhnutý pre použitie

hodinového kryštálu 32.768 kHz. Pripojenie externého zdroja hodinového signálu na vývod

TOSC1 sa nedoporučuje.

Modul časovača/čítača2 obsahuje preddeličku hodinového signálu - obr.65. Čítač/časovač2

môže využívať nasledovné frekvencie hodinového signálu: clkT2S, clkT2S/8, clkT2S/32,

clkT2S/64, clkT2S/128, clkT2S/256, clkT2S/256 a clkT2S/1024. Nastavením bitu PSR2 v registri

SFIOR môžeme vynulovať preddeličku časovača/čítača2.

Register špeciálnych V/V funkcií, SFIOR

SFIOR:

clkI/O

TOSC1

clkT2S

10-bitová preddelička

AS2

nulovanie

PSR2

CS20

CS21

CS22

0 clk

T2S

/8

clk

T2S

/32

clk

T2S

/64

clk

T2S

/12

8

clk

T2S

/25

6

clk

T2S

/10

24

Zdroj hodinového signálu

časovača/čítača2, clkT2

Page 141: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 141

Bit 7 6 5 4 3 2 1 0

Symbol - - - - ACME PUD PSR2 PSR10

Prístup R R R R R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 1 – PSR2: Nulovanie preddeličky časovača/čítača2, Prescaler Reset Timer/Counter2

Ak do bitu PSR2 je zapísaná hodnota log.1, potom sa vynuluje preddelička

časovača/čítača2. Bit PSR2 sa automaticky vynuluje po skončení operácie nulovania

preddeličky.

4.8 ANALÓGOVÝ KOMPARÁTOR

Analógový komparátor porovnáva hodnoty napätí na neinvertujúcom vstupe AIN0

a na invertujúcom vstupe AIN1. Ak napätie na neinvertujúcom vstupe je väčšie než napätie na

invertujúcom, potom výstup analógového komparátora ACO nadobúda hodnotu log.1. Výstup

analógového komparátora môže byť využitý ako strobovací signál pre časovač/čítač1. Výstup

komparátora môže generovať žiadosť o prerušenie na nábežnú hranu, zostupnú hranu,

prípadne zmenu logickej úrovne na výstupe komparátora. Bloková schéma obvodov

komparátora je uvedená na obr.71.

Obr.71 Obvody analógového komparátora

4.8.1 Popis registrov

V/V register špeciálnych funkcií, SFIOR

"bandgap"

referencia

AIN0

AIN1

+

-

definícia

prerušenia

ACME

ADEN

výstup z MUX ADC

ACBG

Vcc

ACD

ACICACIS1 ACIS0

ACIE

IRQ

anal.komp

ACI

ACO

zachytenie

obsahuTCNT1

Page 142: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 142

SFIOR:

Bit 7 6 5 4 3 2 1 0

Symbol - - - - ACME PUD PSR2 PSR10

Prístup R R R R R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 3 – ACME: povolenie multiplexora analógového komparátora, Analog Comparator

Multiplexer Enable

Ak bit ACME obsahuje log.1 a A/D prevodník (ADC) je vypnutý (bit ADEN = 0),

potom imvertujúci vstup analógového komparátora je pripojený na výstup ADC multiplexora.

Ak bit ACME obsahuje log.0, potom invertujúci vstup je pripojený na vstup AIN1.

Riadiaci a stavový register analógového komparátora, ACSR

ACSR:

Bit 7 6 5 4 3 2 1 0

Symbol ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0

Prístup R/W R/W R R/W R/W R/W R/W R/W

P. hod. 0 0 N/A 0 0 0 0 0

Bit 7 – ACD: Zákaz analógového komparátora, Analog Comparator Disable

Keď bit ACD obsahuje log.1 je vypnuté napájanie analógového komparátora.

Analógový komparátor je možné kedykoľvek zapnúť zápisom log.0 do bitu ACD. Takéto

ovládanie komparátora redukuje spotrebu MCU. Pri zmene obsahu bitu ACD musíme zakázať

prerušenie od analógového komparátora zapísaním log.0 do bitu ACIE v registri ACSR.

Bit 6 – ACBG: Voľba „bandgap“, Analog Comparator Bandgap Select

Keď bit ACBG obsahuje log.1, potom „bandgap“ referenčné napätie je pripojené na

neinvertujúci vstup analógového komparátora. Ak bit ACBG obsahuje log.0, potom

neinvertujúci vstup analógového komparátora je pripojený na vstup AIN0.

Bit 5 – ACO: Výstup analógového komparátora, Analog Comparator Output

Výstup analógového komparátora je po synchronizácii privedený priamo na bit ACO.

Proces synchronizácie spôsobuje oneskorenie o 1 až 2 hodinové cykly.

Bit 4 – ACI: Príznak prerušenia od analólgového komparátora, Analog Comparator

Interrupt Flag

Bit ACI sa nastavuje automaticky, keď na výstupe analógového komparátora sa

vyskytne udalosť definovaná bitmi ACIS0 a ACIS1. Obsluha prerušenia sa vykoná v prípade,

ak sú nastavené na log.1 bity I v SREG a ACIE v ACSR. Bit ACI sa automaticky nastaví na

hodnotu log.0 v priebehu realizácie odpovedajúceho prerušovacieho vektora. Bit ACI môže

byť vynulovaný aj zápisom log.1.

Bit 3 – ACIE: Povolenie prerušenia od analógového komparátora, Analog Comparator

Interrupt Enable

Ak bit ACIE a súčasne aj I-bit v SREG obsahujú hodnotu log.1 prerušenie od

analógového komparátora je povolené. V prípade, že bit ACIE obsahuje hodnotu log.0

prerušenie od analógového komparátora bude zakázané.

Page 143: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 143

Bit 2 – ACIC: Povolenie záchytnej funkcie TCNT1 od analógového komparátora,

Analog Comparator Input Capture Enable

Ak bit ACIC obsahuje log.1 povoľuje aby záchytná funkcia obsahu časovača/čítača1

bola ovládaná výstupom analógového komparátora. V tomto prípade je výstup analógového

komparátora priamo pripojený na vstup záchytnej logiky. Ak bit ACIC obsahuje log.0, potom

neexistuje spojenie výstupu analógového komparátora a záchytnej logiky časovača/čítača1.

Bity 1, 0 – ACIS1 a ACIS0: Výber režimu prerušenia od analógového komparátora,

Analog Comparator Interrupt Enable

Obsah bitov ACIS1 a ACIS0 určuje aká udalosť na výstupe analógového komparátora

môže vyvolať prerušenie, tab.52.

ACIS1 ACIS0 Popis

0 0 Prerušenie na zmenu výstupu komparátora

0 1 Nevyužité

1 0 Prerušenie na zostupnú hranu signálu na výstupe komparátora

1 1 Prerušenie na nábežnú hranu signálu na výstupe komparátora

Tab. 52 Nastavenie bitov ACIS1 a ACIS0

Keď sa mení nastavenie bitov ACIS1 a ACIS0 je potrebné zakázať prerušenie vynulovaním

bitu ACIE. V opačnom prípade, môže zmena obsahu bitov ACIS1,0 vyvolať neželanú žiadosť

o prerušenie.

Ako bolo uvedené vyššie, na invertujúci vstup analógového komparátora môžeme

pripojiť ľubovolný vstup analógového multiplexora. Ak je analógový prevodník vypnutý (bit

ADEN v ADCSRA nastavený na log.0) a súčasne je povolený vstup od multiplexora (bit

ACME v SFIOR nastavený na log.0), potom na invertujúci vstup analógového komparátora je

pripojený jeden zo vstupov ADC0 až ADC7. Výber konkrétneho vstupu je realizovaný

prostredníctvom bitov MUX2..0 v registri ADMUX. Ak hodnota bitu ACME je log.0, alebo

bit ADEN obsahuje hodnotu log.1, potom je na invertujúci vstup pripojený vývod AIN1.

V tab. 53 sú uvedené jednotlivé možnosti prepojenia invertujúceho vstupu analógového

komparátora.

ACME ADEN MUX2..0 Pripojenie invertujúceho vstupu

0 x xxx AIN1

1 1 xxx AIN1

1 0 000 ADC0

1 0 001 ADC1

1 0 010 ADC2

1 0 011 ADC3

1 0 100 ADC4

1 0 101 ADC5

1 0 110 ADC6 ( len v púzdre TQFP a MLF )

1 0 111 ADC7 ( len v púzdre TQFP a MLF )

Tab.53 Pripojenie invertujúceho vstupu analógového komparátora

Page 144: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 144

4.9 EXTERNÉ PRERUŠENIA

Externé prerušenia umožňujú reagovať MCU na asynchrónne udalosti vyskytujúce sa

v okolí mikrokontroléra. MCU ATmega8 má dva externé prerušovacie vstupy, INT0 a INT1.

V prípade, ak je povolená obsluha týchto prerušení, pričom vývody INT1:0 sú konfigurované

ako výstupy, bude aj v tomto prípade pri výskyte definovanej udalosti aktivované prerušenie

CPU. Táto vlastnosť môže byť využitá na generovanie prerušení pomocou užívateľského

programu. Externé prerušenia môžu byť aktivované na nábežnú, alebo zostupnú hranu,

prípadne na úroveň odpovedajúcu log.0, alebo na zmenu úrovne. Voľba jednej z uvedených

možností sa vykonáva prostredníctvom nastavenia bitov ISCxx v riadiacom registri MCU. Ak

je povolené externé prerušenie na úroveň, žiadosť o prerušenie bude trvať tak dlho, pokiaľ na

príslušnom vstupe bude úroveň napätia odpovedajúca log.0. V prípade, že prerušovací vstup

je konfigurovaný na nábežnú, alebo zostupnú hranu, pri jeho vyhodnocovaní je využívaný

hodinový signál V/Vclok. Vyhodnotenie prerušenia na úroveň sa vykonáva asynchrónne,

preto je možné s takto nastaveným externým prerušením aktivovať CPU z úsporných

režimov. Poznamenajme, že V/V clok sú pozastavené vo všetkých úsporných režimoch

s výnimkou „Idle“. Ak je externé prerušenie využité na aktivovanie CPU je potrebné zaistiť

aby definovaná aktívna úroveň bola na prerušovacom vstupe minimálne dve periódy

„Watchdog“ hodinového signálu. Poznamenajme, že perióda hodinového signálu pre systém

„Watchdog“ je približne 1µs pri Vcc=5V.

4.9.1 Popis registrov

MCU riadiaci register - MCUCR

Riadiaci register MCU obsahuje bity pre riadenie externého prerušenia a pre riadenie

ďalších všeobecných funkcií MCU.

MCUCR:

Bit 7 6 5 4 3 2 1 0

Symbol SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hodnota 0 0 0 0 0 0 0 0

Bit 3,2 – ISC11, ISC10: Riadenie citlivosti prerušenia 1, Interrupt Sence Control 1

Externé prerušenie 1 sa aktivuje prostredníctvom prerušovacieho vstupu INT1. Ak

povoľujeme externé prerušenie 1 je potrebné nastaviť na hodnotu log.1 I-bit v S registri

a taktiež odpovedajúcu masku prerušenia v registri GICR. Aká udalosť aktivuje žiadosť

o prerušenie definuje obsah bitov ISC11 a ISC10 v registri MCUCR, podľa tab.54. Ak je

prerušenie citlivé na hranu, prípadne na zmenu je potrebné zaistiť aby impulz vyvolávajúci

prerušenie trval dlhšie než jednu periódu hodinových impulzov. Kratšie impulzy nezaručujú

korektné vyvolanie prerušenia. Ak je prerušenie citlivé na úroveň, potom úroveň

odpovedajúca log.0 musí trvať až do skončenia práve prebiehajúcej inštrukcie.

ISC11 ISC10 Popis

0 0 Žiadosť o prerušenie na vstupe INT1 je generovaná úrovňou

odpovedajúcou log.0

0 1 Ľubovolná logická zmena na vstupe INT1 generuje žiadosť o prerušenie

1 0 Zostupná hrana na vstupe INT1 generuje žiadosť o prerušenie

1 1 Nábežná hrana na vstupe INT1 generuje žiadosť o prerušenie

Page 145: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 145

Tab.54 Definovanie prerušovacej udalosti na vstupe INT1

Bit 1,0 – ISC01, ISC00: Riadenie citlivosti prerušenia 0, Interrupt Sence Control 0

Externé prerušenie 0 sa aktivuje prostredníctvom prerušovacieho vstupu INT0. Ak

povoľujeme externé prerušenie 0, je potrebné nastaviť na log.1 I-bit v S registri a taktiež

odpovedajúcu masku prerušenia v registri GICR. Aká udalosť aktivuje žiadosť o prerušenie

definuje obsah bitov ISC01 a ISC00 v registri MCUCR, podľa tab.55. Ak je prerušenie citlivé

na hranu, prípadne na zmenu je potrebné zaistiť, aby impulz vyvolávajúci prerušenie trval

dlhšie než jednu periódu hodinových impulzov. Kratšie impulzy nezaručujú korektné

vyvolanie prerušenia. Ak je prerušenie citlivé na úroveň, potom úroveň odpovedajúca log.0

musí trvať až do skončenia práve prebiehajúcej inštrukcie.

ISC01 ISC00 Popis

0 0 Žiadosť o prerušenie na vstupe INT0 je generovaná úrovňou

odpovedajúcou log.0

0 1 Ľubovolná logická zmena na vstupe INT0 generuje žiadosť o prerušenie

1 0 Zostupná hrana na vstupe INT0 generuje žiadosť o prerušenie

1 1 Nábežná hrana na vstupe INT0 generuje žiadosť o prerušenie

Tab.55 Definovanie prerušovacej udalosti na vstupe INT0

Všeobecný riadiaci register prerušení – GICR

GICR:

Bit 7 6 5 4 3 2 1 0

Symbol INT1 INT0 - - - - IVSEL IVCE

Prístup R/W R/W R R R R R/W R/W

P.hodnota 0 0 0 0 0 0 0 0

Bit 7 – INT1: Povolenie žiadosti o externé prerušenie 1, External Interrupt Request 1

Enable

Ak bit INT1 v registri GICR a súčasne bit I v registri SREG je nastavený na log.1,

potom je povolené prerušenie od externého prerušovacieho vstupu INT1. Definovanie

prerušovacej udalosti je dané obsahom bitov ISC11 a ISC10 registra MCUCR. Príslušné

udalosti na vstupe INT1 vyvolajú prerušenie i v prípade, ak je konfigurovaný ako výstup.

Bit 6 – INT0: Povolenie žiadosti o externé prerušenie 0, External Interrupt Request 0

Enable

Ak bit INT0 v registri GICR a súčasne bit I v registri SREG je nastavený na log.1,

potom je povolené prerušenie od externého prerušovacieho vstupu INT0. Definovanie

prerušovacej udalosti je dané obsahom bitov ISC01 a ISC00 registra MCUCR. Príslušné

udalosti na vstupe INT0 vyvolajú prerušenie i v prípade, ak je konfigurovaný ako výstup.

Všeobecný register príznakov prerušenia – GIFR

GIFR:

Bit 7 6 5 4 3 2 1 0

Symbol INTF1 INTF0 - - - - - -

Page 146: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 146

Prístup R/W R/W R R R R R R

P.hodnota 0 0 0 0 0 0 0 0

Bit 7 – INTF1: Príznak externého prerušenia 1, External Interrupt Flag 1

Ak sa vyskytne na vstupe INT1 definovaná udalosť, potom sa príznak prerušenia

INTF1nastaví na hodnotu log.1. Ak je povolená obsluha prerušenia (pomocou bitov I v SREG

a INT1 v GICR), potom CPU „skáče“ na zodpovedajúci vektor prerušenia. Príznak žiadosti

o obsluhu prerušenia INTF1 sa automaticky vynuluje pri výkone obslužného programu

prerušenia. Príznak môže byť vynulovaný aj zápisom log.1.

Bit 6 – INTF0: Príznak externého prerušenia 0, External Interrupt Flag 0

Ak sa vyskytne na vstupe INT0 definovaná udalosť, potom sa na hodnotu log.1nastaví

príznak prerušenia INTF0. Ak je povolená obsluha prerušenia (bitom I v SREG a bitom INT0

v GICR), potom CPU „skáče“ na odpovedajúci vektor prerušenia. Príznak žiadosti o obsluhu

prerušenia INTF0 sa automaticky vynuluje pri výkone obslužného programu prerušenia.

Príznak môže byť vynulovaný aj zápisom log.1.

4.10 ANALÓGOVO-ČÍSLICOVÝ PREVODNÍK

Základné vlastnosti:

10-bitové rozlíšenie (8-bitové rozlíšenie na vstupoch ADC4 a ADC5)

Absolutná presnosť 2 LSB

Integrálna nelinearita 0.5 LSB

Čas prevodu 65 – 260us (do 15 ksps)

6 vstupných kanálov

2 ďalšie vstupné kanály, len v púzdrach TQFP a MLF)

Vstupný rozsah 0 až Vcc

Voliteľné 2,56V interné referenčné napätie

Opakovací, prípadne jednorazový režim

Prerušenie po skončení prevodu

Spiaci režim, potlačenie šumu

Mikrokontrolér ATmega8 obsahuje integrovaný 10-bitový analógovo číslicový prevodník

s postupnou aproximáciou a s predradeným 8-kanálovým analógovým multiplexorom.

Súčasťou prevodníka je vzorkovací zosilňovač, ktorý zabezpečí konštantné napätie na vstupe

prevodníka počas doby prevodu. Bloková schéma prevodníka je uvedená na nasledujúcom

obrázku.

Page 147: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 147

Obr.72 Bloková schéma A/D prevodníka

Analógovo číslicový prevodník konvertuje analógové vstupné napätie na 10-bitovú digitálny

údaj. Minimálna hodnota (0x000) reprezentuje napätie medzi vybraným vstupom a AGND

0V: Maximálna hodnota (0x3FF) je rovná napätiu na vývode AREF mínus 1LSB. Na vývod

AREF môže byť pripojené napätie AVCC, alebo interné referenčné napätie 2.56V, pomocou

vhodného nastavenia bitov REFS1:0 v registri ADMUX. Pre zvýšenie šumovej imunity je

možné vývod AREF blokovať pomocou externej kapacity.

Činnosť A/D prevodníka sa povoľuje nastavením povoľovacieho bitu ADEN v registri

ADCSRA.

A/D prevodník generuje 10-bitový výsledok prevodu, ktorý je uložený v údajových

registroch ADCH a ADCL. Výsledok prevodu musí byť prečítaný až po ukončení prevodu.

Pri čítaní údajov sa musí ako prvý prečítať obsah registra ADCL. Interné ochranné obvody

zabezpečia že nedôjde ku zmene obsahu ADCH pokiaľ jeho obsah nebude následne prečítaný.

Je zrejmé, že prístup prevodníka k vlastným údajovým registrom je blokovaný, až do

okamžiku prečítania obsahu registra ADCH. S touto skutočnosťou je potrebné počítať pri

tvorbe obslužných programov.

10-bitový výsledok prevodu môže byť v registroch ADCH a ADCL uložený dvoma

nasledovnými spôsobmi:

ADC

multiplexor

(ADMUX)

ADC riadiacia

stavový register

(ADCSRA)

ADC datový

register

(ADCH/ ADCL)

údajová zbernica

IRQ ADC prevod

skončený

AD

IF

AD

IE

riadenie10-bit DAC

MUX

S-H komparátor+

Uref

MU

X0

MU

X1

MU

X2

AD

EN

AD

SC

AD

IF

AD

FR

AD

PS

2

AD

PS

1

AD

PS

0

15 0

(9-

0)

Int.ref.

AREF

AVccREFS1

REFS0

MU

X3

AD

LA

R

Výstup ADC MUX

GND

BREF

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

Page 148: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 148

- dolných 8 bitov výsledku je v registri ADCL a horné 2 bity v dolných 2 bitoch registra

ADCH, (počiatočné nastavenie),

- horných 8-bitov výsledku je v registri ADCH a spodné 2 bity v 2 horných bitoch

registra ADCL. Táto možnosť sa využíva v prípade, že v danej aplikácii postačí 8-

bitová rozlišovacia schopnosť prevodníka. Potom stačí čítať len obsah registra ADCH.

Jeden z uvedených dvoch režimov je možné zvoliť prostredníctvom obsahu bitu ADLAR

v registri ADMUX.

Prevodník má dva samostatné vývody na pripojenie napájacieho napätia – AVCC,

AGND. Vývod AGND musí byť spojený s GND a úroveň napätia na vývode AVCC sa

nesmie líšiť o viac než 0.3V od VCC. Ak je použité externé referenčné napätie toto musí byť

v rozsahu AGND až AVCC.

Prevodník môže pracovať v dvoch rôznych režimoch – v režime opakovaný prevod a v

režime jednorazový prevod. V jednorazovom režime je každý prevod inicializovaný

užívateľským programom. V režime opakovaný prevod je s definovanou periódou

vzorkovania automaticky štartovaný prevod, pričom výsledok sa prepisuje do ADC registrov.

Pomocou obsahu bitu ADFR v registri ADCSRA je možné voliť jeden z popísaných režimov.

Prevod začína zápisom log.1 do štartovacieho bitu ADSC. Bit ADSC bude mať hodnotu

log.1, pokiaľ prevod neskončí. Po ukončení prevodu bude automaticky vynulovaný. Ak

v priebehu prevodu je prostredníctvom zmeny obsahu registra ADMUX zvolený nový kanál,

prevod bude dokončený s pôvodným kanálom a až po jeho skončení dôjde k prepnutiu kanálu.

Po ukončení prevodu má prevodník možnosť generovať žiadosť o prerušenie procesora.

4.10.1 preddelička hodinového signálu ADC

ADC obsahuje predeličku, pomocou ktorej je možné definovať frekvenciu hodinových

impulzov prevodníka.

Obr.73 Zdroj hodinových impulzov pre prevodník

Prevodník štandardne akceptuje frekvenciu hodinových impulzov v rozsahu 50 – 200 kHz.

V prípade, ak sa v aplikácii nevyžadujeme rozlišovaciu schopnosť prevodníka 10 bitov

môžeme použiť vyššiu hodinovú frekvenciu. Bity ADPS0 – ADPS2 slúžia na nastavenie

7-bitová ADC preddelička

ADEN

Ck

Reset

Ck

/2

Ck

/4

Ck

/8

Ck

/16

Ck

/32

Ck

/64

Ck

/12

8

ADPS0

ADPS1

ADPS2

zdroj hodinových impulzov

ADC

Page 149: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 149

frekvencie hodinových impulzov pre prevodník v definovanom rozsahu, pri použití

ľubovolného kryštálu. Čítač preddeličky začína svoju činnosť v okamihu nastavenia bitu

ADEN registra ADCSRA. Pokiaľ je bit ADEN nastavený na hodnotu log.1, preddelička

generuje hodinové impulzy pre ADC.

4.10.2 Režim činnosti A/D prevodníka

Ak bude spustený prevod, nastavením bitu ADSC v registri ADSCRA, potom prevod

začne na prvú nábežnú hranu hodinových impulzov. Aktuálna vzorka vstupného signálu bude

vzorkovacím obvodom vzorkovaná po 1.5 perióde hodinových impulzov od nastavenia bitu

ADSC. Výsledok prevodu je do ADC registrov zapísaný po 13 periódach hodinových

impulzov. V režime jednorázový prevod môže byť nový prevod spustený po uplynutí jednej

periódy hodinových impulzov od skončenia predchádzajúceho prevodu. Pri opakovacom

režime nový prevod začína bezprostredne po zápise výsledku prevodu do údajových registrov

ADC. Pri opakovacom režime a frekvencii hodín 200kHz môžeme dosiahnuť dobu prevodu

65s, prípadne rýchlosť prevodu 15.4 ksps.

Obr.74 Časový diagram – jednorazový režim, prvý prevod

1 2 12 13 14 21262524

ADC CLK

ADEN

ADSC

HOLD

STROBE

ADIF

MSBADCH

ADCL

inicializácia aktuálny prevoddruhý prevod

Page 150: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 150

Obr.75 Časový diagram – režim jednorázový prevod, nasledujúce prevody

Obr.76 Časový diagram –opakovací režim

Prostredníctvom obsahu bitov MUX v registri ADMUX je možné na vstup prevodníka

pripojiť jeden zo vstupných kanálov. Pomocou bitov REFS1:0 môžeme zvoliť jeden zo

zdrojov referenčného napätia. Zmenu obsahu registra ADMUX je potrebné realizovať pri

splnení jednej z nasledovných podmienok:

1. Keď obsah bitu ADFR, alebo ADEN je log.0.

2. Počas prevodu, najskôr jednu periódu hodinového signálu po štarte prevodu.

1 2 211413

ADC CLK

ADSC

HOLD

STROBE

ADIF

MSBADCH

ADCL

aktuálny prevod

nasledujúci

prevod

3 4 5 6 11 12

LSB

ADEN

11 12

ADC CLK

ADSC

HOLD

STROBE

ADIF

MSBADCH

ADCL

13 1 2 3

LSB

ADEN

prevod nasledujúci prevod

Page 151: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 151

3. Po prevode, pred tým než príznak prerušenia sa využije na vynulovanie štartu

prevodu.

Keď zmena obsahu ADMUX bude rešpektovať jednu z uvedených podmienok nasledujúci

prevod bude zohľadňovať nové nastavenia.

V prípade zmeny vstupných kanálov musí užívateľ rešpektovať nasledujúce pravidlá:

V jednorázovom režime zvolíme konkrétny vstupný kanál pred štartom prevodu. Zmena

kanálu môže byť síce vykonaná jednu periódu hodinového signálu ADC po zápise log. 1 do

bitu ADSC, jednoduchší je však postup počkať na skončenie prevodu a potom zmeniť

vstupný kanál.

V opakovacom režime zvolíme vstupný kanál pred prvým prevodom. Zmena kanálu

môže byť realizovaná po uplynutí prvej periódy hodinového signálu ADC po zápise log. 1 do

bitu ADCS. Vhodnejšie je počkať na skončenie prevodu a potom zmeniť nastavenie kanálu.

Referenčné napätie pre A/D prevodník (VREF) definuje rozsah prevodníka. Ako zdroj

referenčného napätia môžeme použiť: AVCC, internú referenciu 2.56V, prípadne externú

referenciu pripojenú na vývod AREF. Ak užívateľ používa externý zdroj referenčného napätia

pripojený na vývod AREF nesmie v aplikácii používať internú referenciu, prípadne AVCC.

Ak v aplikácii nepoužívame externý zdroj referenčného napätia, môžeme referenciu prepínať

medzi 2.56V a AVCC. Poznamenajme, že prvý prevod po prepnutí referencie môže byť

nepresný.

Analógovo číslicový prevodník je možné využívať aj v režime zníženej spotreby CPU, čo

spôsobí redukciu šumu, ktorý generuje CPU, prípadne periférne obvody. Postup je

nasledovný:

- Činnosť ADC musí byť povolená. ADC nesmie byť práve zaneprázdnený prevodom.

Musí byť zvolený režim jednorázový prevod a povolené prerušenie od ADC.

- Nastav režim redukcie šumu ADC, alebo idle mod MCU. Prevod bude štartovaný

v okamžiku zastavenia CPU.

- Ak sa v priebehu prevodu nevyskytnú žiadne iné žiadosti o prerušenie, potom po skončení

prevodu prerušenie od ADC- prevod kompletný, uvedie CPU do činnosti a realizuje sa

obsluha prerušenia, čítanie výsledku .

Analógové vstupné kanály sú charakterizované vstupnou kapacitou a vstupným prúdom

nezávisle od toho, či príslušný kanál je vybraný ako vstup do A/D prevodníka. V prípade, že

príslušný kanál je zvolený ako vstupný, potom zdroj analógového signálu napája pamäťovú

kapacitu prostredníctvom sériového odporu, obr.72. Blok A/D prevodníka je navrhnutý pre

zdroje meraného signálu s výstupnou impedanciou do 10k. Pri splnení uvedenej podmienky

nie je čas nabitia pamäťovej kapacity kritický.

Page 152: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 152

ADCn

IH

IL

I

I

1….100k

CS/H

VCC/2

14 pF

Obr.77 Analógové vstupné obvody

Po skončení prevodu (bit ADIF má hodnotu log.1) je výsledok prevodu v registroch

ADCL a ADCH. Obsah registrov je určený nasledovným vzťahom:

REF

IN

V

VADC

1204

,

kde VIN je napätie na vybranom vstupe a VREF je zvolené referenčné napätie prevodníka.

Hodnota 0x000 reprezentuje analógovú zem a 0x3FF zodpovedá hodnote VREF mínus 1LSB.

4.10.3 Popis registrov

ADC multiplexer select register ADMUX:

ADMUX:

Bit 7:6- REFS1:0: bity pre výber referencie, Reference Selection Bits

Obsah bitov REFS1:0 určuje zdroj referenčného napätia pre A/D prevodník. Ich

význam je uvedený v tabuľke 56.

REFS1 REFS0 Zdroj referenčného napätia

0 0 AREF, interné zdroje vypnuté

0 1 AVCC s externou kapacitou

1 0 rezervované

1 1 Interná ref. 2.56V s externou kapacitou

Tab. 56 Voľba zdroja referenčného napätia

Bit 5 – ADLAR: umiestnenie výsledku, ADC Left Adjust Result

Bit 7 6 5 4 3 2 1 0

Symbol REFS1 REFS0 ADLAR - MUX3 MUX2 MUX1 MUX0

Prístup R/W R/W R/W R R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Page 153: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 153

Pomocou obsahu bitu ADLAR je možné zvoliť umiestnenie výsledku prevodu

v registroch ADCL a ADCH. Ak hodnota bitu ADLAR je log.1, potom výsledok prevodu je

umiestnený nasledovne: horných 8 bitov v registri ADCH a dva spodné bity v registri ADCL,

bity b7,b6. V opačnom prípade je spodných 8 bitov výsledku v registri ADCL a dva najvyššie

bity v registri ADCH, v bitoch b0 a b1.

Bity 3:0 – MUX3:0: Výber kanálu, Analog Channel Selection

Hodnota uvedených bitov určuje, ktorý z analógových vstupných kanálov je pripojený

na vstup A/D prevodníka, podľa tabuľky 57.

MUX3....0 Vstup

0000 ADC0

0001 ADC1

0010 ADC2

0011 ADC3

0100 ADC4

0101 ADC5

0110 ADC6, nie pre MCU v puzdre DIP

0111 ADC7, nie pre MCU v puzdre DIP

1000 -

1001 -

1010 -

1011 -

1100 -

1101 -

1110 1.23V (VBG)

1111 0V (GND)

Tab.57 Výber vstupných kanálov A/D prevodníka

ADC Control and Status RegisterA – ADCSRA, riadiaci a stavový register

ADCSRA:

Bit7- ADEN: povolenie činnosti ADC, ADC enable

Zápisom log.1 do bitu ADEN sa povoľuje činnosť prevodníka. Nulovaním uvedeného

bitu sa prevodník vypína. Ak sa bit ADEN vynuluje v priebehu prevodu, potom prevodník

dokončí prebiehajúci prevod a vypne sa.

Bit6- ADSC: štart prevodu, Start Conversion ADC

Ak prevodník pracuje v jednorazovom režime pred každým prevodom musí byť do

bitu ADCS zapísaná log.1. Po ukončení prevodu sa pred vynulovaním bitu ADCS výsledok

prevodu zapíše do údajových registrov ADC.

Bit 7 6 5 4 3 2 1 0

Symbol ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Page 154: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 154

Bit 5-ADFR: výber opakovacieho režimu, ADC free run select

Ak nastavíme bit ADFR na log.1 prevodník pracuje v opakovacom režime.

Vynulovaním bitu ADFR ukončíme opakovací režim.

Bit 4–ADIF: príznak prerušenia, ADC interrupt flag

Tento bit je nastavený na log.1 vtedy, keď prevod skončil a údajové registre sú

naplnené novým výsledkom. Prerušenie od konca ADC prevodu sa vykoná, ak ADIE bit

a I bit stavového registra sú nastavené na hodnotu log.1. Bit ADIF je vynulovaný, keď sa

vykoná odpovedajúca obsluha prerušenia. ADIF môže byť tiež vynulovaný zápisom log. 1.

Bit3 – ADIE: povolenie prerušenia,ADC interrupt eanable

Ak bit ADIE je nastavený – log. 1 a I bit v S-registri je taktiež nastavený bude

povolené prerušenie „ADC prevod skončený“.

Bit2: 0- ADPS2 – ADPS0: nastavenie preddeličky, ADC prescaler select bits

Uvedené bity určujú deliaci pomer medzi hodinovou frekvenciou (XTAL) a frekvenciou

vstupných hodinových impulzov do ADC.

ADSP2 ADPS1 ADPS0 deliaci pomer

0 0 1 1

0 0 0 2

0 1 1 4

0 1 0 8

1 0 1 16

1 0 0 32

1 1 1 64

1 1 0 128

Tab.58 Deliaci pomer

ADC Data Register ADCL a ADCH, údajové registre A/D prevodníka

ADCH: (ADLAR=0)

ADCL: (ADLAR=0)

ADCH: (ADLAR=1)

Bit 7 6 5 4 3 2 1 0

Symbol - - - - - - ADC9 ADC8

Prístup R R R R R R R R

P.hod. 0 0 0 0 0 0 0 0

Bit 7 6 5 4 3 2 1 0

Symbol ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0

Prístup R R R R R R R R

P.hod. 0 0 0 0 0 0 0 0

Page 155: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 155

ADCH: (ADLAR=1)

Po skončení prevodu sa výsledok nachádza v týchto dvoch registroch. V opakovacom režime

je dôležité priebežne zaistiť čítanie týchto dvoch registrov. Register ADCL čítame skôr než

register ADCH.

4.10.4 Techniky na potlačenie šumu

Digitálne obvody vnútri mikrokontroléra generujú elektromagnetický šum, ktorý môže

mať negatívny vplyv na presnosť analógových meraní. Ak presnosť merania je kritická vplyv

šumu môže byť čiastočne redukovaný nasledovným postupom:

1. Analógová časť mikrokontroléra a všetky analógové komponenty v aplikácii by mali mať

pri návrhu PCB vlastnú analógovú zem. Analógová zem je s digitálnou spojená na PCB

v jednom bode.

2. Minimalizujme dĺžku analógových signálových vodičov. Analógové signálové vodiče

umiestnime tak, aby prechádzali nad analógovou zemniacou plochou. Vedieme ich čo

najďalej od digitálnych vodičov s rýchlo sa meniacimi signálmi.

3. AVCC vývod spojíme s napájaním digitálnej časti VCC cez filtračná RC článok.

4. Použijeme funkciu potlačenia šumu CPU.

5. Ak niektoré vývody portu C sú použité ako digitálne výstupy nemeníme ich pokiaľ

prebieha prevod.

Bit 7 6 5 4 3 2 1 0

Symbol ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2

Pristup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Bit 7 6 5 4 3 2 1 0

Symbol ADC1 ADC0 - - - - - -

Prístup R/W R/W R/W R/W R/W R/W R/W R/W

P.hod. 0 0 0 0 0 0 0 0

Page 156: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 156

28

27

26

25

24

23

22

21

20

19

PC5 ADC5

PC4 ADC4

PC3 ADC3

PC2 ADC2

PC1 ADC1

PC0 ADC0

AGND

AREF

AVCC

PB5

10uH

100nF

VCC

an

aló

go

vá z

em

nia

ca

plo

cha

ATmega8

PDIP

L

Obr. 78 Zásady návrhu dosky s plošnými spojmi

Parameter Podmienky Min Typ max jednotky

rozlíšenie 10 bit

Absolutná

presnosť

Vref =4, ADCclk

200kHz

1.75 LSB

Absolutná

presnosť

Vref=4, ADCclk

1MHz

3 LSB

Integrálna

nelinearita

Vref=4V, ADCclk

200kHz

0.75 LSB

Diferenciálna

nelinearita

Vref=4V, ADCclk

200kHz

0.5 LSB

Chyba

zosilnenia

Vref=4V, ADCclk

200kHz

1 LSB

Chyba nuly

(offset)

Vref=4V, ADCclk

200kHz

1 LSB

Frekvencia

hodin. imp

50 1000 kHz

Analogové

napájanie

AVCC

VCC-0.3 VCC+0.3 V

Vref 2 AVCC V

Vstupne

napätie

GND Vref V

Vstupny

odpor

55 100 MΩ

Tab. 59 Vybrané charakteristiky A/D prevodníka ( T -40C až 85C)

Page 157: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 157

5. ZAVÁDZACÍ PROGRAM, BOOT LOADER

Zavádzací program slúži na zavedenie, alebo prečítanie programového kódu

samotným mikrokontrolérom. Dovoľuje modifikácie užívateľského programu pomocou

rezidentného zavádzacieho programu MCU. Zavádzací program môže na prenos dát využívať

ľubovolnú dostupnú perifériu s odpovedajúcim protokolom a prijímané dáta zapísať do oblasti

pamäte FLASH, prípadne prečítané údaje vyslať prostredníctvom zvolenej periférie.

Zavádzací program môže prepísať i sám seba. Veľkosť pamäte zavádzacieho programu je

nastaviteľná pomocou „Fuse“ bitov. Zavádzací program má na programovú ochranu pridelené

dve množiny „Lock“ bitov.

5.1 SEKCIA PAMÄTE FLASH VYČLENENÁ PRE ZAVÁDZACÍ PROGRAM

Pamäť FLASH je rozdelená do dvoch sekcií, aplikačná sekcia a sekcia zavádzacieho

programu. Rôzna veľkosť týchto sekcií sa nastavuje pomocou BOOTSZ bitov podľa tab.60.

Tieto sekcie môžu mať rôzne úrovne ochrany nastavené pomocou „Lock“ bitov.

Aplikačná sekcia je oblasť pamäte FLASH, ktorá sa využíva na uloženie kódu

aplikačného programu.

Sekcia zavádzacieho programu (Boot Loader Section- BLS) slúži na uchovanie kódu

zavádzacieho programu. V tejto sekcii je možné používať inštrukciu SPM (Store Program

Memory), pomocou ktorej je možné prepísať obsah pamäte FLASH.

Pamäť FLASH je rozdelená do dvoch častí. Časť pamäte označovaná RWW – čítaj

počas zápisu ( Read While Write) a časť NRWW (No Read While Write). Rozdiel medzi

uvedenými dvoma časťami je nasledovný:

- Ak sa zapisuje, alebo vymazáva stránka umiestnená v RWW časti, časť NRWW je

prístupná pre čítanie obsahu.

- Ak sa zapisuje, alebo vymazáva stránka umiestnená v NRWW časti, činnosť CPU

je pozastavená.

Sekcia Počet stránok Adresy

RWW 96 0x000 – 0xBFF

NRWW 32 0xC00 – 0xFFF

Tab.60 Rozdelenie pamäte FLASH

Ak zavádzací program prepisuje obsah stránky umiestnenej v RWW časti, je možné

čítať kód umiestnený v časti NRWW. Počas programovania musí užívateľ zaistiť, aby

nedošlo k čítaniu obsahu časti pamäte RWW. V opačnom prípade môže program skončiť

v nedefinovanom stave. Z toho dôvodu je potrebné zakázať obsluhu prerušení, alebo ich

premiestniť do oblasti zavádzacieho programu. Zavádzací program je totiž vždy umiestnený

v časti pamäte NRWW. Bit indikujúci zaneprázdnenie pamäte RWW (RWWSB bit

v riadiacom registri pamäte SPMCR) je nastavený na log.1, pokiaľ je časť pamäte RWW

blokovaná pre čítanie. Po skončení programovania, musí byť pred čítaním z časti pamäte

RWW, bit RWWSB nastavený na hodnotu log.0.

Kód umiestnený v časti NRWW môžeme čítať aj v priebehu prepisovania obsahu

stránky v časti pamäte RWW. Tab.61 popisuje možnosti čítania počas zápisu.

Page 158: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 158

Sekcia adresovaná

obsahom Z-ukazovateľa,

zápis

Ktorá časť môže byť

čítaná počas zápisu?

Je činnosť CPU

pozastavená?

Je podporované

čítanie počas zápisu?

RWW časť NRWW časť Nie Áno

NRWW časť Žiadna Áno Nie

Tab.61 Možnosti čítania počas zápisu

Časť pamäte FLASH

RWW

Časť pamäte FLASH

NRWW

Z-ukazovateľ adresuje

RWW časť

Z-ukazovateľ adresuje

NRWW časť

Činnosť CPU je

pozastavená

Obsah časti NRWW

môžeme čítať

Obr.79 Časti RRW a NRWW pamäte FLASH

Ako už bolo spomenuté vnútri časti NRWW pamäte FLASH je umiestnený zavádzací

program. Pamäťový priestor pre uloženie zavádzacieho programu sa nazýva sekcia

zavádzacieho programu (Boot Loader Flash Section). Jeho veľkosť je určená hodnotou bitov

BOOTSZ1 a BOOTSZ0 podľa tab.62.

Aplikačná sekcia FLASH

pamäte

Aplikačná sekcia FLASH

pamäte

Sekcia zavádzacieho

programu

RW

W č

asť

NR

WW

ča

0x0000

Koniec RWW

Začiatok NRWW

Koniec FLASH

Koniec

aplikačnej sekcie

Začiaok zavádzacej

sekcie

Obr.80 Rozdelenie pamäte FLASH

Page 159: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 159

BOOTSZ1 BOOTSZ0 Veľkosť sekcie

zav. programu

Počet

stránok

Aplikačná

sekcia

Sekcia zav.

programu

1 1 128 slov 4 0x000-0xF7F 0xF80-0xFFF

1 0 256 slov 8 0x000-0xEFF 0xF00-0xFFF

0 1 512 slov 16 0x000-0xDFF 0xE00-0xFFF

0 0 1024 slov 32 0x000-0xBFF 0xC00-0xFFF

Tab.62 Rozdelenie pamäte FLASH

5.2 “LOCK“ BITY ZAVÁDZACIEHO PROGRAMU, BOOT LOADER LOCK BITY

Ak nie je potrebné využívať zavádzací program, celá pamäť FLASH je využiteľná na

uloženie kódu aplikačného programu. Zavádzací program má dve oddelené množiny „lock“

bitov, ktoré môžeme nastaviť oddelene. Takto si užívateľ môže zvoliť nasledujúce štyri rôzne

úrovne ochrany:

- Ochrana dát celej pamäte FLASH proti prepisu prostredníctvom MCU.

- Ochrana dát sekcie zavádzacieho programu proti prepisu prostredníctvom MCU.

- Ochrana dát aplikačnej sekcie proti prepisu prostredníctvom MCU.

- Povolenie prepisu dát v celej pamäti FLASH.

„Lock“ bity zavádzacieho programu môžu byť nastavované programovo, alebo pri sériovom,

prípadne paralelnom programovaní. Vynulovať ich môžeme len príkazom „Chip erase“.

BLB0

režim

BLB02 BLB01 Typ ochrany

1 1 1 Žiadne obmedzenia pri používaní inštrukcií LPM a SPM

v aplikačnej sekcii.

2 1 0 SPM nie je použiteľná pri zápise do aplikačnej sekcie.

3 0 0 SPM nie je použiteľná pri zápise do aplikačnej sekcie. LPM

v zavádzacej sekcii nedovoľuje čítať obsah aplikačnej sekcie. Ak

sú prerušovacie vektory uložené v zavádzacej sekcii, potom sú

prerušenia zakázané, pokiaľ sa vykonáva program aplikačnej

sekcie.

4 0 1 Inštrukciou LPM v zavádzacej sekcii nemôžeme čítať obsah

aplikačnej sekcie. Ak sú prerušovacie vektory uložené

v zavádzacej sekcii, potom sú prerušenia zakázané, pokiaľ sa

vykonáva program aplikačnej sekcie.

Tab.63 Režimy ochrany (bity BLB0)

BLB1

režim

BLB12 BLB11 Typ ochrany

1 1 1 Žiadne obmedzenia pri používaní inštrukcií LPM a SPM v sekcii

zavádzacieho programu

2 1 0 Inštrukcia SPM nie je použiteľná pri zápise do sekcie

zavádzacieho programu.

3 0 0 SPM nie je použiteľná pri zápise do zavádzacej sekcie. LPM

Page 160: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 160

v aplikačnej sekcii nedovoľuje čítať obsah zavádzacej sekcie. Ak

sú prerušovacie vektory uložené v aplikačnej sekcii, potom sú

prerušenia zakázané, pokiaľ sa vykonáva program zavádzacej

sekcie.

4 0 1 Inštrukciou LPM v aplikačnej sekcii nemôžeme čítať obsah

zavádzacej sekcie. Ak sú prerušovacie vektory uložené

v aplikačnej sekcii, potom sú prerušenia zakázané, pokiaľ sa

vykonáva program zavádzacej sekcie.

Pozn.: 1 označuje nenaprogramovaný, 0 naprogramovaný bit

Tab.64 Režimy ochrany (bity BLB1)

Spustenie zavádzacieho programu môže byť realizované skokom alebo volaním z aplikačného

programu. Prípadne ak je naprogramovaný „Boot Reset Fuse“ bit, tak že reštartovací vektor je

umiestnený na začiatku zavádzacej sekcie, potom môže byť zavádzací program spustený

hneď po reštarte MCU.

BOTRRST Štartovacia adresa

1 RESET vektor = aplikačný RESET (adresa 0x0000)

0 RESET vektor = RESET zavádzacieho programu ( tab.61)

Tab 65 Bit „ Boot Reset Fuse“

5.3 POPIS REGISTROV

Riadiaci register pamäte programu ( Store Program Memory Control Register,

SPMCR)

Riadiaci register pamäte programu obsahuje riadiace bity určené na riadenie operácií

zavádzacieho programu.

SPMCR:

Bit 7 6 5 4 3 2 1 0

Symbol SPMIE RWWSB - RWWSRE BLBSET PGWRT PGERS SPMEN

Prístup R/W R R R/W R/W R/W R/W R/W

P. hod. 0 0 0 0 0 0 0 0

Bit 7 – SPMIE, SPM povolenie prerušenia

Ak bit SPMIE má hodnotu log.1 a súčasne bit I v stavovom registri je nastavený na

log.1, je povolené prerušenie od žiadosti „SPM ready“. Prerušenie bude vykonávané tak dlho,

pokiaľ bit SPMEN v registri SPMCR bude mať hodnotu log.0.

Bit 6 – RWWSB, RWW sekcia zaneprázdnená

Ak sa vykonáva operácia programovania (mazanie, alebo zapisovanie stránky RWW

sekcie), potom sa automaticky nastaví bit RWWSB. Bit RWWSB sa nuluje, keď do

RWWSRE bitu bude po skončení operácie programovania zapísaná log.1.

Bit 5 – Nevyužitý bit

Bit 4 – RWWSRE, čítanie RWR sekcie povolené

Page 161: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 161

Ak sa vykonáva operácia programovania (mazanie, alebo zapisovanie stránky RWW

sekcie), potom je RWW sekcia blokovaná pre čítanie, bit RWWSB sa automaticky nastaví.

Pre opätovné povolenie čítania RWW sekcie užívateľský program musí čakať, pokiaľ

programovanie skončí (až SPMEN bude obsahovať hodnotu log.0). Ak do bitu RWWSRE

bude zapísaná hodnota log.1 a súčasne i do bitu SPMEN, potom nasledujúca inštrukcia SPM

v priebehu 4 hodinových cyklov znovu zakáže RWW sekciu.

Bit 3 – BLBSET, „Boot Lock“ bit nastavený

Ak do bitov BLBSET a SPMEN je zapísaná hodnota log.1 nasledujúca inštrukcia

SPM (ak sa vyskytne v priebehu 4 hodinových cyklov) nastaví „Boot Lock“ bity v súlade

s údajmi v registri R0. Poznamenajme, že údaje v registri R1 a adresa v Z-ukazovateli budú

ignorované. Bit BLBSET bude vynulovaný po skončení nastavenia „Lock“ bitov, alebo, ak

v priebehu 4 hodinových cyklov sa nevyskytne inštrukcia SPM.

LPM inštrukcia vyskytujúca sa v priebehu 3 hodinových cyklov po nastavení

BLBSET a SPMEN bude čítať hodnotu „Lock“ bitov, prípadne „Fuse“ bitov v závislosti na

obsahu Z0 v Z-ukazovateli a zapíše ich do cieľového registra.

Bit 2 – PGWRT, zápis stránky

Ak bit PGWRT a bit SPMEN nastavíme na hodnotu log.1 nasledujúca inštrukcia SPM

(ak sa vyskytne v priebehu 4 hodinových cyklov) realizuje zápis stránky údajmi, ktoré sú

uchované v dočasnom registri. Adresa stránky je daná obsahom hornej časti Z-ukazovateľa.

Údaje v registroch R1 a R0 budú ignorované. Bit PGWRT bude automaticky nulovaný po

skončení zápisu stránky, prípadne ak sa v priebehu 4 hodinových cyklov nevyskytne

inštrukcia SPM.

Bit 1 – PGRES, mazanie stránky

Ak bit PGRES a bit SPMEN je nastavený na hodnotu log.1 nasledujúca inštrukcia

SPM (ak sa vyskytne v priebehu 4 hodinových cyklov) realizuje vymazanie stránky. Adresa

stránky je daná obsahom hornej časti Z-ukazovateľa. Údaje v registroch R1 a R0 budú

ignorované. Obsah PGERS bude automaticky nulovaný po skončení mazania stránky,

prípadne, ak sa v priebehu 4 hodinových cyklov nevyskytne inštrukcia SPM.

Bit 0 – SPMEN, povolenie zápisu do pamäte programu

Bit SPMEN povoľuje vykonanie inštrukcie SPM v nasledujúcich 4 hodinových

cykloch. Ak do bitu SPMEN bude zapísaná log.1 spolu s niektorým s bitov RWWSRE,

BLBSET, PGWRT, alebo PGERS, potom nasledujúca inštrukcia bude mať špeciálny význam,

podľa predchádzajúceho popisu. Ak je nastavený len bit SPMEN, SPM inštrukciou sa uloží

hodnota z registrov R1:R0 do dočasného registra stránky adresovaného Z-ukazovateľom. LSB

Z-ukazovateľa sa ignoruje. SPM bit bude nulovaný po ukončení zápisu, alebo, ak sa

v priebehu 4 hodinových cyklov nerealizuje inštrukcia SPM.

Pri realizácii inštrukcie SPM sa Z-ukazovateľ využíva na adresovanie.

ZH (R31)

ZL (R30)

Ak pamäť FLASH je organizovaná po stránkach, potom programový čítač môže byť

rozdelený na dve časti. Jedna časť pozostáva s najmenej významných bitov a adresuje slovo

Bit 15 14 13 12 11 10 9 8

Označenie Z15 Z14 Z13 Z12 Z11 Z10 Z9 Z8

Bit 7 6 5 4 3 2 1 0

Označenie Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0

Page 162: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 162

vnútri príslušnej stránky a najvýznamnejšie bity adresujú aktuálnu stránku pamäte. Uvedený

prípad je ilustrovaný na obr.81.

0

1 015

Z-ukazovateľ

Programový čítač

ZPAGEMSBZPCMSB

PCMSB PAGEMSB

Stránka

Pamäť programu Stránka

00

01

02

Koniec stránky

Adresa stránky v pamäti FLASH Adresa slova v stránke

PCPAGE PCWORD

Obr.81 Adresovanie pamäte FLASH počas výkonu inštrukcie SPM

Význam jednotlivých premenných z obr.81 je uvedený v tab.65.

Označenie Bit Bity

Z registra

Popis

PCMSB 11 Najvýznamnejší bit v programovom čítači

PAGEMSB 4 Najvýznamnejší bit adresy na adresovanie slova vo

vnútri stránky (32 slov - 5 bitov adresy PC[4:0] )

ZPCMSB Z12 Bit Z-registra, ktorý sa mapuje do PCMSB.

ZPAGEMSB Z5 Bit v Z-registry, ktorý sa mapuje do PAGEMSB.

PCPAGE PC 11:5 Z12:Z6 Adresa stránky v programovom čítači.

PCWORD PC 4:0 Z5:Z1 Adresa slova v programovom čítači. Adresuje slovo

pri plnení dočasného buffera. Musí byť nulový

počas operácie zápisu.

Tab.65 Význam premenných z obr.81

5.4 PROGRAMOVANIE PAMÄTE FLASH, „ SELF-PRGRAMMING“

Obsah pamäte programu môže byť upravovaný po stránkach. Pred programovaním

stránky údajmi uloženými v dočasnom registri stránky je potrebné príslušnú stránku vymazať.

Použitím inštrukcie SPM zapíšeme do dočasného registra práve jedno slovo. Naplnenie

všetkých dočasných registrov stránky je možné realizovať pred mazaním stránky, prípadne

medzi operáciou mazania a zápisu stránky. Obe možnosti sú uvedené nižšie:

- Naplň dočasný buffer stránky.

- Vymaž stránku.

- Zapíš stránku.

- Vymaž stránku.

- Naplň dočasný buffer stránky

Page 163: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 163

- Zapíš stránku

Ak je potrebné zmeniť len časť stránky, zvyšok stránky je potrebné pred mazaním uchovať. V

prípade použitia prvého postupu je vhodné najprv stránku prečítať, vykonať potrebné zmeny

a až upravený obsah znova zapísať.

Pri mazaní stránky je potrebné nastaviť adresu stránky v Z-ukazovateli, do registra

SPMCR zapísať hodnotu „X0000011“ a v priebehu 4 hodinových cyklov vykonať inštrukciu

SPM. Údaje v registroch R1 a R0 budú ignorované. Adresa stránky musí byť zapísaná v časti

PCPAGE Z registra. Počas tejto operácie sa zvyšné bity Z-ukazovateľa ignorujú.

Pripomeňme, že ak je vymazávaná stranka v sekcii RWW, sekciu NRWW môžeme

v priebehu mazania čítať. V prípade mazania stránky v sekcii NRWW činnosť CPU je počas

mazania pozastavená.

Pre naplnenie dočasného buffera stránky (page loading) je potrebné nastaviť adresu

v Z-ukazovateli, naplniť R0 a R1 údajmi, zapísať do registra SPMCR hodnotu „0000001“

a v priebehu 4 hodinových cyklov vykonať inštrukciu SPM. Obsah časti Z registra –

PCWORD je využitý na adresu údajov v dočasnom buffery. Dočasný buffer sa automaticky

vymaže po operácii zápisu stránky, alebo zápisom do bitu RWWSRE v registri SPMCR.

Pri zápise stránky je potrebné nastaviť adresu v Z-ukazovateli, do registra SPMCR

zapísať hodnotu „X0000101“ a v priebehu 4 hodinových cyklov vykonať inštrukciu SPM.

Pripomeňme, že ak je zapisovaná stránka v sekcii RWW, sekciu NRWW môžeme v priebehu

zapisovania čítať. V prípade zapisovania stránky v sekcii NRWW činnosť CPU je počas

zápisu pozastavená.

Ak je povolené SPM prerušenie bude generovaná žiadosť o prerušenie pokiaľ bit

SPMEN v registri SPMCR bude obsahovať hodnotu log.0. Je možné využiť toto prerušenie

namiesto programového testovania obsahu bitu SPMEN. Keď chceme využiť SPM

prerušenie, potom prerušovacie vektory by mali byť premiestnené do sekcie zavádzacieho

programu.

Ak chceme nastaviť „Boot Loader Lock“ bity je potrebné želané dáta zapísať do

registra R0, do registra SPMCR zapísať hodnotu „X0001001“ a v priebehu 4 hodinových

cyklov vykonať inštrukciu SPM.

R0:

Bit 7 6 5 4 3 2 1 0

Označenie 1 1 BLB12 BLB11 BLB02 BLB01 1 1

Ak v registri R0 sú hodnoty bitov 5 až 2 rovné log.0, to zodpovedá naprogramovaniu „Boot

Lock“ bitov. Z hľadiska budúcej kompatibility je vhodné Z-register nastaviť na hodnotu

0x0001, a bity 7,6,1 a 0 registra R0 nastaviť na hodnotu log.1.

Poznamenajme, že operácia zápisu do EEPROM blokuje programovanie FLASH

pamäte.

Pomocou programu je možné aj čítanie obsahu „Fuse“ a „Lock“ bitov. Pri čítaní

obsahu „Lock“ bitov je potrebné nastaviť Z-registre na hodnotu „0x0001“ a nastaviť bity

BLBSET a SPMEN v registri SPMCR. Ak v priebehu 3 hodinových cyklov je vykonaná

inštrukcia LPM hodnoty „Lock“ bitov sa presunú do cieľového registra. Bity BLBSET

a SPMEN sa automaticky vynulujú po skončení čítania, alebo po 3 hodinových cykloch.

Rd:

Bit 7 6 5 4 3 2 1 0

Označenie - - BLB12 BLB11 BLB02 BLB01 LB2 LB1

Page 164: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 164

Postup čítania dolných bitov „Fuse“ bitov je podobný, ako pri čítaní „Lock“ bitov.

Pri čítaní obsahu dolných „Fuse“ bitov je potrebné nastaviť Z-registre na hodnotu „0x0000“ a

nastaviť bity BLBSET a SPMEN v registri SPMCR. Ak v priebehu 3 hodinových cyklov je

vykonaná inštrukcia LPM hodnoty dolných „Fuse“ bitov sa presunú do cieľového registra,

Rd.

Rd:

Bit 7 6 5 4 3 2 1 0

Označenie FLB7 FLB6 FLB5 FLB4 FLB3 FLB2 FLB1 FLB0

Ak chceme čítať horné „Fuse“ bity postup je podobný, ako pri čítaní dolných „Fuse“ bitov,

s tým rozdielom, že do Z-registra nastavíme hodnotu 0x0003.

Rd:

Bit 7 6 5 4 3 2 1 0

Označenie FHB7 FHB6 FHB5 FHB4 FHB3 FHB2 FHB1 FHB0

Pripomeňme, že nenaprogramované „Fuse“ a „Lock“ bity sú interpretované ako log.1.

Ak napájacie napätie Ucc je príliš nízke je možné, že v priebehu programovania pamäte

FLASH môže dôjsť k chybám. Preto je vhodné dodržať nasledovné doporučenia:

1. Ak je to možné je vhodné zakázať pomocou „Boot Loader Lock“ bitov

prepisovanie zavádzacieho programu.

2. V prípade nízkeho napájacieho napätia je vhodné zabezpečiť aby signál

AVR RESET bol aktívny.

3. Počas nízkeho napájacieho napätia je vhodné, aby AVR jadro MCU bolo

v úspornom režime.

Pri programovaní sa na časovanie prístupu k pamäti FLASH využíva kalibrovaný RC

oscilátor. Nasledujúca tabuľka udáva programovacie časy.

Popis Minimálny čas

programovania

Maximálny čas

programovania

Zápis do FLASH (mazanie

stránky, zápis stránky zápis

„Lock“ bitov

3.7 ms

4.5 ms

Tab.66 Čas SPM programovania

5.5 „LOCK“ BITY, „FUSE“ BITY, „SIGNATURE“ BITY A „CALIBRATION“ BITY

MCU ATmega obsahuje vo svojej štruktúre špeciálne bity, ktoré slúžia na zvýšenie

programovej bezpečnosti (neoprávnené čítanie kódu, úprava kódu, obmedzenia na použitie

inštrukcií LPM a SPM a pod.). Tieto bity sú nazvané ako „Lock“ bity. Ďalšia množina

špeciálnych bitov slúži na definovanie základnej konfigurácie obvodu ( voľba zdroja

hodinového signálu, výber veľkosti pamäte zavádzacieho programu a pod.). Tieto bity sú

označované ako „Fuse“ bity. Ďalšou skupinou špeciálnych bitov sú „Signature“ bity. Sú

združené do troch bytov, ktoré označujú výrobcu a typ MCU. Poslednú skupinu špeciálnych

bitov tvoria klibračné bity, „Calibriation“ bity, ktoré slúžia na kalibráciu frekvencie

Page 165: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 165

interného RC oscilátora. Všetky špeciálne bity sa nastavujú (programujú) v priebehu

programovania obvodu.

5.5.1 „Lock“ bity

MCU Atmega8 obsahuje 6 „Lock“ bitov, ktorých funkcia je uvedená v tab.67. Ak

„Lock“ bity nie sú naprogramované ich hodnota je log.1. Po ich naprogramovaní je ich

hodnota rovná log.0. Obsah „Lock“ bitov je možné vymazať aplikovaním príkazu „Chip

Erase“.

Byt „Lock bitov“ Bit Popis Počiatočná hodnota

7 - 1 (nenaprogramovaný)

6 - 1 (nenaprogramovaný)

BLB12 5 Boot lock bit 1 (nenaprogramovaný)

BLB11 4 Boot lock bit 1 (nenaprogramovaný)

BLB02 3 Boot lock bit 1 (nenaprogramovaný)

BLB01 2 Boot lock bit 1 (nenaprogramovaný)

LB2 Lock bit 1 (nenaprogramovaný)

LB1 Lock bit 1 (nenaprogramovaný)

Tab.67 Byt „lock“ bitov

Lock bity pamäte Typ ochrany

LB režim LB2 LB1

1 1 1 Žiadna ochrana pamäte

2 1 0 Programovanie pamäte FLASH a EEPROM je zakázané,

v paralelnom aj sériovom režime

3 0 0 Programovanie a verifikácia pamäte FLASH a EEPROM

je zakázaná v paralelnom i sériovom režime

BLB0

režim

BLB02 BLB01

1 1 1 Žiadne obmedzenia pre použitie inštrukcií SPM a LPM pre

prístup do oblasti aplikačného programu.

2 1 0 Inštrukciou SPM nemôžeme zapisovať do aplikačnej

oblasti pamäte.

3 1 0 Inštrukciou SPM nemôžeme zapisovať do aplikačnej

pamäte. Inštrukciou LPM zo zavádzacieho programu

nemôžeme čítať aplikačnú oblasť pamäte. Ak prerušovacie

vektory sú lokalizované v oblasti pamäti zavádzacieho

programu, potom je obsluha prerušení zakázaná pokiaľ sa

vykonáva program v aplikačnej oblasti

4 0 1 Inštrukciou LPM v sekcii zavádzacej, nemôžeme čítať

z aplikačnej sekcie pamäte. Ak prerušovacie vektory sú

lokalizované v oblasti pamäti zavádzacieho programu,

potom je obsluha prerušení zakázaná pokiaľ sa vykonáva

program v aplikačnej oblasti

BLB1

režim

BLB12 BLB11 Typ ochrany

Page 166: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 166

1 1 1 Žiadne obmedzenia pre použitie inštrukcií SPM a LPM pre

prístup do oblasti pamäte zavádzacieho programu

2 1 0 Inštrukciou SPM nemôžeme zapisovať do oblasti pamäte

zavádzacieho programu.

3 0 0 Inštrukciou SPM nemäžeme zapisovať do oblasti pamäte

zavádzacieho programu a inštrukciou LPM v oblasti

aplikačného programu nemäžeme čítať v oblasti

zavázacieho programu. Ak prerušovacie vektory sú

umiestnené v oblasti aplikačnej, obsluha žiadosti o

prerušenie je zakázaná pokiaľ sa vykonáva program

z oblasti pamäte zavádzacieho programu.

4 0 1 Inštrukciou LPM v aplikačne oblasti nemôžeme čítať

oblasť zavádzacieho programu. Ak prerušovacie vektory

sú umiestnené v oblasti aplikačnej, obsluha žiadosti o

prerušenie je zakázaná pokiaľ sa vykonáva program

z oblasti pamäte zavádzacieho programu.

Ta.68 Ochranné režimy pamäte

5.5.2 „FUSE“ bity

MCU Atmeg8 obsahuje dva byty tvorené „Fuse“ bitmi. Tabuľka 69 a 70 popisuje ich

základné funkcie.

Symbol Bit Popis Počiatočná hodnota

RSTDISBL 7 Výber či PC6 bude konfigurovaný ako

V/V, alebo RST

1 (nenaprog., PC6 je vo

funkcii RESST)

WDTON 6 WDT vždy v činnosti 1 (nenaprog.,WDT povolené

bitom WDTCR)

SPIEN 5 Povolenie seriového programovania 0 (naprogramovaný, SPI

povolené)

CKOPT 4 Voľba oscilátora 1 (nenaprogramovaný)

EESAVE 3 Obsah EEEPROM je pri mazaní

obvodu (Chip Erase) zachovaný

1 (nenaprogramovaný)

EEPROM nezachovaná

BOOTSZ1 2 Výber veľkosti pamäte pre zavádzací

program

0 (naprogramovaný)

BOOTSZ0 1 Výber veľkosti pamäte pre zavádzací

program

0 (naprogramovaný)

BOOTRST 0 Voľba reštartovacieho vektora 1 (nenaprogramovaný)

Pozn.: Podrobnejší popis významu jednotlivých bitov je uvedený pri popisoch príslušných

modulov MCU.

Tab.69 Popis „Fuse“ bitov v prvom Byte

Symbol Bit Popis Počiatočná hodnota

BODLEVEL 7 Brown-out detektor, nastavenie úrovne 1 (nenaprogramovaný)

BODEN 6 Brown-out detektor povolený 1 (nenaprogramovaný,

BOD zakázaný)

SUT1 5 Voľba času prechodu do aktívneho stavu 1 ( nenaprogramovaný)

Page 167: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 167

SUT0 4 Voľba času prechodu do aktívneho stavu 0 (naprogramovaný)

CKSEL3 3 Voľba zdroja hodinového signálu 0 ( naprogramovaný)

CKSEL2 2 Voľba zdroja hodinového signálu 0 ( naprogramovaný)

CKSEL1 1 Voľba zdroja hodinového signálu 0 ( naprogramovaný)

CKSEL0 0 Voľba zdroja hodinového signálu 0 ( naprogramovaný)

Tab.70 Popis „Fuse“ bitov v nultom byte

5.5.3 „Signature“ Byty

MCU má vyhradené tri byty na uchovanie kódu pre identifikáciu MCU. Uvedený kód

môžeme čítať v režime sériového i paralelného programovania obvodu. Tieto tri Byty majú

nasledovný význam:

1. 0x000: 0x1E označuje výrobcu ATMEL

2. 0x001: 0x93 označuje 8-KB pamäte FLASH

3. 0x002: 0x07 označuje MCU ATmega8

5.5.4 Kalibračný Byt

MCU ATmega8 uchováva štyri rôzne kalibračné hodnoty pre interný RC oscilátor.

Tieto hodnoty sú uchované na adresách 0x000, 0x001, 0x002 a 0x003 pre 1,2,4 a 8 MHz.

V priebehu reštartu zariadenia sa automaticky presúva kalibračná hodnota pre 1MHz do

registra OSCCAL. Iné kalibračné hodnoty je potrebné presunúť programovo.

6. PROGRAMOVANIE PAMÄTÍ FLASH A EEPROM

Pri programovaní pamätí mikrokontroléra môžeme využiť systém paralelného, alebo

sériového programovania. Paralelné programovanie sa využíva najmä v prípadoch, ak

mikrokontrolér programujeme mimo aplikácie. Sériové programovanie je vhodné na

programovanie mikrokontrolérov priamo vo vyvíjanej aplikácii. Poznamenajme, že návrhár

musí v procese návrhu umožniť pripojenie sériového programátora k programovanému

mikrokontroéru.

6.1 PARALELNÉ PROGRAMOVANIE MCU

V tejto časti sú uvedené možnosti paralelného programovania FLASH pamäte

programu, EEPROM pamäte dát, „Lock“ bitov a „Fuse“ bitov mikrokontroléra ATmega8. Na

obr.1 sú znázornené vývody MCU, ktoré sú využívané v procese paralelného programovania.

Page 168: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 168

PD1

PD2

PD3

PD4

PD5

PD6

PD7

RESET

PC2

XTAL1 GND

PC[1:0]:PB[5:0]

AVcc

Vcc

ATmega8

dáta

+5V +5V

RDY/BSY

OE

WR

BS1

XA0

XA1

PAGEL

+12V

BS2

Obr.82 Paralelné programovanie MCU

Význam jednotlivých signálov pri paralelnom programovaní je uvedený v tab.71.

Označenie Vývod Vstup/Výstup Funkcia

RDY//BSY PD1 Výstup 0: MCU zaneprázdnený programovaním

1: MCU pripravené na prijatie nového príkazu

/OE PD2 Vstup Povolenie výstupu (aktívna „0“)

/WR PD3 Vstup Impulz zápisu (aktívna „0“)

BS1 PD4 Vstup Výber Bytu 1 ( „0“ určuje spodný Byte, „1“ určuje

horný Byte)

XA0 PD5 Vstup XTAL bit 0

XA1 PD6 Vstup XTAL bit1

PAGEL PD7 Vstup Naplnenie stránky pamäte

BS2 PC2 Vstup Výber Bytu 2 („0“ určuje spodný Byte, „1“ určuje

horný Byte)

DATA PC1:0

PB5:0

Vstup/výstup Obojsmerná údajová zbernica výstupná ak /OE je

„0“)

Tab.71 Význam signálov MCU v režime paralelného programovania

Podrobný popis postupu programovania MCU v paralelnom režime je uvedený v technickej

dokumentácii výrobcu.

6.2 SÉRIOVÉ PROGRAMOVANIE MCU

Pamäť FLASH a pamäť EEPROM je možné programovať v sériovom režime

s využitím sériového rozhrania SPI. Sériovým programovaním MCU sa budeme zaoberať

podrobnejšie, pretože tento postup je využívaný v uvedených aplikáciách. Sériové rozhranie

SPI pozostáva zo signálov SCK, MOSI (vstup), MISO (výstup). Na obr.83 sú znázornené

vývody MCU, ktoré sú využívané v procese sériového programovania.

Page 169: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 169

PB3

PB4

PB5

XTAL1

RESET

GND

AVcc

Vcc

ATmega8

2.7-5.5V

MOSI

MISO

SCK

Pozn.: Ak je MCU synchronizovaný interným oscilátorom, nepripája sa XTAL1 na externý

zdroj hodinového signálu

Obr.83 Sériové programovanie MCU

Význam jednotlivých signálov pri sériovom programovaní MCU je uvedený v tab.72.

Označenie Vývod Vstup/výstup Popis

MOSI PB3 Vstup Sériový vstup dát

MISO PB4 Výstup Sériový výstup dát

SCK PB5 Výstup Hodinový signál

Tab.72 Význam jednotlivých signálov pri sériovom programovaní MCU.

Minimálny čas trvania nízkej úrovne a vysokej úrovne hodinového signálu SCK je

definovaný nasledovne:

Nízka úroveň má trvať dlhšie než 2 CPU hodinové cykly pre fclk < 12 MHz a 3 CPU hodinové

cykly pre fclk > 12 MHz.

Vysoká úroveň má trvať dlhšie než 2 CPU hodinové cykly pre fclk < 12 MHz a 3 CPU

hodinové cykly pre fclk > 12 MHz.

Pri zapisovaní dát do MCU budú údaje definované nábežnou hranou SCK. Pri čítaní obsahu

MCU sú údaje definované zostupnou hranou SCK.

Programovanie a verifikácia obsahu ATmega8 pri sériovom programovaní je

realizovaná nasledujúcou doporučenou postupnosťou:

1. Pripojenie napájacieho napätia, medzi Vcc a GND, pričom /RESET a SCK sú na

úrovni log.0.

2. Čakaj najmenej 20 ms a povoľ sériové programovanie obvodu vyslaním inštrukcie

„povolenie programovania“ prostredníctvom MOSI.

3. Na overenie synchronizácie prenosu sa v priebehu vysielania tretieho bytu inštrukcie

prijíma echo (druhý vyslaný Byte 0x53). V oboch prípadoch, ak synchronizácia

vysielania je správna, alebo nie, je potrebné vyslať všetky štyri Byty inštrukcie. Ak

prijaté echo nie je správne, je potrebné na vstup /RESET aplikovať kladný impulz

a vyslať nový príkaz „ povolenie programovania“.

4. Pamäť FLASH je programovaná po stránkach. Veľkosť stránky je 32 slov. Stránka sa

napĺňa Byt po Byte. Pre korektné napĺňanie stránky musí byť nižší Byt zapísaný pred

zápisom vyššieho Bytu na tú istú adresu. Stránka pamäte programu sa po naplnení

zapíše inštrukciou „zápis stránky pamäte programu“ so siedmimi MSB adresy. Ak nie

Page 170: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 170

je využitý test pripravenosti MCU je potrebné čakať minimálne 4.5 ms pred

manipuláciou s ďalšou stránkou.

5. EEPROM pamäť je programovaná Byt po Byte. Inštrukcia zápisu do pamäte

EEPROM je doplnenú o príslušnú adresu a dáta. Pamäťové miesto je najskôr

automaticky mazané a potom sú zapísané nové dáta. Ak sa nevyužíva test

pripravenosti MCU je potrebné pred zápisom ďalšieho Bytu počkať minimálne 9 ms.

6. Obsah každého pamäťového miesta môže byť verifikovaný použitím inštrukcie čítaj,

ktorá prostredníctvom výstupu MISO vracia obsah adresovaného pamäťového miesta.

7. Po skončení programovania obvodu je /RESET nastavený na úroveň log.1 a MCU

môže pokračovať v normálnom režime.

8. Vypnutie (ak je potrebné). Nastaviť /RESET na úroveň log.1 a vypnúť napájanie.

Programové testovanie pripravenosti pri zápise do pamäti FLASH môžeme realizovať čítaním

obsahu pamäťového miesta vo vnútri stránky, ktorá je práve programovaná. Ak

programovanie ešte prebieha budeme čítať hodnotu 0xFF. Akonáhle prečítame očakávanú

hodnotu, MCU je pripravený na programovanie ďalšej stránky. Poznamenajme, že obsah celej

stránky je zapisovaný simultánne a preto ľubovolná adresa vnútri stránky môže byť využitá na

programový trest pripravenosti MCU. Ak do celej stránky zapisujeme hodnotu 0xFF, potom

nie je možné využiť programový test a je potrebné počkať minimálne 4.5 ms pred zápisom

ďalšej stránky. Po operácii mazania MCU všetky pamäťové miesta obsahujú hodnotu 0xFF,

preto pri programovaní celej stránky obsahom 0xFF ich môžeme preskočiť.

Programové testovanie pripravenosti pri zápise do pamäti EEPROM môžeme realizovať

pomocou čítania obsahu pamäťového miesta, do ktorého zapisujeme. Ak programovanie ešte

prebieha budeme čítať hodnotu 0xFF. Akonáhle prečítame očakávanú hodnotu, MCU je

pripravený na programovanie ďalšieho pamäťového miesta. Ak hodnota zapisovaného Bytu je

0xFF je potrebné postupovať obdobne, ako pri zápise do pamäte FLASH. V tabuľke 73 sú

uvedené časy oneskorenia pri zápise do pamätí FLASH a EEPROM.

Označenie Minimálny čas čakania

tWD_FUSE 4.5 ms

tWD_FLASH 4.5 ms

tWD_EEPROM 9.0 ms

tWD_ERASE 9.0 ms

Tab.73 Časy oneskorenia pri programovaní MCU

Na obr.84 sú uvedené priebehy signálov MOSI, MISO a SCK pri sériovom programovaní.

MSB LSBSériový vstup

dát MOSI

MSB LSBSériový výstup

dát MISO

Hodinový signál

SCK

Vzorkovanie

Page 171: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 171

Obr.84 Signály MISO, MOSI a SCK pri sériovom programovaní

V tab.74 sú uvedené inštrukcie sériového programovania MCU.

Inštrukcia Byte 1 Byte 2 Byte 3 Byte 4 Operácia

Povolenie

programovania

1010 1100 0101 0011 xxxx xxxx xxxx xxxx Povolenie sériového

programovania

Mazanie MCU 1010 1100 100x xxxx xxxx xxxx xxxx xxxx Mazanie MCU

EEPRO a FLASH

Čítaj pamäť

programu

0010 H000 0000 aaaa bbbb bbbb oooo oooo Čítanie (H vyšší/nižší

Bytu) dát o z pamäte

programu z adresy

a:b

Naplnenie

stránky

pamäte

programu

0100 H000 0000 xxxx xxxb bbbb iiii iiii Zápis H (vyšší/nižší

Bytu) na adresu b

stránky pamäte

programu

Zapíš stránku

pamäte

programu

0100 1100 0000 aaaa bbbx xxxx xxxx xxxx Zapíš stránku pamäte

programu adresovanú

a:b

Čítaj

EEPROM

pamäť

1010 0000 00xx xxxa bbbb bbbb oooo oooo Čítaj dáta

z EEPROM pamäte

z adresy a:b

Zapíš

EEPROM

pamäť

1100 0000 00xx xxxa bbbb bbbb iiii iiii Zapíš dáta i do

EEPROM na adresu

a:b

Čítaj „Lock“

bity

0101 1000 0000 0000 xxxx xxxx xxoo oooo Čítaj „Lock“ bity, o

Zapíš „Lock“

bity

1010 1100 111x xxxx xxxx xxxx 11ii iiii Zapíš „Lock“ bity, i

Čítaj

„Signature“

Byte

0011 0000 00xx xxxx xxxx xxbb oooo oooo Čítaj „Signature“

Byte o z adresy b

Zapíš „Fuse“

bity

1010 1100 1010 0000 xxxx xxxx iiii iiii Nastavenie „Fuse“

bitov,i

Zapíš „Fuse

Hight“ bity

1010 1100 1010 1000 xxxx xxxx iiii iiii Nastavenie „Fuse

Hight“ bitov,i

Čítaj „Fuse“

bity

0101 1000 0000 0000 xxxx xxxx oooo oooo Čítaj „Fuse bity“, o

„0“-naprogramovaný

Čítaj „Fuse

Hight“ bity

0101 1000 0000 1000 xxxx xxxx oooo oooo Čítaj „Fuse Hight“

bity, o

Čítaj

kalibračný

Byte

0011 1000 00xx xxxx 0000 00bb oooo oooo Čítaj kalibračný

Byte, o

Poznámky: a= vyššie bity adresy, b=nižšie bity adresy, H= 0-dolný Byte, 1-vrchný Byte,

o=výstupné dáta, i=vstupné dáta, x=nevýznamná hodnota

Tab.74 Súbor inštrukcií pre sériové programovanie

Page 172: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 172

Sériové programovanie umožňuje užívateľovi programovať MCU priamo v aplikácii,

prostredníctvom rozhrania SPI. Túto možnosť užívateľ ocení najmä v procese vývoja

a ladenia aplikácie, prípadne pri modifikácii programového vybavenia.

7. PROSTRIEDKY NA VÝVOJ APLIKAČNÝCH PROGRAMOV

Výrobca mikrokontrolérov AVR RISC bezplatne ponúka voľne dostupné programové

prostriedky pre tvorbu, editovanie, preklad, simuláciu, prípadne emuláciu aplikačných

programov. Najpoužívanejšie z nich sú: WAVRASM, AVR Studio.

Programový systém „WAVRASM“ umožňuje písať a editovať programy v jazyku

symbolických adries, AVR assembler, pod OS WINDOWS. Preložiť a spojiť ich do formy

intelhex, vhodnej na zavedenie do pamäte programu mikrokontroléra. V procese prekladu

a linkovania sa vytvára viacero súborov.

Súbor s príponou .obj je možné využiť ako vstupný súbor do simulátora/emulátora

AVR Studio. Súbor s príponou .hex (pokiaľ je pri voľbe „option“ zvolená táto možnosť).

Súbor s príponou .lst (pokiaľ je pri voľbe „option“ zvolená prípona lst) obsahuje správu

o preklade.

Zdrojový program sa spracováva vo vlastnom editore a všetky činnosti sa volajú

prostredníctvom prehľadných položiek menu. Každý súbor je zobrazený vo vlastnom okne.

Počet súčasne otvorených súborov nie je obmedzený. Na obr.85 je zobrazená pracovná plocha

systému „WAVRASM“.

Obr.85 Pracovná plocha systému „wavrasm“

Jednotlivé položky pracovnej plochy majú nasledovný význam:

File: Položka pre prácu so súbormi – otvorenie, uloženie, zatvorenie a tlač súboru.

Edit: Položka pre prácu s textom – kopírovanie, mazanie a vkladanie textu.

Search: Položka na vyhľadávanie textového reťazca.

Assemble: Položka pre spustenie prekladu zdrojového súboru.

Option: Položka pre nastavenie vybraných parametrov prekladu.

Page 173: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 173

Window: Položka pre organizovanie otvorených okien.

Help: Integrovaná nápoveda.

V editovacom okne je možné napísať program v jazyku symbolických adries a preložiť ho do

zvoleného formátu. Po preložení sa objaví okno so správami o preklade „Message“. Ak je

prekladaný program bez chýb, prekladač vytvorí súbory meno.hex, meno.obj, a meno.lst. Na

záver korektného prekladu prekladač vypíše správu „ Assembly complete with no errors“. Ak

sa v programe vyskytnú chyby, potom prekladač vypíše ich zoznam a na záver uvedie

i celkový počet chýb. V prípade, že na chybovú správu v okne „Message“ sa klikne ľavým

tlačidlom myši riadok programu v editovacom okne, obsahujúci chybu, sa zvýrazní červenou

farbou.

Programový systém „WAVRASM“ je vhodný prostriedok na písanie a preklad

jednoduchých užívateľských programov v jazyku symbolických adries pre mikrokontroléry

AVR. Uvedený systém však nedovoľuje simuláciu a emuláciu aplikačných programov

a priamo nepodporuje programovanie obvodov. Z tohto dôvodu je vhodnejšie na tvorbu

aplikácií využívať integrované vývojové prostredie „AVR Studio“.

Na www stránkach výrobcu, www.atmel.com, je možné získať voľne šíriteľnú verziu

integrovaného vývojového prostredia určenú pre vývoj aplikácií mikrokontrolérov AVR

s názvom „AVR Studio 4“. „AVR Studio 4“ môže pracovať v prostredí s operačným

systémom Windows 98/XP/ME/2000 a NT. „AVR Studio“ obsahuje systém správy projektov,

editor zdrojových súborov a obvodový simulátor. Dovoľuje spolupracovať s obvodovými

emulátormi, vývojovými doskami 8-bitových mikrokontrolérov ATMEL a programátorom

AVRISP. „AVR Studio 4“ je pohodlným prostriedkom na vývoj a ladenie aplikačného

programového vybavenia. Pretože prevažná väčšina uvádzaných aplikácií bola vyvíjaná

v tomto prostredí v ďalšom texte bližšie popíšeme vlastnosti a prácu s týmto programovým

systémom.

7.1 AVR Studio 4

Dnes sa najčastejšie stretneme s dvoma verziami systému „AVR Studio 3“ a „AVR

Studio 4“. Predpokladáme, že budeme používať novšiu verziu, „AVR Studio 4“. Pri inštalácii

je potrebné spustiť program „AVRSTUDIO.EXE“. Tento program zabezpečí korektné

nainštalovanie celého systému. Poznamenajme, že v priebehu inštalácie sa systém pýta

užívateľa na umiestnenie rozbaľovaných súborov. Inštalácia „AVR Studio 4“ predpokladá, že

na počítači je nainštalovaný „Explorer ver.5“, alebo vyššia verzia.

„AVR Studio“ je charakterizované príjemným užívateľským rozhraním. Pri spustení

sa objaví dialógové okno, uvedené na obr.86.

Page 174: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 174

Obr.86 Úvodné dialógové okno systému „AVR Studio 4“

V prípade, že chceme vytvoriť novú aplikáciu zvolíme možnosť tvorby nového projektu

výberom položky „Create New Projekt“. Zvolením uvedenej položky sa vyvolá dialógové

okno, v ktorom sa nastavujú vlastnosti projektu, ktorý budeme vyvíjať.

Obr.87 Nastavenie parametrov projektu

1. Nastavenie typu projektu v AVR Studio ver.09 ponúka len jednu možnosť tvorby

projektu a to tvorbu programu v jazyku symbolických adries (assembler). V dohľadnej

dobe sa predpokladá, že „AVR Studio 4“ bude doplnené o možnosť využívať aj jazyk

C, potom položka „Project Type“ bude obsahovať viacero volieb.

2. Nastavenie mena projektu „Project Name“. Meno projektu môže byť ľubovolné.

V uvedenom príklade sa projekt bude nazývať „program1“.

3. Nastavenie mena zdrojového asm súboru. Toto meno môže byť ľubovolné, ale my ho

necháme rovnaké ako meno projektu.

4. Nastavenie cesty, kde budú uchované súbory projektu.

Po úvodnom nastavení projektu pokračujeme stlačením tlačidla „Next“. Objaví sa ďalšie

dialógové okno, v ktorom zvolíme technické prostriedky, s ktorými bude definovaný projekt

pracovať.

Page 175: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 175

Obr.88 Voľba Technických prostriedkov

Pokiaľ nemáme k počítaču pripojený ľubovolný z uvedených emulačných prostriedkov

(JTAGICE mkll, ICE40, ICE50, JTAG ICE, ICE200) musíme zvoliť ako pracovné prostredie

ladenia programu „AVR Simulator“. V zozname typov MCU, „Device“ vyberieme ten typ

mikrokontroléra, pre ktorý budeme projekt vyvíjať. Na obr. X je zvolené prostredie AVR

simulátor a mikrokontrolér ATmega8.

Po definovaní technických prostriedkov zvolíme položku „Finish“. Na základe definovaných

parametrov sa vytvorí projekt Program1 a otvorí sa editovacie okno na písanie aplikačného

programu, obr.89.

Page 176: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 176

Obr.89 Editovacie okno na tvorbu aplikačných programov v jazyku symbolických adries

Programový systém „AVR Studio 4“ vytvoril prázdny súbor s názvom „program1.asm“.

Ak do editovacieho okna napíšeme „ ; Prvý projekt vytvorený pre MCU AVR „ a uložíme ho

(v položke „File“ vyberieme „Save“ ), potom sa vytvorí súbor „program1.asm“, obr.90.

Page 177: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 177

Obr.90 Vytvorenie súboru „Program1.asm“

Uvedeným postupom sme nastavili parametre a spustili programový systém „AVR Studio 4“.

Popíšme bližšie grafické užívateľské rozhranie. Plochu obrazovky môžeme rozdeliť do

šiestich častí, obr.91.

Page 178: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 178

Obr. 91 AVR Studio 4

1. V prvom riadku ponuky nájdeme štandardné ponuky určené pre prácu so súbormi,

prostriedkami určenými na riadenie projektov, na usporiadanie okien a integrovanú

nápovedu.

2. V druhom riadku ponuky sú uvedené grafické symboly umožnujúce volať často

používané funkcie. (práca so súbormi - uložiť, otvoriť..., nastavenie „break point“

a pod.)

3. Pracovný priestor obsahuje informácie o súboroch projektu, informácie o V/V

registroch a vybranom mikrokontroléry.

4. Editovacie okno je určené na písanie a editovanie kódu programu.

5. Výstupné okno zobrazuje vybrané stavové informácie.

6. Systémový riadok zobrazuje v akom režime pracuje „AVR Studio“. V uvedenom

prípade zobrazuje režim „AVR Simulator“ pre MCU „ATmega8“.

Bližší popis grafického užívateľského prostredia je uvedený v integrovanej nápovede (HELP),

prípade na www stránkach výrobcu.

Po uvedených základných informáciách môžeme pokračovať v písaní prvého programu.

Programovaniu v jazyku symbolických adries je venovaná kapitola „ Programovanie“, z toho

dôvodu sa v rámci popisu práce so systémom „AVR Studio“ obmedzíme len na stručný

výklad postupu prác v grafickom užívateľskom prostredí, bez popisu vlastného programu.

Predpokladajme, že sme napísali nasledovný program:

;Prvy projekt vytvoreny pre MCU AVR

.include "ATmegadef.inc"

Page 179: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 179

.def pomoc=r16

.def pomoc1=r17

.org 0x00

rjmp START

nop ;rezervovane pre vektory preruseni

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

nop

START: sbi DDRB,0 ;nastaveie V/V na vystup

cbi PORTB,0 ;nuvanie PB0, svieti LED

KONEC: rjmp KONEC

Po napísaní zdrojového programu vyberieme z položky „Project“ voľbu „Build“.

Vo výstupnom okne sa zobrazí informácia o korektnom preklade a dĺžke preloženého kódu,

obr.92.

Page 180: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 180

Obr.92 Správa o preklade

Pokiaľ sa v správe o preklade objaví informácia „Assembly complete with no errors“,

zdrojový program bol napísaný bez syntaktických chýb, a ako výsledok prekladu získame

súbory potrebné pre korektnú činnosť ďalších prostriedkov „AVR Studia“ a súbor určený pre

naprogramovanie konkrétneho mikrokontroléra (pri uvedenom nastavení „AVR Studia“

s príponou hex).

7.1.1 Simulácia so zdrojovým kódom

„AVR Studio“ môže pracovať v rôznych režimoch. Program bol napísaný v tzv.

editovacom režime. Teraz sa pokúsime simulovať činnosť mikrokontroléra

naplneného kódom zo súboru „program1.hex“. Z položky „Debug“ vyberieme „Start“. Žltá

šípka, obr.93 ukazuje na prvú inštrukciu pamäte programu ( rjmp START ).

Page 181: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 181

Obr.93 Okno pre ladenie programu, „Debugging mode“.

Pracovný priestor sa zmení

z projektového okna na V/V okno,

obr.94.

Obr.94 V/V okno

Vo V/V okne je uvedených viacero

položiek (ikon) dovoľujúcich

zobrazovať obsah registrov a stav

jednotlivých komponentov MCU. Ak

vyberieme položku „I/O ATMEGA8“

dostaneme sa k ponuke jednotlivých

V/V subsystémov MCU, obr.95.

Obr.95 Zobrazenie stavu V/V podsystému MCU

Page 182: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 182

Ak nás zaujíma monitorovanie napr.

vstupno-výstupnej brány, „PORTB“, potom

pri výbere položky „PORTB“ sa dostaneme

až k obsahom jednotlivých registrov, obr.96.

Obr.96 Zobrazenie obsahu registrov

PORTB, DDRB a PINB

Poznamenajme, že systémový riadok zobrazuje informácie o stave systému „AVR Studio 4“.

Obr.97 Informácie o stave systému

V systémovom riadku je zobrazené, že simulované zariadenie je MCU ATmega8 a pracujeme

v simulačnom automatickom režime. Simulácia je zastavená.

Teraz môžeme prikročiť k vlastnej simulácii. Priebeh simulácie je možné riadiť vhodnou

voľbou rôznych simulačných režimov položke „Debug“ a tzv. „Break Point“. Bližšie

informácie o možnostiach riadenia priebehu simulácie je možné získať z integrovanej

nápovedy, prípadne z popisu systému „AVR Studio 4“. Jednotlivé režimy sú natoľko

ilustratívne, že ich ľahko pochopíme pri práci so systémom. Pre demonštračné účely sa

vrátime k nášmu programu. Priebeh programu budeme krokovať použitím klávesy F11.

A súčasne sledujeme vo V/V okne stav registra DDRB a PORTB. Žltá šípka zobrazuje

inštrukciu, ktorá sa bude v nasledujúcom kroku vykonávať. Pri výkone inštrukcie sbi

DDRB,0 sa nastaví nultý bit v registri DDRB, čo je ilustrované čiernym políčkom v registri

DDRB vo V/V okne, obr.98.

Page 183: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 183

Obr.98 Nastavenie nultého bitu registra DDRB

Režim simulácie dovoľuje overiť funkčnosť väčšiny aplikačných programov. Po istých

skúsenostiach návrhár ocení možnosť odskúšania priebehu aplikačného programu bez potreby

programovania obvodu.

7.1.2 Programovanie MCU

Predpokladajme, že činnosť nami navrhnutého programu bola v procese simulácie

overená a vyhovuje požiadavkám, ktoré sú

na aplikáciu kladené. V tomto prípade

ostáva len naprogramovať vlastný

mikrokontrolér obsahom, ktorý je po

úspešnom preklade zdrojového súboru

uložený v súbore „Program1.hex“. Na túto

činnosť je však potrebné, aby sme mali

k dispozícii aspoň jednoduché

programovacie zariadenie. Poznamenajme,

že demonštračný modul „ATmega8“

umožňuje využívať integrovaný

programovací systém AVRprog. Pokiaľ

máme pripojené programovacie zariadenie

na sériové rozhranie personálneho

počítača a je zapnuté jeho napájacie

napätie, potom po výbere položky „AVR

prog...“ v ponuke „Tools“ sa zobrazí

dialógové okno programovacieho

zariadenia, obr.99. V prípade, že niečo nie

je v poriadku (chýba napájacie napätie,

nepripojený programátor a pod.) na

obrazovke sa objaví varovanie, že systém

dané zariadenie nenašiel, obr.100.

Obr.99 Úvodné dialógové okno programátora

„AVRprog“

Page 184: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 184

Pomocou programátora AVRprog je možné

zapisovať nový obsah do pamätí FLASH

a EEPROM mikrokontroléra, verifikovať ho,

prípadne prečítať (ak čítanie nie je blokované).

Obr.100 Varovanie

Po úspešnom nadviazaní komunikácie s programátorom je potrebné v položke „Device“

vybrať typ mikrokontroléra, ktorý budeme programovať. Na obr. 99 bolo vybrané zariadenie

ATmega8. V druhom kroku je potrebné zvoliť súbor, ktorý budeme do MCU programovať.

V ilustračnom príklade je to súbor „C:\WinAVR\pn\dsp\dsp.hex. Posledným krokom je

proces programovania zvolenej pamäte FASH/EEPROM, ktorý spustíme „tlačidlom“

„Program“. Po úspešnom zavedení programu do pamäte MCU sa v dialógovom okne objaví

nápis „Erasing Device...Programing...Verifying...OK“. V prípade, že sa v priebehu

programovania vyskytne chyba, objaví sa varovanie s nápisom „ Programming failed“.

Poznamenajme, že v prípade programovania oboch pamätí FLASH aj EEPROM je potrebné

programovať ako prvú pamäť FLASH a až potom EEPROM. Tento postup je potrebné

dodržať z toho dôvodu, že pred programovaním pamäte FLASH sa vykonáva vymazanie

celého obvodu. Ďalšie možnosti, ktoré poskytuje dialógové okno programátora je verifikácia

obsahu, pri ktorej sa porovnáva obsah zvolenej pamäte so zvoleným súborom, (v riadku Hex

file) a čitanie obsahu pamätí. Pri čítaní zvolenej pamäte sa jej obsah uloží do zvoleného

súboru .

Programátor ponúka aj rozšírené

možnosti v ponuke „Advanced..“ s ich

využitím je možné nastaviť „Fuse“ a

„Lock“ bity.

Horná časť dialógového okna slúži

na nastavenie „Lock“ bitov a tým voľbu

režimu ochrany pamätí. V hornom riadku

v ľavej položke môžeme nastaviť režim

ochrany pamätí FLASH a EEPROM.

V strednej časti, (BLB0) volíme režim

ochrany aplikačnej časti pamäte

a v pravej časti, (BLB1) režim ochrany

sekcie zavádzacieho programu.

Podrobnejší popis a význam „fuse“ bitov

je uvedený v kapitole 5.5.1.

Stredná časť dialógového okna

slúži na nastavenie vybraných parametrov

MCU prostredníctvom „fuse“ bitov.

Podrobnejší popis a význam „fuse“ bitov

je uvedený v kapitole 5.5.2.

V spodnej časti sú uvedené

informácie o programovanom obvode,

(kap5.5.3 a 5.5.4) a informácie

o vlastnom programátore.

Page 185: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 185

Obr.101 Dialógové okno „Advanced“

8 PROGRAMOVANIE MIKROKONTROLÉROV

Vývoj každého produktu, ktorý využíva programovateľné zariadenie sa skladá z dvoch

základných krokov:

Vývoj, návrh a realizácia obvodových prostriedkov,

Tvorba aplikačného programového vybavenia.

V procese návrhu obvodového riešenia musí návrhár dokonale poznať vlastnosti procesora,

ktorý chce v návrhu využiť. Nestačí ak sa návrhár oboznámi len s elektrickými parametrami

obvodov. Musí už pri návrhu rešpektovať, rýchlosť procesora/zložitosť algoritmu, zohľadniť

inštrukčný súbor, kapacitu a organizáciu pamätí, možnosti prerušovacieho systému, skladbu

periférnych modulov a mnoho ďalších špecifických vlastností použitého obvodu. Ideálnym

riešením je, keď návrhár, ktorý vyvíja obvodový návrh je súčasne schopný navrhnúť aj

aplikačné programové vybavenie. Je zrejmé, že toto riešenie, najmä pri vývoji väčších

projektov, nie je z kapacitných dôvodov realizovateľné. Je však nevyhnutné, aby v procese

obvodového návrhu vedel vývojár zohľadniť všetky aspekty vyplývajúce z budúceho

programového vybavenia a bol schopný naprogramovať základné obslužné a testovacie

programy. Z toho dôvodu sú v ďalšej časti uvedené základné informácie o možnostiach

programovania v jazyku symbolických adries. Poznamenajme, že pre mikrokontroléry

ATMEL AVR je vyvinutých viacero prekladačov z jazyka C (aj voľne šíriteľné verzie), ktoré

je možné využiť pri tvorbe zložitejších aplikácií.

8.1 V/V REGISTRE MCU

V/V pamäťový priestor mikrokontroléra pozostáva zo 64 V/V funkcií, ktoré sú

prístupné z aplikačného programu. Jednotlivé V/V funkcie sú realizované ako riadiace,

stavové a údajové registre. Sú prístupné priamo, ako V/V registre (adr0x0 až 0x3F), alebo ako

časť údajového priestoru v adresovom priestore umiestnenom medzi poľom univerzálnych

registrov a internou pamäťou SRAM (0x20 až 0x5F).

Ak pristupujeme k vybranému registru (napr. PORTB) priamo, ako k V/V registru,

potom na zapísanie/čítanie obsahu používame inštrukcie OUT a IN:

out PORTB, r16 ; zápis obsahu r16 do registra PORTB

in r16,PORTB ; čítanie obsahu z registra PORTB do registra r16

Na nastavenie/nulovanie zvoleného bitu registra (napr. bit2 PORTB) používame:

sbi PORTB,2 ; nastavenie 2. bitu PORTB

cbi PORTB,2 ;nulovanie 2. bitu PORTB

Ak pristupujeme k vybranému registru, ako k pamäti údajov, potom na zápis/čítanie

obsahu môžeme využívať inštrukcie ako na prístup k pamäti dát. Napríklad:

Page 186: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 186

ldi r31,0x00 ; nastavenie ukazovateľa (napr.Z) na adresu registra PORTB

ldi r30,0x38 ; dolný byte ukazovateľa

st Z,r16 ; zápis obsahu r16 do registra PORTB

ld r16,Z ;čítanie obsahu z registra PORTB do registra r16,

prípadne:

sts 0x0038,r16 ;zápis obsahu registra r16 do registra PORTB

lds r16,0x0038 ;čítanie obsahu registra PORTB do registra r16

Poznamenajme, že v mikrokontroléri ATmega8 nie sú využité všetky pamäťové miesta.

Nevyužité pamäťové miesta sú rezervované na využitie vo vyšších typoch mikrokontrolérov

ATMEL.

V tabuľke 75 je uvedený prehľad registrov využívaných mikrokontorlérom ATmega8.

Adresa Označ. Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

0x3F(0x5F) SREG I T H S V N Z C

0x3E(0x5E) SPH SP10 SP9 SP8

0x3D(0x5D) SPL SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0

0x3C(0x5C) Rezerv.

0x3B(0x5B) GICR INT1 INT0 IVSEL IVCE

0x3A(0x5A) GIFR INTF1 INTF0

0x39(0x59) TIMSK OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 TOIE0

0x38(0x58) TIFR OCF2 TO2V ICF1 OCF1A OCF1B TOV1 TOV0

0x37(0x57) SPMCR SPMIE RWWSB RWWSRE BLBSET PGWRT PGERS SPMEN

0x36(0x56) TWCR TWINT TWEA TWSTA TWSTO TWWC TWEN TWIE

0x35(0x55) MCUCR SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00

0x34(0x54) MCUCSR WDRF BORF EXTRF PORF

0x33(0x53) TCCR0 CS02 CS01 CS00

0x32(0x52) TCNT0 7 6 5 4 3 2 1 0

0x31(0x51) OSCCAL 7 6 5 4 3 2 1 0

0x30(0x50) SFIOR ACME PUD PSR2 PSR10

0x2F(0x4F) TCCR1A COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

0x2E(0x4E) TCCR1B ICNC1 ICES1 WGN13 WGN12 CS12 CS11 CS10

0x2D(0x4D) TCNT1H 15 14 13 12 11 10 9 8

0x2C(0x4C) TCNT1L 7 6 5 4 3 2 1 0

0x2B(0x4B) OCR1AH 15 14 13 12 11 10 9 8

0x2A(0x4A) OCR1AL 7 6 5 4 3 2 1 0

0x29(0x49) OCR1BH 15 14 13 12 11 10 9 8

0x28(0x48) OCR1BL 7 6 5 4 3 2 1 0

0x27(0x47) ICR1H 15 14 13 12 11 10 9 8

0x26(0x46) ICR1L 7 6 5 4 3 2 1 0

0x25(0x45) TCCR2 FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

0x24(0x44) TCNT2 7 6 5 4 3 2 1 0

0x23(0x43) OCR2 7 6 5 4 3 2 1 0

0x22(0x42) ASSR AS2 TCN2UB OCR2UB TCR2UB

0x21(0x41) WDTCR WDCE WDE WDP2 WDP1 WDP0

0x20(0x40) UBRRH URSEL UBRR11 UBRR10 UBRR9 UBRR8

UCSRC URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL

0x1F(0x3F) EEARH EEAR8

0x1E(0x3E) EEARL EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0

0x1D(0x3D) EEDR 7 6 5 4 3 2 1 0

0x1C(0x3C) EECR EERIE EEMWE EEWE EERE

0x1B(0x1B) Rezerv.

0x1A(0x3A) Rezerv.

0x19(0x39) Rezerv.

0x18(0x38) PORTB PORTB7 POTRB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0

0x17(0x37) DDRB DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0

0x16(0x36) PINB PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0

0x15(0x35) PORTC PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0

0x14(0x34) DDRC DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0

0x13(0x33) PINC PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0

0x12(0x32) PORTD PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0

0x11(0x31) DDRD DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0

Page 187: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 187

0x10(0x30) PIND PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0

0x0F(0x2F) SPDR 7 6 5 4 3 2 1 0

0x0E(0x2E) SPSR SPIF WCOL SPI2X

0x0D(0x2D) SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

0x0C(0x2C) UDR 7 6 5 4 3 2 1 0

0x0B(0x2B) UCSRA RXC TXC UDRE FE DOR PE U2X MPCM

0x0A(0x2A) UCSRB RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8

0x09(0x29) UBRRL 7 6 5 4 3 2 1 0

0x08(0x28) ACSR ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0

0x07(0x27) ADMUX REFS1 REFS0 ADLAR MUX3 MUX2 MUX1 MUX0

0x06(0x26) ADCSRA ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0

0x05(0x25) ADCH 15 14 13 12 11 10 9 8

0x04(0x24) ADCL 7 6 5 4 3 2 1 0

0x03(0x23) TWDR 7 6 5 4 3 2 1 0

0x02(0x22) TWAR TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE

0x01(0x21) TWSR TWS7 TWS6 TWS5 TWS4 TWS3 TWS2 TWS1 TWS0

0x00(0x20) TWBR 7 6 5 4 3 2 1 0

Tab. 75 Registre MCU ATmega8

8.2 INŠTRUKČNÝ SÚBOR

Inštrukčný súbor mikrokontroléra ATmega8 obsahuje 130 inštrukcií, z ktorých väčšina

je vykonávaná v jednom strojovom cykle. Inštrukcie je možné rozdeliť do piatich

nasledovných skupín:

- aritmetické a logické inštrukcie

- inštrukcie skokov

- inštrukcie na prenos dát

- inštrukcie na testovanie a manipuláciu s bitmi

- inštrukcie na riadenie MCU

Aritmetické a logické inštrukcie:

Symbol Opera

ndy

Popis Operácia Príznak

y

P.c.

ADD Rd,Rr Sčítanie obsahu dvoch

registrov

Rd←Rd+Rr Z,C,N,V

,H

1

ADC Rd,Rr Sčítanie obsahu registrov a

carry

Rd←Rd+Rr+C Z,C,N,V

,H

1

ADIW Rdl,K Sčítanie konštanty a slova Rdh:Rdl←Rdh:Rdl+K Z,C,N,V

,H

2

SUB Rd,Rr Odčítanie dvoch registrov Rd←Rd-Rr Z,C,N,V

,H

1

SUBI Rd,K Odčítanie konštanty od

registra

Rd←Rd-K Z,C,N,V

,H

1

SBC Rd,Rr Odčítanie registra a carry

od Rd

Rd←Rd-Rr-C Z,C,N,V

,H

1

SBCI Rd,K Odčítanie konštanty

a Carry od Rd

Rd←Rd-K-C Z,C,N,V

,H

1

SBIW Rdl,K Odčítanie konštanty od

slova

Rdh:Rdl←Rdh:Rdl-K Z,C,N,V

,H

2

AND Rd,Rr Logické AND medzi

registrami

Rd←RdRr Z,N,V 1

ANDI Rd,K Logické AND register a Rd←RdK Z,N,V 1

Page 188: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 188

konštanta

OR Rd,Rr Logické OR medzi

registrami

Rd←Rd v Rr Z,N,V 1

ORI Rd,K Logické OR medzi Rd

a konšt. K

Rd←Rd v K Z,N,V 1

EOR Rd,Rr EX-OR medzi registrami Rd←Rd,Rr Z,N,V 1

COM Rd Jednotkový doplnok Rd←0xFF-Rd Z,C,N,V 1

NEG Rd Dvojkový doplnok Rd←0x00-Rd Z,C,N,V

,H

1

SBR Rd,K Nastav bit v registri Rd←Rd v K Z,N,V 1

INC Rd Inkrement Rd Rd←Rd+1 Z,N,V 1

DEC Rd Dekrement Rd Rd←Rd-1 Z,N,V 1

TST Rd Test Rd na nulový, záporný

obsah

Rd←RdRd Z,N,V 1

CLR Rd Nuluj register Rd Rd←RdRd Z,N,V 1

SER Rd Nastavenie obsahu registra

Rd

Rd←0xFF - 1

MUL Rd,Rr Násobenie neznamienkové R1:R0←Rd × Rr Z,C 2

MULS Rd,Rr Násobenie znamienkové R1:R0←Rd×Rd Z,C 2

MULS

U

Rd,Rr Násobenie znamienk.

s neznamienk.

R1:R0←Rd×Rr Z,C 2

FMUL Rd,Rr Fr. násobenie

neznamienkové

R1:R0←(Rd×Rr)<<1 Z,C 2

FMUL

S

Rd,Rr Fr.násobenie

znamienkovéň

R1:R0←(Rd×Rr)<<1 Z,C 2

FMUL

SU

Rd,Rr Fr.násobenie znamienk.

s neznam.

R1:R0←(Rd×Rr)<<1 Z,C 2

Tab. 76 Aritmetické a logické inštrukcie

Inštrukcie skokov:

RJMP k Relatívny skok PC←PC+k+1 - 2

IJMP Nepriamy skok

pomocou Z

PC←Z - 2

RCALL k Relatívne volanie

podprogramu

PC←PC+k+1 - 3

ICALL Nepriame volanie

pomocou Z

PC←Z - 3

RET Návrat

z podprogramu

PC←ZÁSOBNÍK - 4

RETI Návrat z prerušenia PC←ZÁSOBNÍK I 4

CPSE Rd,Rr Porovnaj a pri

rovnosti preskoč

Ak(Rd=Rr)PC←2, alebo 3 - 1,2,3

CP Rd,Rr Porovnaj Rd-Rr Z,N,V,C,H 1

CPC Rd,Rr Porovnaj aj s Carry Rd-Rr-C Z,N,V,C,H 1

CPI Rd,K Porovnaj register

s konštantou

Rd-K Z,N,V,C,H 1

SBRC Rr,b Preskoč, ak bit

v registri Rr je nula

Ak(Rr(b)=0)PC←PC+2,

alebo 3

- 1,2,3

Page 189: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 189

SBRS Rr,b Preskoč, ak bit

v registri Rr je jedna

Ak(Rr(b)=1)PC←PC+2,

alebo 3

- 1,2,3

SBIC P,b Preskoč, ak bit

V/V registra je nula

Ak(P(b)=0)PC←PC+2, alebo

3

- 1,2,3

SBIS P,b Preskoč, ak bit

V/V registra je jedna

Ak(P(b)=1)PC←PC+2, alebo

3

- 1,2,3

BRBS s,k Skoč, ak príznak S je

nastavený

Ak(SREG(s)=1)PC←PC+k+1 - 1,2

BRBC s,k Skoč, ak príznak S je

nula

Ak(SREG(s)=0)PC←PC+k+1 - 1,2

BREQ k Skoč, ak sa rovná Ak(Z=1)PC←PC+k+1 - 1,2

BRNE k Skoč, ak sa nerovná Ak(Z=0)PC←PC+k+1 - 1,2

BRCS k Skoč, ak Carry je

nastavený

Ak(C=1)PC←PC+k+1 - 1,2

BRCC k Skoč, ak Carry je

nula

Ak(C=0)PC←PC+k+1 - 1,2

BRSH k Skoč, ak sa rovná,

alebo väčšie

Ak(C=0)PC←PC+k+1 - 1,2

BRLO k Skoč, ak je menšie Ak(C=1)PC←PC+k+1 - 1,2

BRMI K Skoč, ak je záporné Ak(N=1)PC←PC+k+1 - 1,2

BRPL k Skoč, ak je kladné Ak(N=0)PC←PC+k+1 - 1,2

BRGE k Skoč, ak väčšie,

alebo rovné, znam. Ak(NV=0)PC←PC+k+1 - 1,2

BRLT k Skoč,ak menšie ako

0, znamienkové Ak(NV=1)PC←PC+k+1 - 1,2

BRHS k Skoč, ak príznak H je

nastavený

Ak(H=1)PC←PC+k+1 - 1,2

BRHC k Skoč, ak príznak H je

nula

Ak(H=0)PC←PC+k+1 - 1,2

BRTS k Skoč, ak príznak T je

nastavený

Ak(T=1)PC←PC+k+1 - 1,2

BRTC k Skoč, ak príznak T je

nula Ak(NV=0)PC←PC+k+1 - 1,2

BRVS k Skoč, ak príznak

pretečenia je nast.

Ak(V=1)PC←PC+k+1 - 1,2

BRVC k Skoč, ak príznak

pretečenia je nula

Ak(V=0)PC←PC+k+1 - 1,2

BRIE k Skoč, ak sú povolené

prerušenia

Ak(I=1)PC←PC+k+1 - 1,2

BRID k Skoč, ak nie sú

povolené prerušenia

Ak(I=0)PC←PC+k+1 - 1,2

Tab.77 Inštrukcie skokov

Inštrukcie na prenos dát:

MOV Rd,Rr Presun medzi registrami Rd←Rr - 1

MOVW Rd,Rr Presun slova medzi

registrami

Rd+1:Rd←Rr+1:Rr - 1

LDI Rd,K Naplň konštantou Rd←K - 1

Page 190: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 190

LD Rd,X Naplň Rd nepriamo Rd←(X) - 2

LD Rd,X+ Naplň Rd nepriamo a

inkrementuj

Rd←(X), X←X+1 - 2

LD Rd,-X Dekrement a naplň Rd

nepriamo

X←X+1, Rd←(X) - 2

LD Rd,Y Naplň Rd nepriamo Rd←(Y) - 2

LD Rd,Y+ Naplň Rd nepriamo a

inkrementuj

Rd←(Y), Y←Y+1 - 2

LD Rd,-Y Dekrement a naplň Rd

nepriamo

Y←Y+1, Rd←(Y) - 2

LDD Rd,Y+q Naplň nepriamo s posunom

adresy

Rd←(Y+q) - 2

LD Rd,Z Naplň Rd nepriamo Rd←(Z) - 2

LD Rd,Z+ Naplň Rd nepriamo a

inkrementuj

Rd←(Z), Z←Z+1 - 2

LD Rd,-Z Dekrement a naplň Rd

nepriamo

X←Z+1, Rd←(Z) - 2

LDD Rd,Z+q Naplň nepriamo s posunom

adresy

Rd←(Z+q) - 2

LDS Rd,k Naplň priamo z pamäte

SRAM

Rd←(k) - 2

ST X,Rr Ulož nepriamo do pamäte

SRAM

(X)←Rr - 2

ST X+,Rr Ulož nepriamo a

inkrementuj

(X)←Rr, X←X+1 - 2

ST -X,Rr Dekrementuj a ulož

nepriamo

X←X-1, (X)←Rr - 2

ST Y,Rr Ulož nepriamo do pamäte

SRAM

(Y)←Rr - 2

ST Y+,Rr Ulož nepriamo a

inkrementuj

(Y)←Rr, Y←Y+1 - 2

ST -Y,Rr Dekrementuj a ulož

nepriamo

Y←Y-1, (Y)←Rr - 2

STD Y+q,Rr Ulož nepriamo s posunom

adresy

(Y+q)←Rr - 2

ST Z,Rr Ulož nepriamo do pamäte

SRAM

(Z)←Rr - 2

ST Z+,Rr Ulož nepriamo a

inkrementuj

(Z)←Rr, Z←Z+1 - 2

ST -Z,Rr Dekrementuj a ulož

nepriamo

Z←Z-1, (Z)←Rr - 2

STD Z+q,Rr Ulož nepriamo s posunom

adresy

(Z+q)←Rr - 2

STS K,Rr Ulož priamo do pamäte

SRAM

(k)←Rr - 2

LPM Naplň R0 z pamäte

programu

R0←(Z) - 3

LPM Rd,Z Naplň Rd z pamäte

programu

Rd←(Z) - 3

Page 191: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 191

LPM Rd,Z+ Naplň Rd z pamäte pr.a

inkrementuj

Rd←(Z), Z←Z+1 - 3

SPM Ulož do pamäte programu (Z)←R1:R0 - -

IN Rd,P Čítaj Port Rd←P - 1

OUT P,Rd Naplň Port P←Rr - 1

PUSH Rr Ulož obsah registra do

zásobníka

STACK←Rr - 2

POP Rd Naplň register zo

zásobníka

Rd←STACK - 2

Tab.78 Inštrukcie prenosu dát

Inštrukcie na testovanie a manipuláciu s bitmi:

SBI P,b Nastav bit vo V/V

registri

V/V(P,b)←1 - 2

CBI P,b Nuluj bit vo V/V

registri

V/V(P,b)←1 - 2

LSL Rd Logický posun do

ľava

Rd(n+1)←Rd(n),Rd(0)←0 Z,C,N,V 1

LSR Rd Logický posun do

prava

Rd(n)←Rd(n+1),Rd(7)←0 Z,C,N,V 1

ROL Rd Rotácia do ľava

cez Carry

Rd(0)←C,Rd(n+1)←Rd(n),C←Rd(7) Z,C,N,V 1

ROR Rd Rotácia do prava

cez Carry

Rd(7)←C,Rd(n)←Rd(n+1),C←Rd(0) Z,C,N,V 1

ASR Rd Aritmetický posuv

do prava

Rd(n)←Rd(n+1), n=0,...6 Z,C,N,V 1

SWAP Rd Vymeň štvorice Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3.0) - 1

BSET s Nastav príznak SREG(s)←1 SREG(s) 1

BCLR s Nuluj príznak SREG(s)←0 SREG(s) 1

BST Rr,b Ulož bit z registra

Rr do T

T←Rr(b) T 1

BLD Rd,b Naplň bit b registra

Rd z T

Rr(d)←T - 1

SEC Nastav Carry C←1 C 1

CLC Nuluj Carry C←0 C 1

SEN Nastav príznak N N←1 N 1

CLN Nuluj príznak N←0 N 1

SEZ Nastav príznak Z Z←1 Z 1

CLZ Nuluj príznak Z Z←0 Z 1

SEI Globálne povolenie

prerušení

I←1 I 1

CLI Globálny zákaz

prerušení

I←0 I 1

SES Nastav príznak S S←1 S 1

CLS Nuluj príznak S S←0 S 1

SEV Nastav príznak V V←1 V 1

CLV Nuluj príznak V V←0 V 1

Page 192: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 192

SET Nastav T v SREG T←1 T 1

CLT Nuluj T v SREG T←0 T 1

SEH Nastav príznak H H←1 H 1

CLH Nuluj príznak H H←0 H 1

Tab.79 Inštrukcie na testovanie a manipuláciu s bitmi

Inštrukcie na riadenie MCU:

NOP Prázdna operácia - 1

SLEEP Prechod MCU do

režimov so zníženou

spotrebou

- 1

WDR Reštart WDT - 1

Tab. 78 Inštrukcie na riadenie MCU

8.3 ADRESOVACIE REŽIMY PROGRAMU A DÁT

Rodina mikrokontrolérov AVR podporuje efektívne adresovacie režimy na prístup

k pamäti programu a pamäti dát (SRAM, pole registrov a pamäť V/V funkcí). V tejto časti sú

uvedené jednotlivé adresovacie režimy, ktoré sú podporované architektúrou AVR. Symboly

RAMEND a FLASHEND označujú najvyššiu pamäťovú lokáciu v adresnom priestor dát

a programu. Pripomeňme, že všeobecne je inštrukcia zložená z kódu operácie (OK)

a adresovej časti. Mikrokontroléry AVR využívajú nasledovné adresovacie možnosti:

1. Priame adresovanie jedného registra Rd:

Operand je uložený v registri Rd.

Príklad inštrukcií:

COM Rd

INC Rd

CLR Rd .....

2. Priame adresovanie dvoch registrov

Operandy sú uložené v registroch Rr (s

adresou r) a Rd. Výsledok je uložený do

cieľového registra Rd.

Príklad inštrukcií:

OK Rd

15 05 4R0

Rd

R31

Pole registrov Rn

0x00

0x1F

OK Rr Rd

15 9 4 0

R0

Rd

Rr

0x00

d

r

R31 0x1F

Pole registrov Rn

Page 193: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 193

ADD Rd,Rr

MOV Rd,Rr

SUB Rd,Rr .....

3. Priame adresovanie vo V/V priestore

Adresa operandu je obsiahnutá v šiestich

bitoch inštrukčného slova. Rd, alebo Rn je

adresa cieľového, alebo zdrojového

operandu.

Príklad inštrukcií:

IN Rd,P

OUT P,Rd ....

4. Priame adresovanie dát

16-bitová adresa dát je uložená

v dolných šestnástich bitoch inštrukcie,

ktorá je zložená z dvoch slov. Rd/Rn určuje

zdrojový, alebo cieľový register.

Príklad inštrukcií:

STS k,Rr

LDS Rd,k .....

5. Nepriame adresovanie dát s posunom

Adresa operandu je daná súčtom obsahu

Y, alebo Z registra s obsahom dolných

šiestich bitov inštrukcie, (q). Rn/Rd určuje

zdrojový, alebo cieľový register.

Príklad inštrukcií:

LDD Rd,Y+q

STD Z+q,Rr .....

OK Rn/Rd

Adresa dát

31 16

15 0

19

0x0000

RAMEND

Pamäť dát

0x0000Pamäť dát

RAMEND

Y ,alebo Z register

KO Rr/Rd q

+

015

15 10 5 0

OK Rr/Rd A

5 015

0x00

0x3F

V/V pamäť

Page 194: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 194

6. Nepriame adresovanie dát

Adresa operandu je obsiahnutá v registri

X, Y, alebo Z.

Príklad inštrukcií:

LD Rd,Z

LD Z,Rr .....

7. Nepriame adresovanie dát s pred-dekrementom

Register X, Y, alebo Z sa

dekrementuje pred vlastnou operáciou

adresovania. Adresa operandu je daná

dekrementovaným obsahom registra X,

Y, alebo Z.

Príklad inštrukcií:

LD Rd,-X

ST -X,Rr .....

8. Nepriame adresovanie dát s post-inkrementom

Obsah registra X, Y, alebo Z sa

inkrementuje až po adresovaní

operandu. Operand je adresovaný

obsahom registra X, Y, alebo Z, pred

inkrementovaním.

Príklad inštrukcií:

LD Rd,X+

ST X+,Rr .....

9. Adresovanie konštánt v pamäti

programu

Byt, konštanta v pamäti programu je

adresovaná pomocou obsahu registra Z.

0x0000Pamäť dát

X, Y, alebo Z register

015

0x0000Pamäť dát

X,Y, alebo Z register

+

-1

015

0x0000Pamäť dát

RAMEND

X,Y, alebo Z register

015

+1

Pmäť programu 0x0000

FLASHEND

Z register

015 1

LSB

Page 195: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 195

15 horných bitov Z registra určuje adresu slova. Pri inštrukcii LPM hodnota posledného bitu

LSB adresuje dolný byt, ak LSB=0, alebo horný byt, ak LSB=1. Pri inštrukcii SPM bude

LSB rovný 0.

Adresovanie využívajú inštrukcie:

LPM

LPM Rd,Z

SPM

10. Adresovanie v pamäti programu s post inkrementom

Byt, konštanta v pamäti programu

je adresovaná pomocou obsahu

registra Z. 15 horných bitov Z registra

určuje adresu slova. Hodnota

posledného bitu LSB adresuje dolný

byt, ak LSB=0, alebo horný byt, ak

LSB=1.

Adresovanie využíva inštrukcia:

LPM Rd,Z+

11. Priame adresovanie pamäte programu

Výkon programu pokračuje na

adrese, ktorá je uložená v slove

inštrukcie.

Adresovanie využívajú inštrukcie:

JMP k

CALL k

ATmega8 uvedené inštrukcie

nepodporuje.

12. Nepriame adresovanie pamäte

programu

Pmäť programu 0x0000

FLASHEND

LSB

X,Y, alebo Z register

15 1 0

+1

Pmäť programu 0x0000

FLASHEND

LSB

16 LSB

15 0

KO 6 MSB

31 16

PC

021

Pmäť programu 0x0000

FLASHEND

Z ukazovateľ

0

PC

015

Page 196: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 196

Výkon programu pokračuje na adrese, ktorá je uložená v Z-registri. To znamená že čítač

inštrukcií (PC) je naplnený obsahom Z-registra.

Adresovanie využívajú inštrukcie:

IJMP

ICALL

13. Relatívne adresovanie pamäte programu

Výkon programu pokračuje na

adrese PC+k+1. Relatívna adresa -

k môže byť z rozsahu od -2048 do

2047.

Adresovanie využívajú inštrukcie:

RJMP k

RCALL k

8.4 POPIS INŠTRUKCIÍ ASSEMBLERU AVR

Na doplnenie tab. uveďme podrobnejší popis inštrukcií inštrukčného súboru

mikrokontroléra ATmega8. Poznamenajme že niektoré inštrukcie využívané vyššími typmi

mikrokontrolérov, (napr. ATmega128) nebudú uvedené. Jedná sa o inštrukciu „dlhých“

skokov, JMP, volaní, CALL, prípadne manipuláciu s pamäťou programu, ELPM. Všetky

neuvedené inštrukcie súvisia s nárastom kapacity pamäte programu a neobmedzujú

prenositeľnosť programového vybavenia smerom nahor. Každá inštrukcia obsahuje operačný

kód, ktorý definuje operáciu. Väčšina inštrukcií obsahuje i operand/operandy

s ktorým/ktorými sa bude vykonávať operácia definovaná kódom operácie. Operandy môžu

mať nasledujúci tvar:

Rd: R0-R31, alebo R16-R31 v závislosti na druhu operácie,

Rr: R0-R31,

b: konštanta, 0-7, môže byť vo forme výrazu

s: konštanta, 0-7, môže byť vo forme výrazu

P: konštanta, 0-31/63, môže byť vo forme výrazu

K: konštanta, 0-255, môže byť vo forme výrazu

k: konštanta, jej rozsah závisí na inštrukcii, môže byť vo forme výrazu

q: konštanta, 0-63, môže byť vo forme výrazu

Pmäť programu 0x0000

FLASHEND

PC

15 0

+1

KO k

01115

Page 197: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 197

8.4.1 Aritmetické a logické inštrukcie

ADD- sčítanie obsahu dvoch registrov

Operácia syntax operandy programový čítač

Rd←Rd+Rr add Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 0 0 1 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

add r0,r1 ;sčíta obsahy registrov r0 a r1 a výsledok uloží do r0, (r0=r0+r1)

ADC- sčítanie obsahu dvoch registrov a Carry

Operácia syntax operandy programový čítač

Rd←Rd+Rr+C adc Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 0 1 1 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

adc r0,r1 ;sčíta obsahy registrov r0 a r1a C a výsledok uloží do r0, (r0=r0+r1+C)

ADIW- pripočítanie konštanty k slovu

Operácia syntax operandy programový čítač

Rd+1:Rd←Rd+1:Rd+K adiw Rdl,K d(24,26,28,30), 0≤K≤63 PC←PC+1

Page 198: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 198

Kód operácie:

1 0 0 1 0 1 1 0 K K d d d K K K K

Stavový register:

I T H S V N Z C

- - - M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

adiw r24,5 ;pripočíta k obsahu registrov r25:r24 konštantu 5, (r25:r24=r25:r24 +5)

SUB – odčítanie obsahu registrov

Operácia syntax operandy programový čítač

Rd←Rd-Rr sub Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 0 1 1 0 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sub r0,r1 ;odčíta obsah registra r1 od obsahu registra r0, (r0=r0-r1)

SUBI- odčítanie priamej konštanty od registra

Operácia syntax operandy programový čítač

Rd←Rd-K subi Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 1 0 1 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 199: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 199

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

subi r16,0x10 ;odčíta hodnotu 16 (0x10) od obsahuregistra r16 , (r16=r16-16)

SBC- odčítanie obsahu dvoch registrov a Carry

Operácia syntax operandy programový čítač

Rd←Rd-Rr-Cr sbc Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 0 0 1 0 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sbc r0,r1 ;odčíta od registra r0 r1 a Carry a výsledok uloží do r0, (r0=r0-r1-C)

SBCI- odčítanie konštanty a Carry od obsahu registra Rd

Operácia syntax operandy programový čítač

Rd←Rd-K-C SBCI Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 1 0 0 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sbci r16,0x20 ;odčíta od obsahu registra r16 konštantu K,(0x20) a Carry,

;(r16=r16-32-C)

SBIW- odčítanie konštanty od obsahu slova - Rdh:Rdl

Page 200: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 200

Operácia syntax operandy programový čítač

Rd+1:Rd←Rd+1:Rd-K sbiw Rdl,K d(24,26,28,30), 0≤K≤63 PC←PC+1

Kód operácie:

1 0 0 1 0 1 1 1 K K d d K K K K

Stavový register:

I T H S V N Z C

- - - M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

sbiw r24,0x10 ;od obsahu slova r25: r24 odčíta konštantu 0x10,

;(r25:r24=r25:r24-16)

AND- logické AND medzi dvoma registrami

Operácia syntax operandy programový čítač

Rd←RdRr and Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 1 0 0 0 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

and r0,r1 ; logické and medzi obsahmi registrov r0 a r1, výsledok v r0,

;(r0=r0r1)

ANDI- logické AND medzi registrom a konštantou

Operácia syntax operandy programový čítač

Rd←RdK andi Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 1 1 1 K K K K d d d d K K K K

Stavový register:

Page 201: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 201

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

andi r17,0xF ; logické and medzi obsahmi registrov r17 a0xF, výsledok v r0,

;(r17=r170xF), maskovanie horných štyroch bitov registra r17

OR- logické OR medzi dvoma registrami

Operácia syntax operandy programový čítač

Rd←RdRr or Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 1 0 1 0 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

or r0,r1 ;bitové OR medzi obsahmi registrov r0 a r1, výsledok v r0, (r0=r0r1)

ORI- logické OR medzi obsahom registra a konštantou

Operácia syntax operandy programový čítač

Rd←RdK ori Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 1 1 0 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

Page 202: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 202

and r16,0xF ;bitové OR medzi registrom r16 a konštantou 0xF, výsledok

;v r16, (r16=r00xF), nastavenie dolných 4 bitov registra r16

EOR- operácia EX-OR medzi dvoma registrami

Operácia syntax operandy programový čítač

Rd←RdRr eor Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

0 0 1 0 0 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

eor r0,r1 ; bitové EX-OR medzi obsahmi registrov r0 a r1, výsledok v r0,

;(r0=r0r1)

COM- jednotkový doplnok k obsahu registra

Operácia syntax operandy programový čítač

Rd←0xFF-Rd com Rd 0≤d≤31, PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 0 0 0

Stavový register:

I T H S V N Z C

- - - M 0 M M 1

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

com r0 ; jednotkový doplnok k obsahu registra r0, (r0=0xFF-r0)

NEG- dvojkový doplnok k obsahu registra

Operácia syntax operandy programový čítač

Page 203: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 203

Rd←0x00-Rd neg Rd 0≤d≤31, PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 0 0 1

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

neg r0 ; dvojkový doplnok k obsahu registra r0, (r0=0x00-r0)

SBR- nastav bit v registri

Operácia syntax operandy programový čítač

Rd←RdK Sbr Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 1 1 0 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sbr r16,0xE0 ; nastav bity 7,6 a 5 v registri r16

CBR- nuluj bit v registri

Operácia syntax operandy programový čítač

Rd←Rd(0xFF-K) cbr Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 1 1 0 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 204: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 204

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cbr r16,0xE0 ; nuluj bity 7,6 a 5 v registri r16

INC- inkrement (zvýšenie obsahu registra o jednotku)

Operácia syntax operandy programový čítač

Rd←Rd+1 inc Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 0 1 1

Stavový register:

I T H S V N Z C

- - - M M M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

inc r16 ; inkrementuj obsah registra r16, (r16←r16+1)

DEC- dekrement (zníženie obsahu registra o jednotku)

Operácia syntax operandy programový čítač

Rd←Rd-1 dec Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 1 0 1 0

Stavový register:

I T H S V N Z C

- - - M M M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

dec r16 ; dekrementuj obsah registra r16, (r16←r16-1 )

TST- test nuly, alebo záporného znamienka

Operácia syntax operandy programový čítač

Page 205: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 205

Rd←RdRd tst Rd 0≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

0 0 1 0 0 0 d d d d d d d d d d

Stavový register:

I T H S V N Z C

- - - M 0 M M -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

tst r0 ; test obsahu registra r0

CLR- nuluj register

Operácia syntax operandy programový čítač

Rd←RdRd clr Rd 0≤d≤31 PC←PC+1

Kód operácie:

0 0 1 0 0 1 d d d d d d d d d d

Stavový register:

I T H S V N Z C

- - - 0 0 0 1 -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

clr r0 ;nuluj register r0, (r0←0 )

SER- nastav register

Operácia syntax operandy programový čítač

Rd←0xFF ser Rd 16≤d≤31 PC←PC+1

Kód operácie:

1 1 1 0 1 1 1 1 d d d d 1 1 1 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 206: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 206

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

ser r16 ;nastav register r16, (r16←0xFF )

MUL – neznamienkové násobenie

násobenec 8-bitov × násobiteľ 8-bitov = výsledok vyšší byt výsledok nižší byt

Rd × Rr = R1 , R0

Operácia syntax operandy programový čítač

R1:R0←Rd×Rr mul Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Kód operácie:

1 0 0 1 1 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - - - - - M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

mul r16,r17 ;neznamienkové násobenie r16 a r17 (r1:r0←r16×r17 )

MULS – znamienkové násobenie

násobenec 8-bitov × násobiteľ 8-bitov = výsledok vyšší byt výsledok nižší byt

Rd × Rr = R1 , R0

Operácia syntax Operandy programový čítač

R1:R0←Rd×Rr muls Rd,Rr 16≤d≤31, 16≤r≤31 PC←PC+1

Kód operácie:

0 0 0 0 0 0 1 0 d d d d r r r r

Stavový register:

I T H S V N Z C

- - - - - - M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

Page 207: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 207

muls r16,r17 ;znamienkové násobenie r16 a r17 (r1:r0←r16×r17 )

MULSU – násobenie znamienkový s neznamienkovým operandom

Násobenec 8-bitov × násobiteľ 8-bitov = výsledok vyšší byt výsledok nižší byt

Rd × Rr = R1 , R0

Operácia syntax Operandy programový čítač

R1:R0←Rd×Rr mulsu Rd,Rr 16≤d≤23, 16≤r≤23 PC←PC+1

Kód operácie:

0 0 0 0 0 0 1 1 0 d d d 0 r r r

Stavový register:

I T H S V N Z C

- - - - - - M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

mulsu r23,r24 ;násobenie znamienkové r23 s neznamienkovým r24

;(r1:r0←r23×r24 )

FMUL – násobenie neznamienkových operandov v zlomkovom tvare

Táto operácia realizuje neznamienkové násobenie a posun výsledku o jedno miesto

doľava. Nech (N.Q) označuje binárne číslo s N číslicami naľavo od rádovej čiarky a Q

binárnymi číslicami napravo. Napríklad číslo101.11011 na základe predchádzajúcej úvahy

označíme (3.5). Násobenie dvoch čísel s formátmi (N1.Q1) a (N2.Q2) dáva výsledok vo

formáte (N1+N2.Q1+Q2). Pri spracovaní signálov sa často stretávame s formátom v tvare

(1.7). Výsledok násobenia dvoch čísel vo formáte (1.7) bude dávať výsledok vo formáte

(2.14). Posun výsledku o jedno miesto doľava umožňuje, aby výsledný produkt násobenia bol

vo formáte (1.15) vstupných operandov.

neznamienkový (1.7) × neznamienkový (1.7) → neznamienkový (1.15)

Násobenec 8-bitov × násobiteľ 8-bitov → výsledok vyšší byt výsledok nižší byt

Rd × Rr → R1 , R0

Operácia syntax Operandy programový čítač

R1:R0←Rd×Rr fmul Rd,Rr 16≤d≤23, 16≤r≤23 PC←PC+1

Kód operácie:

0 0 0 0 0 0 1 1 0 d d d 1 r r r

Stavový register:

Page 208: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 208

I T H S V N Z C

- - - - - - M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

fmul r20,r21 ;neznamienkové násobenie r20 a r21 (r1:r0←(r20×r21)<<1

FMULS – násobenie znamienkových operandov v zlomkovom tvare

Táto operácia realizuje znamienkové násobenie a posun výsledku o jedno miesto

doľava. Nech (N.Q) označuje binárne číslo s N číslicami naľavo od rádovej čiarky a Q

binárnymi číslicami napravo. Napríklad číslo101.11011 na základe predchádzajúcej úvahy

označíme (3.5). Násobenie dvoch čísel s formátmi (N1.Q1) a (N2.Q2) dáva výsledok vo

formáte (N1+N2.Q1+Q2). Pri spracovaní signálov sa často stretávame s formátom v tvare

(1.7). Výsledok násobenia dvoch čísel vo formáte (1.7) bude dávať výsledok vo formáte

(2.14). Posun výsledku o jedno miesto doľava umožňuje, aby výsledný produkt násobenia bol

vo formáte (1.15) vstupných operandov.

znamienkový (1.7) × znamienkový (1.7) → znamienkový (1.15)

Násobenec 8-bitov × násobiteľ 8-bitov → výsledok vyšší byt výsledok nižší byt

Rd × Rr → R1 , R0

Operácia syntax operandy programový čítač

R1:R0←Rd×Rr Fmuls Rd,Rr 16≤d≤23, 16≤r≤23 PC←PC+1

Kód operácie:

0 0 0 0 0 0 1 1 1 d d d 0 r r r

Stavový register:

I T H S V N Z C

- - - - - - M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

fmuls r23,r22 ;znamienkové násobenie r23 a r22 (r1:r0←(r23×r22)<<1)

FMULSU – násobenie znamienkového s neznamienkovým operandom v zlomkovom

tvare

Táto operácia realizuje neznamienkové násobenie a posun výsledku o jedno miesto

doľava. Nech (N.Q) označuje binárne číslo s N číslicami naľavo od rádovej čiarky a Q

Page 209: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 209

binárnymi číslicami napravo. Napríklad číslo101.11011 na základe predchádzajúcej úvahy

označíme (3.5). Násobenie dvoch čísel s formátmi (N1.Q1) a (N2.Q2) dáva výsledok vo

formáte (N1+N2.Q1+Q2). Pri spracovaní signálov sa často stretávame s formátom v tvare

(1.7). Výsledok násobenia dvoch čísel vo formáte (1.7) bude dávať výsledok vo formáte

(2.14). Posun výsledku o jedno miesto doľava umožňuje, aby výsledný produkt násobenia bol

vo formáte (1.15) vstupných operandov.

znamienkový (1.7) × neznamienkový (1.7) → znamienkový (1.15)

Násobenec 8-bitov × násobiteľ 8-bitov → výsledok vyšší byt výsledok nižší byt

Rd × Rr → R1 , R0

Operácia syntax operandy programový čítač

R1:R0←Rd×Rr fmulsu Rd,Rr 16≤d≤23, 16≤r≤23 PC←PC+1

Kód operácie:

0 0 0 0 0 0 1 1 1 d d d 1 r r r

Stavový register:

I T H S V N Z C

- - - - - - M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

fmulsu r20,r21 ; zlomkové násobenie operandov r20 a r21 (r1:r0←(r20×r21)<<1

8.4.2 Inštrukcie skokov

RJMP – relatívny skok

Relatívny skok môže definovať adresu nasledujúcej inštrukcie v rámci adresového

priestoru od PC-2K+1 do PC+2K slov pamäte programu. V mikrokontroléroch AVR,

ktorých pamäť programu nepresahuje 8 KB inštrukcia relatívneho skoku obsiahne celý

adresový priestor.

Operácia syntax operandy programový čítač

PC←PC+k+1 rjmp k -2K≤k≤2K PC←PC+k+1

Kód operácie:

1 1 0 0 k k k k k k k k k k k k

Stavový register:

Page 210: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 210

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

rjmp NAVESTIE ;relatívny skok na NAVESTIE

NAVESTIE:

IJMP – nepriamy skok prostredníctvom Z

Nepriamy skok definuje skok na adresu uloženú v ukazovateli Z (r31:r30). 16-bitová

šírka ukazovateľa Z dovoľuje obsiahnuť adresový priestor v rozsahu 64Kslov mäte

programu.

Operácia syntax operandy programový čítač

PC←Z(15:0) ijmp - PC←Z(15:0)

Kód operácie:

1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

ldi r31,0x00

ldi r30,0x50

ijmp ; skok na 0x0050

RCALL – relatívny volanie podprogramu

Relatívny volanie podprogramu sa môže použiť v rozsahu od PC-2K+1 do PC+2K

slov pamäte programu. Návratová adresa je uložená do zásobníka. Ukazovateľ zásobníka sa

post- dekrementuje. V mikrokontroléroch AVR, ktorých pamäť programu nepresahuje 8 KB

inštrukcia relatívneho skoku obsiahne celý adresový priestor.

operácia syntax operandy programový čítač zásobník

PC←PC+k+1 rcall k -2K≤k≤2K PC←PC+k+1 ZASOB.←PC+1, SP←SP-2

Page 211: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 211

Kód operácie:

1 1 0 1 k k k k k k k k k k k k

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 3

Príklad:

rcall PODPROGRAM ;relatívny skok do podprogramu

PODPROGRAM:

ICALL – nepriame volanie podprogramu prostredníctvom Z

Nepriame volanie podprogramu dovoľuje volanie podprogramu v rozsahu dolných 64

Kslov pamäte programu. Návratová adresa je uložená do zásobníka. Ukazovateľ zásobníka sa

post- dekrementuje.

operácia syntax operandy programový čítač zásobník

PC←Z(15:0) icall - PC←Z(15:0) ZASOB.←PC+1, SP←SP-2

Kód operácie:

1 1 0 1 0 1 0 1 0 0 0 0 1 0 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 3

Príklad:

ldi r31,0x00

ldi r30,0x50

icall ;nepriamy skok do podprogramu na adr. 0x0050

RET – návrat z podprogramu

Page 212: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 212

Návrat z podprogramu. Programový čítač sa naplní obsahom pamäťového miesta

zásobníka, na ktoré ukazuje ukazovateľ. Obsah ukazovateľa zásobníka sa pred tým zvýši o 2.

operácia syntax operandy programový čítač zásobník

PC←ZASOB ret - PC←ZASOB SP←SP+2

Kód operácie:

1 0 0 1 0 1 0 1 0 0 0 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 4

Príklad:

ret ;návrat z podprogramu, (PC←ZÁSOBNÍK)

RETI – návrat z prerušenia

Návrat z prerušenia. Programový čítač sa naplní obsahom pamäťového miesta

zásobníka, na ktoré ukazuje ukazovateľ. Obsah ukazovateľa zásobníka sa pred tým zvýši o 2.

Nastaví sa bit I v SREG.

operácia syntax operandy programový čítač zásobník

PC←ZASOB reti - PC←ZASOB SP←SP+2

Kód operácie:

1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 0

Stavový register:

I T H S V N Z C

1 - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 4

Príklad:

reti ;návrat z prerušenia, (PC←ZÁSOBNÍK, I←1)

CPSE – porovnaj a v prípade rovnosti preskoč

Page 213: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 213

Inštrukcia porovná obsahy registrov Rd aRr a v prípade rovnosti preskočí nasledujúcu

inštrukciu.

operácia syntax operandy programový čítač

ak Rd=Rr, PC←PC+2/3 CPSE Rd,Rr 0≤d≤31,0≤r≤31 ak RdRr PC←PC+1

ak Rd=Rr PC←PC+2,alebo

PC←PC+3

Kód operácie:

0 0 0 1 0 0 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak RdRr, 2- ak Rd=Rr a nasleduje jednoslovná inštrukcia, ak nasleduje

inštrukcia dvojslovná, potom 3

Príklad:

ldi r0,5

ldi r1,5

cpse r0,r1 ;porovnaj a pri rovnosti preskoč preskočí inštrukciu ldi r0,4

ldi r0,4

CP – porovnaj

Inštrukcia porovná obsahy registrov Rd a Rr a modifikuje obsah stavového slova.

Nemodifikuje obsahy registrov.

operácia syntax operandy programový čítač

Rd-Rr CP Rd,Rr 0≤d≤31,0≤r≤31 PC←PC+1

Kód operácie:

0 0 0 1 0 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cp r0,r1 ; porovná obsah r0 a r1a modifikuje SREG

Page 214: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 214

CPC– porovnaj Rd, Rr a Carry

Inštrukcia porovná obsahy registrov Rd a Rr a Carry a modifikuje obsah stavového

slova. Nemodifikuje obsahy registrov.

operácia syntax operandy programový čítač

Rd-Rr-C CPC Rd,Rr 0≤d≤31,0≤r≤31 PC←PC+1

Kód operácie:

0 0 0 0 0 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cpc r0,r1 ; porovná obsah r0 a ,r1, C a modifikuje SREG

CPI – porovnaj registter s konštantou

Inštrukcia porovná obsahy registra Rd a konštanty K a modifikuje obsah stavového

slova. Nemodifikuje obsah registra.

operácia syntax operandy programový čítač

Rd-K CPI Rd,K 16≤d≤31,0≤K≤255 PC←PC+1

Kód operácie:

0 0 1 1 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cpi r16,0xF ; porovná obsah r16 s hodnotou 0xF a modifikuje SREG

SBRC – preskoč, ak bit v registri má hodnotu 0

Inštrukcia testuje vybraný bit registra Rr, ak je rovný nule, potom preskočí

nasledujúcu inštrukciu.

operácia syntax operandy programový čítač

Page 215: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 215

ak Rr(b)=0,

PC←PC+2/3

SBRC Rr,b 0≤r≤31,0≤b≤7 ak Rr(b)=1, PC←PC+1

ak Rr(b)=0, PC←PC+2, alebo

PC←PC+3

Kód operácie:

1 1 1 1 1 1 0 r r r r r 0 b b b

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak Rr(b)0, 2- ak Rr(b)=0 a nasleduje jednoslovná inštrukcia, pri

nasledujúcej dvojslovnej inštrukcii 3

Príklad:

sbrc r0,2 ; ak bit 2 v registri r0 je rovný 0, preskočí nasledujúcu inštrukciu

SBRS – preskoč, ak bit v registri má hodnotu 1

Inštrukcia testuje vybraný bit registra Rr, ak je rovný jednej, potom preskočí

nasledujúcu inštrukciu.

operácia syntax operandy programový čítač

ak Rr(b)=1,

PC←PC+2/3

SBRS Rr,b 0≤r≤31,0≤b≤7 ak Rr(b)=0, PC←PC+1

ak Rr(b)=1, PC←PC+2, alebo

PC←PC+3

Kód operácie:

1 1 1 1 1 1 1 r r r r r 0 b b b

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak Rr(b)0, 2- ak Rr(b)=0 a nasleduje jednoslovná inštrukcia, pri

nasledujúcej dvojslovnej inštrukcii 3

Príklad:

sbrs r0,2 ; ak bit 2 v registri r0 je rovný 1, preskočí nasledujúcu inštrukciu, inak

pokračuje spracovaním nasledujúcej inštrukcie

SBIC – preskoč, ak bit vo V/V registri má hodnotu 0

Page 216: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 216

Inštrukcia testuje vybraný bit V/V registra - P, ak je rovný nule, potom preskočí

nasledujúcu inštrukciu. Uvedená inštrukcia pracuje len v spodnej polovici adresného

priestoru, v rozsahu V/V adries 0 až 31

Operácia syntax operandy programový čítač

Ak V/V(P,b)=0, potom

PC←PC+2/3

SBIC P,b 0≤P≤31,0≤b≤7 ak P(b)=1, PC←PC+1

ak P(b)=0, PC←PC+2, alebo

PC←PC+3

Kód operácie:

1 0 0 1 1 0 0 1 P P P P P b b b

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak P(b)0, 2- ak P(b)=0 a nasleduje jednoslovná inštrukcia, 3 - pri

nasledujúcej dvojslovnej inštrukcii.

Príklad:

sbic PORTB,2 ; ak bit 2 v registriPORTB0 je rovný 0, preskočí nasledujúcu

inštrukciu

SBIS – preskoč, ak bit vo V/V registri má hodnotu 1

Inštrukcia testuje vybraný bit V/V registra - P, ak je rovný nule, potom preskočí

nasledujúcu inštrukciu. Uvedená inštrukcia pracuje len v spodnej polovici adresného

priestoru, v rozsahu V/V adries 0 až 31

Operácia syntax Operandy programový čítač

Ak V/V(P,b)=1, potom

PC←PC+2/3

SBIS P,b 0≤P≤31,0≤b≤7 ak P(b)=0, PC←PC+1

ak P(b)=1, PC←PC+2, alebo

PC←PC+3

Kód operácie:

1 0 0 1 1 0 1 1 P P P P P b b b

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak P(b)1, 2- ak P(b)=1 a nasleduje jednoslovná inštrukcia, 3 - pri

nasledujúcej dvojslovnej inštrukcii.

Príklad:

sbis PORTB,2 ; ak bit 2 v registriPORTB0 je rovný 1, preskočí nasledujúcu

inštrukciu

Page 217: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 217

BRBS – skoč, ak bit SREG je nastavený

Podmienený relatívny skok. Inštrukcia testuje vybraný bit stavového registra, SREG,

ak je nastavený, potom skočí na definovanú adresu. Relatívny skok obsiahne adresný priestor

v rozmedzí od PC-63 do PC+64.

Operácia syntax operandy programový čítač

Ak SREG(s)=1, potom

PC←PC+k+1

BRBS s,k 0≤s≤7,-64≤k≤63 ak SREG(s)=0, PC←PC+1

ak SREG(s)=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k s s s

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak SREG(s) = 0, 2- ak SREG(s)=1.

Príklad:

brbs 2,SKOK ; ak bit 2 v SREG je rovný 1, pokračuje na návestí SKOK

SKOK:

BRBC – skoč, ak bit SREG je rovný nule

Podmienený relatívny skok. Inštrukcia testuje vybraný bit stavového registra, SREG,

ak je rovný nule, potom skočí na definovanú adresu. Relatívny skok obsiahne adresný

priestor v rozmedzí od PC-63 do PC+64.

Operácia syntax operandy programový čítač

Ak SREG(s)=0, potom

PC←PC+k+1

BRBC s,k 0≤s≤7,-64≤k≤63 ak SREG(s)=1, PC←PC+1

ak SREG(s)=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k s s s

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak SREG(s) = 1, 2- ak SREG(s)=0.

Príklad:

brbc 2,SKOK ; ak bit 2 v SREG je rovný 0, pokračuje na návestí SKOK

; inak pokračuje nasledujúcou inštrukciou

Page 218: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 218

SKOK:

BREQ – skoč, pri rovnosti

Podmienený relatívny skok. Inštrukcia testuje Z bit stavového registra, SREG, ak je

nastavený, potom skočí na definovanú adresu. Inštrukcia sa používa za inštrukciami

porovnania, CP, rozdielu SUB. Evivalentná inštrukcia je BRBS 1,k. Relatívny skok

obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia syntax operandy programový čítač

Ak Z=1, potom

PC←PC+k+1

BREQ k -64≤k≤63 ak Z=0, PC←PC+1

ak Z=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 0 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak Z = 0, 2- ak Z =1.

Príklad:

cp r0,r1

breq SKOK ; ak r0=r1, potom pokračuje na návestí SKOK

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRNE – skoč, pri nerovnosti

Podmienený relatívny skok. Inštrukcia testuje Z bit stavového registra, SREG, ak je

rovný nule, potom skočí na definovanú adresu. Inštrukcia sa používa za inštrukciami

porovnania, CP, rozdielu SUB. Evivalentná inštrukcia je BRBC 1,k. Relatívny skok

obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia syntax operandy programový čítač

Ak Z=0, potom

PC←PC+k+1

BRNE k -64≤k≤63 ak Z=1, PC←PC+1

ak Z=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 0 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 219: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 219

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak 1 = 0, 2- ak Z =0.

Príklad:

cp r0,r1

brne SKOK ; ak r0r1, potom pokračuje na návestí SKOK

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRCS – skoč, ak bit Carry je nastavený

Podmienený relatívny skok. Inštrukcia testuje C bit stavového registra, SREG, ak je

nastavený, potom skočí na definovanú adresu. Evivalentná inštrukcia je BRBS 0,k.

Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak C=1, potom

PC←PC+k+1

BRCS k -64≤k≤63 ak C=0, PC←PC+1

ak C=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak C = 0, 2- ak C =1.

Príklad:

brcs SKOK ; ak Cary=1, potom pokračuje na návestí SKOK

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRCC – skoč, ak bit Carry je rovný nule

Podmienený relatívny skok. Inštrukcia testuje C bit stavového registra, SREG, ak je

rovný nule, potom skočí na definovanú adresu. Evivalentná inštrukcia je BRBC 0,k.

Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia Syntax Operandy programový čítač

Ak C=0, potom

PC←PC+k+1

BRCC k -64≤k≤63 ak C=1, PC←PC+1

ak C=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Page 220: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 220

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak C = 1, 2- ak C =0.

Príklad:

brcc SKOK ; ak Cary=0, potom pokračuje na návestí SKOK

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRSH – skoč, ak je rovný, alebo väčší

Podmienený relatívny skok. Podmienka (Rd≥Rr). Inštrukcia testuje C bit stavového

registra, SREG, ak je rovný nule, potom skočí na definovanú adresu. Evivalentná inštrukcia

je BRBC 0,k a BRCC. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do

PC+64.

Operácia Syntax operandy programový čítač

Ak C=0, potom

PC←PC+k+1

BRSH k -64≤k≤63 ak C=1, PC←PC+1

ak C=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak C = 1, 2- ak C =0.

Príklad:

cp r0,r1 ;porovnanie obsahov r0 a r1

brsh SKOK ; ak Cary=0 t.j. r0≥r1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRLO – skoč, ak je menší Podmienený relatívny skok. Podmienka (Rd<Rr). Inštrukcia testuje C bit stavového

registra, SREG, ak je rovný nule, potom skočí na definovanú adresu. Evivalentná inštrukcia

je BRBC 0,k a BRCC k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do

PC+64.

Operácia Syntax operandy programový čítač

Ak C=1, potom

PC←PC+k+1

BRLO k -64≤k≤63 ak C=0, PC←PC+1

ak C=1, PC←PC+k+1

Kód operácie:

Page 221: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 221

1 1 1 1 0 0 k k k k k k k 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak C = 0, 2- ak C =1.

Príklad:

cp r0,r1 ;porovnanie obsahov r0 a r1

brlo SKOK ; ak Cary=1 t.j. r0<r1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRMI – skoč, ak je záporný Podmienený relatívny skok. Inštrukcia testuje príznak záporného výsledku, N bit,

stavového registra, SREG. Ak je N rovný jednej, potom skočí na definovanú adresu.

Evivalentná inštrukcia je BRBS 2,k. Relatívny skok obsiahne adresný priestor v rozmedzí

od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak N=1, potom

PC←PC+k+1

BRMI k -64≤k≤63 ak N=0, PC←PC+1

ak N=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 0 1 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak N = 0, 2- ak N =1.

Príklad:

cp r0,r1 ;porovnanie obsahov r0 a r1

brsh SKOK ; ak N=! t.j. r0<r1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRPL – skoč, ak je kladný Podmienený relatívny skok. Inštrukcia testuje príznak záporného výsledku, N bit,

stavového registra, SREG. Ak je N rovný nule, potom skočí na definovanú adresu.

Evivalentná inštrukcia je BRBC 2,k. Relatívny skok obsiahne adresný priestor v rozmedzí

od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Page 222: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 222

Ak N=0, potom

PC←PC+k+1

BRPL k -64≤k≤63 ak N=1, PC←PC+1

ak N=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 0 1 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak N = 1, 2- ak N =2.

Príklad:

cp r0,r1 ;porovnanie obsahov r0 a r1

brpl SKOK ; ak N=0 t.j. r0>r1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRGE – skoč, ak je väčšie, alebo rovné s rešpektovaním znamienka Podmienený relatívny skok. Inštrukcia testuje znamienkový príznak, S bit, stavového

registra, SREG. Ak S bit je rovný nule, potom skočí na definovanú adresu. Inštrukcia sa

používa za inštrukciami porovnania, CP, rozdielu SUB. Evivalentná inštrukcia je BRBC 4,k.

Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak (NV)=0, potom

PC←PC+k+1

BRGE k -64≤k≤63 ak S=1, PC←PC+1

ak S=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 1 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak S = 1, 2- ak S =0.

Príklad:

cp r0,r1 ;porovnanie obsahov r0 a r1

brge SKOK ; ak S=0 t.j. r0≥r1(s rešpektovaním znamienka), potom

;pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRLT – skoč, ak je menšie než nula, s rešpektovaním znamienka

Page 223: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 223

Podmienený relatívny skok. Inštrukcia testuje znamienkový príznak, S bit, stavového

registra, SREG. Ak S bit je nastavený, potom skočí na definovanú adresu. Inštrukcia sa

používa za inštrukciami porovnania, CP, rozdielu SUB. Evivalentná inštrukcia je BRBS 4,k.

Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak (NV)=1, potom

PC←PC+k+1

BRLT k -64≤k≤63 ak S=0, PC←PC+1

ak S=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 1 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak S = 0, 2- ak S =1.

Príklad:

cp r0,r1 ;porovnanie obsahov r0 a r1

brlt SKOK ; ak S=0 t.j. r0<r1(s rešpektovaním znamienka), potom

;pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRHS – skoč, ak je nastavený príznak polovičného prenosu Podmienený relatívny skok. Inštrukcia testuje príznak polovičného prenosu, H bit,

stavového registra, SREG. Ak H bit je nastavený, potom skočí na definovanú adresu.

Evivalentná inštrukcia je BRBS 5,k. Relatívny skok obsiahne adresný priestor v rozmedzí

od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak H=1, potom

PC←PC+k+1

BRHS k -64≤k≤63 ak H=0, PC←PC+1

ak H=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 1 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak H = 0, 2- ak H =1.

Príklad:

brhs SKOK ; ak H=1, potom pokračuje na návestí SKOK,

Page 224: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 224

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRHC – skoč, ak je príznak polovičného prenosu rovný nule Podmienený relatívny skok. Inštrukcia testuje príznak polovičného prenosu, H bit,

stavového registra, SREG. Ak H bit je rovný nule, potom skočí na definovanú adresu.

Evivalentná inštrukcia je BRBC 5,k. Relatívny skok obsiahne adresný priestor v rozmedzí

od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak H=0, potom

PC←PC+k+1

BRHC k -64≤k≤63 ak H=1, PC←PC+1

ak H=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 1 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak H = 1, 2- ak H =0.

Príklad:

brhc SKOK ; ak H=0, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRTS – skoč, ak je príznak T nastavený Podmienený relatívny skok. Inštrukcia testuje príznak T, T bit, stavového registra,

SREG. Ak T bit je rovný jednej, potom skočí na definovanú adresu. Evivalentná inštrukcia je

BRBS 6,k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak T=1, potom

PC←PC+k+1

BRTS k -64≤k≤63 ak T=0, PC←PC+1

ak T=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 1 1 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Page 225: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 225

Počet cyklov: 1-ak T = 0, 2- ak T =1.

Príklad:

brts SKOK ; ak T=1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRTC – skoč, ak je príznak T je rovný nule Podmienený relatívny skok. Inštrukcia testuje príznak T, T bit, stavového registra,

SREG. Ak T bit je rovný nule, potom skočí na definovanú adresu. Evivalentná inštrukcia je

BRBC 6,k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do PC+64.

Operácia Syntax operandy programový čítač

Ak T=0, potom

PC←PC+k+1

BRTC k -64≤k≤63 ak T=1, PC←PC+1

ak T=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 1 1 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak T = 1, 2- ak T =0.

Príklad:

brtc SKOK ; ak T=0, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRVS – skoč, ak je príznak pretečenia nastavený Podmienený relatívny skok. Inštrukcia testuje príznak pretečenia, V bit, stavového

registra, SREG. Ak V bit je rovný jednej, potom skočí na definovanú adresu. Evivalentná

inštrukcia je BRBS 3,k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do

PC+64.

Operácia Syntax operandy programový čítač

Ak V=1, potom

PC←PC+k+1

BRVS k -64≤k≤63 ak V=0, PC←PC+1

ak V=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 0 1 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 226: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 226

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak V = 0, 2- ak V =1.

Príklad:

brvs SKOK ; ak V=1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRVC – skoč, ak je príznak pretečenia rovný nule Podmienený relatívny skok. Inštrukcia testuje príznak pretečenia, V bit, stavového

registra, SREG. Ak V bit je rovný nule, potom skočí na definovanú adresu. Evivalentná

inštrukcia je BRBC 3,k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do

PC+64.

Operácia Syntax operandy programový čítač

Ak V=0, potom

PC←PC+k+1

BRVC k -64≤k≤63 ak V=1, PC←PC+1

ak V=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 0 1 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak V = 1, 2- ak V =0.

Príklad:

brvc SKOK ; ak V=0, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRIE – skoč, ak sú globálne povolené prerušenia Podmienený relatívny skok. Inštrukcia testuje I bit, stavového registra, SREG. Ak I bit

je rovný jednej (prerušenia sú povolené), potom skočí na definovanú adresu. Evivalentná

inštrukcia je BRBS 7,k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do

PC+64.

Operácia Syntax operandy programový čítač

Ak I=1, potom

PC←PC+k+1

BRIE k -64≤k≤63 ak I=0, PC←PC+1

ak 1=1, PC←PC+k+1

Kód operácie:

1 1 1 1 0 0 k k k k k k k 1 1 1

Page 227: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 227

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak I = 0, 2- ak I =1.

Príklad:

brie SKOK ; ak I=1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

BRID – skoč, ak sú globálne povolené zakázané Podmienený relatívny skok. Inštrukcia testuje I bit, stavového registra, SREG. Ak I bit

je rovný nule (prerušenia sú zakázané), potom skočí na definovanú adresu. Evivalentná

inštrukcia je BRBC 7,k. Relatívny skok obsiahne adresný priestor v rozmedzí od PC-63 do

PC+64.

Operácia Syntax operandy programový čítač

Ak I=0, potom

PC←PC+k+1

BRID k -64≤k≤63 ak I=1, PC←PC+1

ak 1=0, PC←PC+k+1

Kód operácie:

1 1 1 1 0 1 k k k k k k k 1 1 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1-ak I =1, 2- ak I =0.

Príklad:

brid SKOK ; ak I=1, potom pokračuje na návestí SKOK,

; inak pokračuje nasledujúcou inštrukciou

SKOK:

8.4.3 Inštrukcie na presun dát

MOV – kopíruj register Inštrukcia MOV kopíruje obsah jedného registra do druhého registra. Obsah

zdrojového registra Rr ostáva nezmenený, obsah cieľového registra Rd je naplnený obsahom

zdrojového, Rr.

Operácia Syntax operandy programový čítač

Rd←Rr MOV Rd,Rr 0≤d≤31, 0≤r≤31 PC←PC+1

Page 228: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 228

Kód operácie:

0 0 1 0 1 1 r d d d d d r r r r

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

mov r0,r1 ; obsah registra r1sa kopíruje do registra r0, (r0←r1)

MOVW – kopíruj slovo Inštrukcia MOVW kopíruje obsah dvojice registrov do druhej dvojice registrov. Obsah

zdrojového páru registrov Rr+1:Rr ostáva nezmenený, obsah cieľového registra Rd+1:Rd je

naplnený obsahom zdrojového páru Rr+1:Rr.

Operácia Syntax operandy programový

čítač

Rd+1:Rd←Rr+1:Rr MOVW Rd+1:Rd,Rr+1:Rr d,r párne 0 až 30 PC←PC+1

Kód operácie:

0 0 0 0 0 0 0 1 d d d d r r r r

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

movw r1:r0,r3:r2 ; obsah registrov r1:r0 sa kopíruje do registrov r3:r2

LDI – naplň register konštantou Inštrukcia LDI naplní obsah registra Rd (R16 až R31) konštantou

Operácia Syntax operandy programový čítač

Rd←K LDI Rd,K 16≤d≤31, 0≤K≤255 PC←PC+1

Kód operácie:

1 1 1 0 K K K K d d d d K K K K

Stavový register:

I T H S V N Z C

Page 229: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 229

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

ldi r16,0xFF ; register r16 sa naplní konštantou 0xFF, (r16←0xFF)

LD – naplň register údajom s adresového priestoru dát nepriamo, pomocou

indexregistra X

Inštrukcia LD naplní jeden register dátami s adresového priestoru dát. Dátový priestor

pozostáva s poľa univerzálnych registrov, V/V pamäte a pamäte SRAM. Príslušné pamäťové

miesto je adresované pomocou obsahu registra X, (R27:R26). Pretože X register má 16 bitov

adresový priestor je obmedzený na 64KB. Pri mikrokontroléroch s pamäťou dát väčšou než

64KB sa na adresovanie využíva aj V/V register RAMPX, ktorý umožňuje stránkovanie

pamäti.

Obsah registra X môže byť v priebehu výkonu inštrukcie inkrementovaný, dekrementovaný,

alebo môže ostať nezmenený. Inštrukcia LD má nasledovné tri modifikácie:

operácia syntax operandy programový čítač

1 Rd←(X) LD Rd,X 0≤d≤31 PC←PC+1

2 Rd←(X), X←X+1 LD Rd,X+ 0≤d≤31 PC←PC+1

3 X←X-1, Rd←(X) LD Rd,-X 0≤d≤31 PC←PC+1

Kód operácie:

1 1 0 0 1 0 0 0 d d d d d 1 1 0 0

2 1 0 0 1 0 0 0 d d d d d 1 1 0 1

3 1 0 0 1 0 0 0 d d d d d 1 1 1 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

ldi r27,0x00 ; register r27 sa naplní konštantou 0x00

ldi r26,0x40 ; register r26 sa naplní konštantou 0x40

ld r0,X ;register r0 sa naplní údajom z adresy 0x0040

ld r1,-X ;register r1 sa naplní údajom z adresy 0x003F

ld r2,X+ ;register r2 sa naplní údajom z adresy 0x003F

LD – naplň register údajom s adresového priestoru dát nepriamo, pomocou

indexregistra Y

Inštrukcia LD naplní jeden register dátami s adresového priestoru dát. Dátový priestor

pozostáva s poľa univerzálnych registrov, V/V pamäte a pamäte SRAM. Príslušné pamäťové

miesto je adresované pomocou obsahu registra Y, (R29:R28). Pretože Y register má 16 bitov

adresový priestor je obmedzený na 64KB. Pri mikrokontroléroch s pamäťou dát väčšou než

Page 230: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 230

64KB sa na adresovanie využíva aj V/V register RAMPY, ktorý umožňuje stránkovanie

pamäti.

Obsah registra Z môže byť v priebehu výkonu inštrukcie inkrementovaný, dekrementovaný,

alebo môže ostať nezmenený. Inštrukcia LD má nasledovné štyri modifikácie:

operácia syntax operandy programový čítač

1 Rd←(Y) LD Rd,Y 0≤d≤31 PC←PC+1

2 Rd←(Y), Y←Y+1 LD Rd,Y+ 0≤d≤31 PC←PC+1

3 Y←Y-1, Rd←(Y) LD Rd,-Y 0≤d≤31 PC←PC+1

4 Rd←(Y+q) LDD Rd,Y+q 0≤d≤31,0≤q≤63 PC←PC+1

Kód operácie:

1 1 0 0 1 1 0 0 d 0 0 0 d 1 0 0 0

2 1 0 0 1 1 0 1 d 0 0 0 d 1 0 0 1

3 1 0 0 1 1 0 1 d 0 0 0 d 1 0 1 0

4 1 0 q 0 q q 0 d d d d d 1 q q q

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

ldi r29,0x00 ; register r29 sa naplní konštantou 0x00

ldi r28,0x40 ; register r28 sa naplní konštantou 0x40

ld r0,Y ;register r0 sa naplní údajom z adresy 0x0040

ld r1,-Y ;register r1 sa naplní údajom z adresy 0x003F

ld r2,Y+ ;register r2 sa naplní údajom z adresy 0x003F

ldd r3,Y+5 ;register r3 sa naplní údajom z adresy 0x0045

LD – naplň register údajom s adresového priestoru dát nepriamo, pomocou

indexregistra Z

Inštrukcia LD naplní jeden register dátami s adresového priestoru dát. Dátový priestor

pozostáva s poľa univerzálnych registrov, V/V pamäte a pamäte SRAM. Príslušné pamäťové

miesto je adresované pomocou obsahu registra Z, (R31:R30). Pretože Z register má 16 bitov

adresový priestor je obmedzený na 64KB. Pri mikrokontroléroch s pamäťou dát väčšou než

64KB sa na adresovanie využíva aj V/V register RAMPX, ktorý umožňuje stránkovanie

pamäti. Pri mikrokontroléroch s pamäťou dát väčšou než 64KB sa na adresovanie využíva aj

V/V register RAMPZ, ktorý umožňuje stránkovanie pamäti.

Obsah registra Z môže byť v priebehu výkonu inštrukcie inkrementovaný, dekrementovaný,

alebo môže ostať nezmenený. Inštrukcia LD má nasledovné štyri modifikácie:

operácia Syntax operandy programový čítač

1 Rd←(Z) LD Rd,Z 0≤d≤31 PC←PC+1

2 Rd←(Z), Z←Z+1 LD Rd,Z+ 0≤d≤31 PC←PC+1

3 Z←Z-1, Rd←(Z) LD Rd,-Z 0≤d≤31 PC←PC+1

4 Rd←(Z+q) LDD Rd,Z+q 0≤d≤31,0≤q≤63 PC←PC+1

Page 231: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 231

Kód operácie:

1 1 0 0 0 0 0 0 d 0 0 0 d 0 0 0 0

2 1 0 0 1 0 0 0 d 0 0 0 d 0 0 0 1

3 1 0 0 1 0 0 0 d 0 0 0 d 0 0 1 0

4 1 0 q 0 q q 0 d d d d d 0 q q q

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

ldi r31,0x00 ; register r31 sa naplní konštantou 0x00, Z-reg...r31:r30

ldi r30,0x40 ; register r30 sa naplní konštantou 0x40

ld r0,Z ;register r0 sa naplní údajom z adresy 0x0040

ld r1,-Z ;register r1 sa naplní údajom z adresy 0x003F

ld r2,Z+ ;register r2 sa naplní údajom z adresy 0x003F

ldd r3,Z+5 ;register r3 sa naplní údajom z adresy 0x0045

LDS – naplň register údajom z pamäti dát

Inštrukcia LDS naplní jeden register dátami s adresového priestoru dát. Dátový

priestor pozostáva s poľa univerzálnych registrov, V/V pamäte a pamäte SRAM. Príslušné

pamäťové miesto je adresované priamo, pomocou adresovej časti inštrukcie LDS. Adresová

časť dvojslovnej inštrukcie LDS je 16-bitová, preto je adresový priestor obmedzený na

64KB. V prípade mikrokontrolérov s väčšou pamäťou dát sa na adresovanie používa V/V

register RAMPD, ktorý umožňuje stránkovanie pamäti.

operácia syntax operandy programový čítač

Rd←(k) LDS Rd,k 0≤d≤31,0≤k≤65535 PC←PC+2

Kód operácie:

1 0 0 1 0 0 0 d d d d d 0 0 0 0

k k k k k k k k k k k k k k k k

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 2 (4 byty)

Počet cyklov: 2

Príklad:

lds r0,0x01FF ;register r0 sa naplní údajom z adresy 0x01FF, (r0←(0x01FF))

ST – ulož nepriamo obsah registra, pomocou indexregistra X

Page 232: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 232

Inštrukcia ST uloží obsah jedného z registrov do adresového priestoru dát na adresu

určenú obsahom registra X. Dátový priestor pozostáva s poľa univerzálnych registrov, V/V

pamäte a pamäte SRAM. Príslušné pamäťové miesto je adresované pomocou obsahu registra

X, (R27:R26). Pretože X register má 16 bitov adresový priestor je obmedzený na 64KB. Pri

mikrokontroléroch s pamäťou dát väčšou než 64KB sa na adresovanie využíva aj V/V

register RAMPX, ktorý umožňuje stránkovanie pamäti. Obsah registra X môže byť

v priebehu výkonu inštrukcie inkrementovaný, dekrementovaný, alebo môže ostať

nezmenený. Inštrukcia ST má nasledovné tri modifikácie:

operácia syntax operandy programový čítač

1 (X) ← Rr ST X, Rr 0≤r≤31 PC←PC+1

2 (X)← Rr, X←X+1 ST X+,Rr 0≤r≤31 PC←PC+1

3 X←X-1, (X)← Rr ST -X,Rr 0≤r≤31 PC←PC+1

Kód operácie:

1 1 0 0 1 0 0 1 r r r r r 1 1 0 0

2 1 0 0 1 0 0 1 r r r r r 1 1 0 1

3 1 0 0 1 0 0 1 r r r r r 1 1 1 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

ldi r27,0x01 ; register r27 sa naplní konštantou 0x01, X-reg...r27:r26

ldi r26,0x40 ; register r26 sa naplní konštantou 0x40

st X,r0 ; obsah registra r0 sa uloží na adresu 0x140

st X+,r0 ; obsah registra r0 sa uloží na adresu 0x140

st -X,r0 ; obsah registra r0 sa uloží na adresu 0x140

ST – ulož nepriamo obsah registra, pomocou indexregistra Y

Inštrukcia ST uloží obsah jedného z registrov do adresového priestoru dát na adresu

určenú obsahom registra Y. Dátový priestor pozostáva s poľa univerzálnych registrov, V/V

pamäte a pamäte SRAM. Príslušné pamäťové miesto je adresované pomocou obsahu registra

Y, (R29:R28). Pretože Y register má 16 bitov, adresový priestor je obmedzený na 64KB. Pri

mikrokontroléroch s pamäťou dát väčšou než 64KB sa na adresovanie využíva aj V/V

register RAMPY, ktorý umožňuje stránkovanie pamäti. Obsah registra Y môže byť

v priebehu výkonu inštrukcie inkrementovaný, dekrementovaný, alebo môže ostať

nezmenený. Inštrukcia ST má nasledovné štyri modifikácie:

operácia syntax Operandy programový čítač

1 (Y) ← Rr ST Y, Rr 0≤r≤31 PC←PC+1

2 (Y)← Rr, Y←Y+1 ST Y+,Rr 0≤r≤31 PC←PC+1

3 Y←Y-1, (Y)← Rr ST -Y,Rr 0≤r≤31 PC←PC+1

4 (Y+q)←Rr STD Y+q,Rr 0≤r≤31, 0≤q≤63 PC←PC+1

Kód operácie:

Page 233: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 233

1 1 0 0 0 0 0 1 r r r r r 1 0 0 0

2 1 0 0 1 0 0 1 r r r r r 1 0 0 1

3 1 0 0 1 0 0 1 r r r r r 1 0 1 0

4 1 0 q 0 q q 1 r r r r r 1 q q q

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

ldi r29,0x01 ; register r29 sa naplní konštantou 0x01, Y-reg...r29:r28

ldi r28,0x40 ; register r28 sa naplní konštantou 0x40

st Y,r0 ; obsah registra r0 sa uloží na adresu 0x140

st Y+,r0 ; obsah registra r0 sa uloží na adresu 0x140

st -Y,r0 ; obsah registra r0 sa uloží na adresu 0x140

std Y+5,r0 ; obsah registra r0 sa uloží na adresu 0x145

ST – ulož nepriamo obsah registra, pomocou indexregistra Z

Inštrukcia ST uloží obsah jedného z registrov do adresového priestoru dát na adresu

určenú obsahom registra Z. Dátový priestor pozostáva s poľa univerzálnych registrov, V/V

pamäte a pamäte SRAM. Príslušné pamäťové miesto je adresované pomocou obsahu registra

Z, (R31:R30). Pretože Z register má 16 bitov, adresový priestor je obmedzený na 64KB. Pri

mikrokontroléroch s pamäťou dát väčšou než 64KB sa na adresovanie využíva aj V/V

register RAMPZ, ktorý umožňuje stránkovanie pamäti. Obsah registra Z môže byť

v priebehu výkonu inštrukcie inkrementovaný, dekrementovaný, alebo môže ostať

nezmenený. Inštrukcia ST má nasledovné štyri modifikácie:

operácia Syntax operandy programový čítač

1 (Z) ← Rr ST Z, Rr 0≤r≤31 PC←PC+1

2 (Z)← Rr, Z←Z+1 ST Z+,Rr 0≤r≤31 PC←PC+1

3 Z←Z-1, (Z)← Rr ST -Z,Rr 0≤r≤31 PC←PC+1

4 (Z+q)←Rr STD Z+q,Rr 0≤r≤31, 0≤q≤63 PC←PC+1

Kód operácie:

1 1 0 0 0 0 0 1 r r r r r 0 0 0 0

2 1 0 0 1 0 0 1 r r r r r 0 0 0 1

3 1 0 0 1 0 0 1 r r r r r 0 0 1 0

4 1 0 q 0 q q 1 r r r r r 0 q q q

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Page 234: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 234

Príklad:

ldi r31,0x01 ; register r31 sa naplní konštantou 0x01, Z-reg...r31:r30

ldi r30,0x40 ; register r30 sa naplní konštantou 0x40

std Z+5,r0 ; obsah registra r0 sa uloží na adresu 0x145

st Z,r0 ; obsah registra r0 sa uloží na adresu 0x140

st -Z,r0 ; obsah registra r0 sa uloží na adresu 0x13F

st Z+,r0 ; obsah registra r0 sa uloží na adresu 0x13F

STS – ulož obsah registra do pamäti dát

Inštrukcia STS uloží obsah jedného z registrov do adresového priestoru dát na adresu

určenú adresovou časťou inštrukcie. Dátový priestor pozostáva s poľa univerzálnych

registrov, V/V pamäte a pamäte SRAM. Príslušné pamäťové miesto je adresované priamo,

pomocou adresovej časti inštrukcie STS. Adresová časť dvojslovnej inštrukcie STS je 16-

bitová, preto je adresový priestor obmedzený na 64KB. V prípade mikrokontrolérov s väčšou

pamäťou dát sa na adresovanie používa V/V register RAMPD, ktorý umožňuje stránkovanie

pamäti.

operácia Syntax operandy programový čítač

(k)←Rr STS k,Rr 0≤d≤31,0≤k≤65535 PC←PC+2

Kód operácie:

1 0 0 1 0 0 1 d d d d d 0 0 0 0

k k k k k k k k k k k k k k k k

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 2 (4 byty)

Počet cyklov: 2

Príklad:

sts 0x01FF,r0 ;obsah registra r0 sa uloží na adresu 0x01FF, ((0x01FF)←r0)

LPM – naplň register údajom z pamäti programu

Inštrukcia LPM naplní cieľového registra adresovaným údajom z pamäte programu.

Adresované miesto v pamäti programu je určené obsahom Z registra. Pamäť programu je

organizovaná slovne, (2 byty), pričom Z register musí adresovať byty. Z tohto dôvodu

najmenej významný bit Z registra LSB určuje či sa adresuje nižší byt slova LSB=0, alebo

vyšší byt slova LSB=1. Táto inštrukcia môže adresovať dolných 64 KB pamäte programu.

Obsah registra Z môže byť v priebehu výkonu inštrukcie inkrementovaný, alebo môže ostať

nezmenený. Inštrukcia LPM má nasledovné tri modifikácie:

operácia syntax operandy programový čítač

1 R0←(Z) LPM - PC←PC+1

2 Rd←(Z) LPM Rd,Z 0≤d≤31 PC←PC+1

3 Rd←(Z), Z←Z+1 LPM Rd,Z+ 0≤d≤31 PC←PC+1

Kód operácie:

Page 235: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 235

1 1 0 0 1 0 1 0 1 1 1 0 0 1 0 0 0

2 1 0 0 1 0 0 0 d d d d d 0 1 0 0

3 1 0 0 1 0 0 0 d d d d d 0 1 0 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (4 byty)

Počet cyklov: 3

Príklad:

ldi r31,0x01 ; register r31 sa naplní konštantou 0x01, Z-reg...r29:r28

ldi r30,0x40 ; register r30 sa naplní konštantou 0x40

lpm ; obsah nižšieho bytu slova v pamäti programu z adr. 0xA0 sa presunie

;do registra r0

lpm r1,Z+ ; obsah nižšieho bytu slova v pamäti programu z adr. 0xA0 sa presunie

;do registra r1 a Z-reg. sa inkrementuje

lpm r2,Z ; obsah vyššieho bytu slova v pamäti programu z adr. 0xA0 sa presunie

;do registra r2

SPM – ulož obsah registrov R1:R0 do pamäti programu

Inštrukcia STS dovoľuje vymazať stránku pamäte programu, zápis stránky a nastaviť

„Boot Loader Lock“ bity MCU. Pamäť programu sa vymazáva po stránkach . Pri mazaní

stránky sa Z register a RAMPZ register využívajú na adresovanie stránky. Pri zápise do

pamäti programu sa Z a RAMPZ register využívajú na adresovanie a registrový pár R1:R0

ako dátový register.

operácia syntax operandy prog. čítač komentár

1 (RAMPZ:Z)←0xFFFF SPM - PC←PC+1 Mazanie stránky

pamäte programu

2 (RAMPZ:Z)←R1:R0 SPM - PC←PC+1 Zápis slova do pamäte

programu

3 (RAMPZ:Z)←R1:R0 SPM - PC←PC+1 Zápis do dočasnej

vyrovnávacej pamäte

stránky

4 (RAMPZ:Z)←TEMP SPM - PC←PC+1 Zápis obsahu z

dočasnej vyrovnávacej

pamäte do pamäte

programu

5 BLBITS←R1:R0 SPM - PC←PC+1 Nastavenie BOOT

LOADER LOCK bitov

Kód operácie:

1 0 0 1 0 1 0 1 1 1 1 0 1 0 0 0

k k k k k k k k k k k k k k k k

Stavový register:

I T H S V N Z C

Page 236: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 236

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Príklad:

; v príklade je uvedený zápis jednej stránky pamäte programu

; adresa prvej pamäťovej lokácie RAM je určená Y ukazovateľom

; adresa prvej pamäťovej lokácie pamäte FLASH je určená Z ukazovateľom

; uvedená rutina musí byť umiestnená vnútri „boot“ pamäťovej oblasti

; použité registre: r0, r1, temp1, temp2, looplo, loophi, spmcrval

; symbolické označenie registrov(temp1......) musí definovať užívateľ

.EQU PAGESIYEB=2*PAGESIZE ;PAGESIYEB je stránka v bytoch

.ORG SMALLBOOTSTART

ZAPISSTRANKY:

;mazanie stránky

ldi spmcrval,(1<<PGERS)+(1<<SPMEN)

call DO_SPM

; presun dát z RAM do do dočasnej vyovnávacej pamäte FLASH

ldi looplo,low(PAGESIZEB) ;počiatočná hodnota slučky

ldi loophi,high(PAGESIZEB) ;nie je nutné pre PAGESIZEB≤256

WRLOOP:

ld r0,Y+

ldi spmcrval,(1<<SPMEN)

call DO_SPM

adiw ZH:ZL,2

sbiw loophi:looplo,2 ; ak PAGESIZEB<=256 stačí použiť subi

brne WRLOOP

; zápis stránky

subi ZL,low(PAGESIZEB)

subi ZH,high(PAGESIZEB) ; nie je nutné pre PAGESIZEB≤256

ldi spmcrval,(1<<PGWRT)+(1<<SPMEN)

call DO_SPM

;prečítaj zapísaný obsah a skontroluj

ldi looplo,low(PAGESIZEB) ;počiatočná hodnota slučky

ldi loophi,high(PAGESIZEB) ;nie je nutné pre PAGESIZEB≤256

subi YL,low(PAGESIZEB)

subi YH,high(PAGESIZEB) ; nie je nutné pre PAGESIZEB≤256

RDLOOP:

lpm r0,Z+

ld r1,Y+

cpse r0,r1

rjmp CHYBA

sbiw loophi:looplo,2 ; ak PAGESIZEB<=256 stačí použiť subi

brne RDLOOP

Page 237: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 237

ret

DO_SPM:

; vstup spmcrval definuje druh operácie SPM

; ak sú povolené prerušenia tak ich zakázať, uchovať obsah SREG

in temp2,SREG

cli

;kontrola či predchádzajúca operácia SPM skončila

CAK:

in temp1,SPMCR

sbrc temp1,SPMEN

rjmp CAK

out SPMCR,spmcrval

spm

; nastav pôvodný obsah SREG, a povoľ prerušenia, ak pôvodne boli povolené

out SREG,temp2

ret

IN – naplň register obsahom z adresovanej V/V lokácie Naplní cieľový register Rd obsahom z adresovanej V/V lokácie (V/V porty,

konfiguračné registre, časovače....).

Operácia syntax operandy programový čítač

Rd←V/V(P) IN Rd,P 0≤d≤31, 0≤P≤63 PC←PC+1

Kód operácie:

1 0 1 1 0 P P d d d d d P P P P

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

in r0,PINB ;číta obsah PINB a uloží ho do registra r0, (r0←PINB)

OUT – naplň adresovanú V/V lokáciu obsahom registra Rr Naplní adresovanú V/V lokáciu (V/V porty, konfiguračné registre, časovače....).

obsahom zdrojového registra Rr.

Operácia syntax operandy programový čítač

V/V(P)← Rr OUT P,Rr 0≤r≤31, 0≤P≤63 PC←PC+1

Kód operácie:

Page 238: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 238

1 0 0 1 1 P P r r r r r P P P P

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

out PORTB,r0 ;naplní PORTB obsahom registra r0, (PORTB←r0)

PUSH – ulož obsah registra Rr do zásobníka (STACK) Inštrukcia PUSH uloží obsah registra Rr do zásobníka a dekrementuje ukazovateľ

zásobníka.

Operácia syntax Operandy programový čítač

STACK← Rr, SP←SP-1 PUSH Rr 0≤r≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 0 1 r r r r r 1 1 1 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

push r0 ; ulož do zásobníka obsah registra r0, ( STACK←r0, SP←SP-1)

POP – nalpň register Rd zo zásobníka (STACK) Inštrukcia POP inkrementuje ukazovateľ zásobníka a potom naplní

register Rd bytom dát zo zásobníka.

Operácia syntax Operandy programový čítač

Rd ← STACK, SP←SP+1 POP Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 0 0 d d d d d 1 1 1 1

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 239: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 239

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

push r0 ; ulož do zásobníka obsah registra r0, ( STACK←r0, SP←SP-1)

clr r0 ; ( r0←0)

pop r0 ; r0 naplní pôvodným obsahom, (SP←SP+1, r0←STACK)

8.4.4 Inštrukcie na testovanie a manipuláciu s bitmi

SBI – nastav bit vo V/V registri Inštrukcia SBI nastaví vybraný bit vo V/V registri. Táto inštrukcia pracuje len s nižšou

polovicou V/V adries, (0 -31).

Operácia syntax Operandy programový čítač

V/V(P,b) ← 1 SBI P,b 0≤P≤31, 0≤b≤7 PC←PC+1

Kód operácie:

1 0 0 1 1 0 1 0 P P P P P b b b

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

sbi PORTB,2 ;nastaví 2.bit v registri PORTB ( PORTB(2)←1 )

CBI – nuluj bit vo V/V registri Inštrukcia CBI vynuluje vybraný bit vo V/V registri. Táto inštrukcia pracuje len

s nižšou polovicou V/V adries, (0 -31).

Operácia syntax Operandy programový čítač

V/V(P,b) ← 0 CBI P,b 0≤P≤31, 0≤b≤7 PC←PC+1

Kód operácie:

1 0 0 1 1 0 0 0 P P P P P b b b

Stavový register:

I T H S V N Z C

- - - - - - - -

Page 240: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 240

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 2

Príklad:

cbi PORTB,2 ;nuluje 2.bit v registri PORTB ( PORTB(2)←0 )

LSL – logický posun doľava Inštrukcia LSL posunie každý bit registra Rd o jedno miesto doľava. Siedmi bit

registra Rd sa presunie do bitu C stavového registra.

C b7 . . . . . . b0 0

Operácia syntax Operandy programový čítač

Logický posun doľava LSL Rd 0≤d≤31 PC←PC+1

Kód operácie:

0 0 0 0 1 1 d d d d d d d d d d

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

lsl r2 ;logický posuv obsahu r2 doľava

LSR – logický posun doprava Inštrukcia LSR posunie každý bit registra Rd o jedno miesto doprava. Nultý bit

registra Rd sa presunie do bitu C stavového registra.

Cb7 . . . . . . b00

Operácia syntax Operandy programový čítač

Logický posun doprava LSR Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 1 1 0

Stavový register:

I T H S V N Z C

Page 241: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 241

- - - M M 0 M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

lsr r2 ;logický posuv obsahu r2 doprava (delenie dvoma)

ROL – rotácia Rd doľava cez Carry Inštrukcia ROL posunie každý bit registra Rd o jedno miesto doľava. Obsah príznaku

C sa presunie do nultého bitu a siedmi bit registra Rd sa presunie do bitu C.

Cb7 . . . . . . b0C

Operácia syntax Operandy programový čítač

rotácia doľava cez C ROL Rd 0≤d≤31 PC←PC+1

Kód operácie:

0 0 0 1 1 1 d d d d d d d d d d

Stavový register:

I T H S V N Z C

- - M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

rol r2 ;rotácia obsahu r2 doľava cez Carry

ROR – rotácia doprava cez Carry Inštrukcia ROR posunie každý bit registra Rd o jedno miesto doprava. Obsah príznaku

C sa presunie do siedmeho bitu registra Rd a nultý bit registra Rd sa presunie do bitu C.

Cb7 . . . . . . b0C

Operácia syntax Operandy programový čítač

Logický posun doprava ROR Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 1 1 1

Stavový register:

Page 242: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 242

I T H S V N Z C

- - - M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

ror r2 ;rotácia obsahu r2 doprava cez Carry

ASR – aritmetický posun doprava Inštrukcia ASR posunie každý bit registra Rd o jedno miesto doprava. Obsah

siedmeho bitu registra Rd ostáva zachovaný. Nultý bit registra Rd sa presunie do bitu C.

Inštrukcia ASR môže byť interpretovaná ako delenie obsahu Rd dvoma so zachovaním

znamienka.

Cb7 . . . . . . b0

Operácia syntax Operandy programový čítač

Aritmetický posun doprava ASR Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 1 0 1

Stavový register:

I T H S V N Z C

- - - M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

asr r2 ;aritmetický posun obsahu r2 doprava

SWAP – výmena štvoríc bitov Inštrukcia SWAP vymení nižšiu a vyššiu štvoricu bitov v registri Rd..

Cb7 . . . . . . b0

Operácia syntax Operandy programový čítač

Rd(7:4)←Rd(3:0),Rd(3:0)←Rd(7:4) SWAP Rd 0≤d≤31 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 d d d d d 0 0 1 0

Page 243: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 243

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

swap r2 ;navzájom vymení štvorice bitov v registri r2

BSET – nastav príznak Inštrukcia BSET nastaví vybraný príznak v stavovom registri SREG.

Operácia syntax Operandy programový čítač

SREG(s)←1 BSET s 0≤s≤7 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 s s s 1 0 0 0

Stavový register:

I T H S V N Z C

M M M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

BSET 7 ;nastaví siedmi bit stavového registra SREG (povolenie prerušení)

BCLR – nuluj príznak Inštrukcia BCLR nuluje vybraný príznak v stavovom registri SREG.

Operácia syntax Operandy programový čítač

SREG(s)←0 BCLR s 0≤s≤7 PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 s s s 1 0 0 0

Stavový register:

I T H S V N Z C

M M M M M M M M

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Page 244: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 244

Príklad:

bclr 7 ;nuluje siedmi bit stavového registra SREG (zákaz prerušení)

BST– kopíruje obsahu bitu registra Rd do bitu T SREG Inštrukcia BST presunie bit s registra Rd do T príznakového bitu v registri SREG.

Operácia syntax Operandy programový čítač

T←Rd(b) BST Rd,b 0≤d≤31, 0≤b≤7 PC←PC+1

Kód operácie:

1 1 1 1 1 0 1 d d d d d 0 b b b

Stavový register:

I T H S V N Z C

- M - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

bst r1,5 ;presunie obsah 5 bitu registra r1 do stavového registra SREG, bitu T

BLD– kopíruje obsah bitu T SREG do bitu registra Rd Inštrukcia BLD kopíruje obsah T príznakového bitu v registri SREG do b bitu registra

Rd.

Operácia syntax Operandy programový čítač

Rd(b)←T BLD Rd,b 0≤d≤31, 0≤b≤7 PC←PC+1

Kód operácie:

1 1 1 1 1 0 0 d d d d d 0 b b b

Stavový register:

I T H S V N Z C

- M - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

bld r1,5 ;presunie obsah bitu T stavového registra SREG do 5 bitu registra r1,

SEC– nastav C-príznakový bit v SREG Inštrukcia SET nastaví príznakový bit C v stavovom registra SREG.

Page 245: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 245

Operácia syntax Operandy programový čítač

C←1 SET - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - 1

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

set ;nastavý Carry na hodnotu jedna

CLC– nuluj C-príznakový bit v SREG Inštrukcia CLC nuluje príznakový bit C v stavovom registra SREG.

Operácia syntax Operandy programový čítač

C←0 CLC - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 0 0 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - 0

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

clc ;nuluje Carry

SEN– nastav N-príznakový bit v SREG Inštrukcia SEN nastaví príznakový bit N v stavovom registra SREG.

Operácia syntax Operandy programový čítač

N←1 SEN - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0

Page 246: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 246

Stavový register:

I T H S V N Z C

- - - - - 1 - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sen ;nastaví príznak záporného výsledku, N

CLN– nuluje N-príznakový bit v SREG Inštrukcia CLN nuluje príznakový bit záporného výsledku - N v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

N←0 CLN - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - 0 - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cln ;nuluje N-bit v stavovom registri, SREG

SEZ– nastaví Z-príznakový bit v SREG Inštrukcia SEZ nastaví príznakový bit nulového výsledku – Z, v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

Z←1 SEZ - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - 1 -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Page 247: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 247

Počet cyklov: 1

Príklad:

sez ; nastaví Z-bit v stavovom registri, SREG

CLZ– nuluje Z-príznakový bit v SREG Inštrukcia CLZ nuluje príznakový bit nulového výsledku – Z, v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

Z←0 CLZ - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 0 0 1 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - 0 -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

clz ; nuluje Z-bit v stavovom registri, SREG

SEI– nastaví I-príznakový bit v SREG, ( globálne povolenie prerušení ) Inštrukcia SEI nastaví I príznakový bit, v stavovom registri SREG, globálne povolí

prerušenia.

Operácia syntax Operandy programový čítač

I←1 SEI - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 1 1 1 1 0 0 0

Stavový register:

I T H S V N Z C

1 - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sei ; nastaví I-bit v stavovom registri, SREG, ( globálne povolí prerušenia )

Page 248: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 248

CLI– nuluje I-príznakový bit v SREG, (globálne zakáže prerušenia ) Inštrukcia CLI nuluje I-príznakový bit, v stavovom registri SREG, globálne zakáže

prerušenia.

Operácia syntax Operandy programový čítač

I←0 CLI - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 0

Stavový register:

I T H S V N Z C

0 - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cli ; nuluje I-bit v stavovom registri, SREG, globálne zakáže prerušenia

SES– nastaví S-príznakový bit v SREG Inštrukcia SES nastaví príznakový bit záporného výsledku – S, v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

S←1 SES - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - 1 - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

ses ; nastaví S-bit v stavovom registri, SREG

Page 249: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 249

CLS– nuluje S-príznakový bit v SREG Inštrukcia CLS nuluje príznakový bit záporného výsledku – S, v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

S←0 CLS - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - 0 - - 1 -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

cls ; nuluje S-bit v stavovom registri, SREG

SEV– nastaví V-príznakový bit v SREG Inštrukcia SEV nastaví príznakový bit pretečenia dvojkového doplnku – V,

v stavovom registri SREG.

Operácia syntax Operandy programový čítač

V←1 SEV - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 0 1 1 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - 1 - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

sev ; nastaví V-bit v stavovom registri, SREG

CLV– nuluje V-príznakový bit v SREG Inštrukcia CLV nuluje príznakový bit pretečenia dvojkového doplnku – V, v stavovom

registri SREG.

Page 250: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 250

Operácia syntax Operandy programový čítač

V←0 CLV - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 0 1 1 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - 0 - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

clv ; nuluje V-bit v stavovom registri, SREG

SET– nastaví T-bit v SREG Inštrukcia SET nastaví T-bit v stavovom registri SREG.

Operácia syntax Operandy programový čítač

T←1 SET - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 1 1 0 1 0 0 0

Stavový register:

I T H S V N Z C

- 1 - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

set ; nastaví T-bit v stavovom registri, SREG

CLT– nuluje T-bit v SREG Inštrukcia CLT nuluje T-bit v stavovom registri SREG.

Operácia syntax Operandy programový čítač

T←0 CLT - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 0

Page 251: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 251

Stavový register:

I T H S V N Z C

- 0 - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

clt ; nuluje T-bit v stavovom registri, SREG

SEH– nastaví H-príznakový bit polovičného prenosu v SREG Inštrukcia SEH nastaví príznakový bit polovičného prenosu – H, v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

H←1 SEH - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 0 1 0 1 1 0 0 0

Stavový register:

I T H S V N Z C

- - 1 - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

seh ; nastaví H-bit v stavovom registri, SREG

CLH– nuluje H-príznakový bit polovičného prenosu v SREG Inštrukcia CLH nuluje príznakový bit polovičného prenosu – H, v stavovom registri

SREG.

Operácia syntax Operandy programový čítač

H←0 CLH - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0

Stavový register:

I T H S V N Z C

- - 0 - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 252: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 252

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

clh ; nuluje H-bit v stavovom registri, SREG

8.4.5 Inštrukcie na riadenie mikrokontroléra

NOP– prázdna inštrukcia Inštrukcia NOP charakterizuje prázdnu.

Operácia syntax Operandy programový čítač

NOP NOP - PC←PC+1

Kód operácie:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

nop ; prázdna operácia

SLEEP– prechod do režimov s nízkou spotrebou Inštrukcia SLEEP nastaví MCU do režimu so zníženou spotrebou, v závislosti od

obsahu registra MCUCR.

Operácia syntax Operandy programový čítač

Sleep SLEEP - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 1 1 0 0 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Page 253: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 253

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

ldi r16,(1<<SE ;povolenie prechodu do úsporného režimu

out MCUCR,r16

sleep ; prejdi do úsporného režimu

WDR– reštart časovača „Watch Dog“ Inštrukcia WDR reštartuje časovač „Watch Dog“. Musí sa periodicky vykonávať tak

často, aby pri korektnom výkone aplikačného programu nedošlo k reštartu MCU.

Operácia syntax Operandy programový čítač

Reštart WD časovača WDR - PC←PC+1

Kód operácie:

1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0

Stavový register:

I T H S V N Z C

- - - - - - - -

Poznámka: Symbol M označuje, že inštrukcia modifikuje daný bit

Počet slov pamäte programu: 1 (2 byty)

Počet cyklov: 1

Príklad:

wdr ; reštart WD časovača

8.5 ASSEMBLER

Táto kapitola je venovaná popisu „Atmel AVR assembleru“, (jazyku symbolických

adries). Uvedený assembler pokrýva celú rodinu mikrokontrolérov AVR. Je zrejmé, že nižšie

mikrokontroléry určené na jednoduché aplikácie nepodporujú všetky inštrukcie uvedeného

inštrukčného súboru. Inštrukcie uvedené v tejto časti a príklady ich použitia sú

implementované v inštrukčnom súbore mikrokontroléra strednej triedy, ATmega8. Pred

vývojom aplikačného programu pre iné typy mikrokontrolérov AVR, preto doporučujem

aspoň nahliadnuť do zoznamu inštrukcií konkrétneho mikrokontroléra. Aktuálny inštrukčný

súbor je súčasťou technickej dokumentácie, (Data Scheets).

Assembler prekladá zdrojový kód do objektového kódu. Tento môžeme využiť ako

vstup do simulátora, prípadne obvodového emulátora. Súčasne assembler generuje súbor s

programovateľným kódom a prípadne aj EEPROM súbor, ktoré zavádzame priamo do pamätí

Page 254: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 254

mikrokontroléra (pamäte programu FLASH, resp. pamäť dát EEPROM). Poznamenajme, že

assembler generuje kód s konkrétnym umiestnením v pamäti, preto nie je potrebné následné

linkovanie programu.

Zdrojový kód v jazyku symbolických adries obsahuje zápis inštrukcií, návestia

a príkazy (directives). Zápisy inštrukcií, a príkazy môžu obsahovať operandy. Každý riadok

môže byť označený návestím. Návestie je alfanumerický reťazec ukončený dvojbodkou.

Návestia sa využívajú na označenie cieľov podmienených a nepodmienených skokov a ako

premenné mená v pamäti programu a pamäti SRAM.

Každý riadok programu má jednu z nasledujúcich štyroch rôznych foriem:

1. [návestie:] príkaz [operandy] [;komentár]

2. [návestie:] inštrukcia [operandy] [;komentár]

3. ;komentár

4. prázdny riadok

Pri uvedených zápisoch je dodržaná konvencia popisu to znamená, že nepovinné položky sú

uvedené v hranatých zátvorkách.

Príklad:

navestie: .DEF pomoc=r16 ; príkaz, definuje symbolické označenie registra r16

; v ďalšom programe sa na r16 môžeme odvolávať jeho

;menom

slucka: rjmp slucka ;nekonečný cyklus

8.5.1 Príkazy

AVR assembler umožňuje používať osemnásť nasledujúcich príkazov:

Príkaz Popis

BYTE Rezervovanie bytu pre premennú

CEG Segment kódu programu

DB Definovanie konštanty typu byt

DEF Registru priradí symbolické meno

DEVICE Definovanie pre aké zariadenie je určený preklad

DSEG Segment údajov

DW Definovanie konštanty typu slovo

ENDMACRO Koniec „makra“

EQU Priradí symbolu výraz, hodnotu

ESEG Segment EEPROM

EXIT Výstup (odchod) so súboru

INCLUDE Čítaj (zaveď) z druhého súboru

LIST Zapni generovanie súboru správ o preklade (listfile)

LISTMAC Zapni rozpísanie „makier“

MACRO Začiatok „makra“

NOLIST Vypni generovanie poznámkového súboru

Page 255: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 255

ORG Nastavenie počiatku programu

SET Symbolu priradí hodnotu

Tab.79 Zoznam príkazov

BYTE

Príkaz „BYTE“ rezervuje pamäťové miesta v pamäti SRAM. Príkaz obsahuje jeden

parameter, ktorý udáva počet rezervovaných bytov. Tento príkaz môže byť použitý len vnútri

údajového segmentu. Parameter príkazu je povinný. Príkaz BYTE by mal byť označený

návestím, aby sme v ďalšom programe boli schopný odkazovať sa na rezervované pamäťové

miesta.

Príklad:

.DSEG

prem1: .BYTE 1 ;rezervuje 1 byt pre premennú prem1

tabulka: .BYTE dlzka ;rezervuje dlzka bytov

.CSEG

ldi r30,low(prem1) ;naplň Z-register, nižší byt adresou

ldi r31,high(prem1) ;naplň Z-reg., vyšší byt adresou prem1

ld r1,Z ;naplní register r1 hodnotou premennej prem1

CSEG- segment kódu programu

Príkaz CSEG definuje začiatok segmentu s kódom programu. Každý súbor môže

pozostávať s niekoľkých kódových segmentov, ktoré budú v priebehu prekladu spojené do

jedného. Prednastavený typ segmentu je kódový segment. Tento príkaz nemá parameter.

Príklad:

.DSEG ; začiatok údajového segmentu

tab: .BYTE 4 ;rezervuje 4 bity v pamäti SRAM

.CSEG ;začiatok kódového segmentu

const: .DW 2 ;zápise 0x0002do pamäte programu

ldi r16,0 ; rob čokoľvek

DB definovanie konštánt typu byt v pamäti programu, alebo EEPROM

Tento príkaz rezervuje pamäťové miesta v pamäti programu, alebo EEPROM. Príkaz

DB obsahuje zoznam výrazov, najmenej jeden. Musí byť umiestnený v kódovom segmente,

alebo v segmente EEPROM. Zoznam výrazov je postupnosť výrazov oddelených čiarkou.

Hodnota každého výrazu musí byť v rozsahu od -128 do 255. Ak príkaz DB je umiestnený

v kódovom segmente a zoznam výrazov obsahuje viac než jeden výraz, potom výrazy sú

zlúčené tak, že v každom slove pamäte programu sú umiestnené dva byty. Príkaz DB by mal

byť označený návestím.

Príklad:

.CSEG

konst: .DB 0, 255, 0xFF, 0b11001111,-128

.ESEG

ekonst: .DB 0xFF

DEF priradenie symbolického mena registru

Page 256: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 256

Príkaz DEF umožňuje označovať registre pomocou symbolických mien. Symbolické

meno priradené registru môžeme používať v ďalšom programe. Registru môže byť

priradených viacero symbolických mien.

Príklad:

.DEF pomoc=r16

.DEF doma=r17

.CSEG

mov pomoc, doma ; r16←r17

DEVICE – definovanie pre aké zariadenie je určený preklad

Tento príkaz definuje zariadenie do ktorého bude implementovaný výsledný,

preložený kód. Ak v zdrojovom programe použijeme príkaz DEVICE a zdrojový kód

obsahuje inštrukcie, ktoré špecifikované zariadenie nepodporuje, potom prekladač na tieto

inštrukcie upozorní. Tak isto nás prekladač upozorní, ak kódový segment, prípadne EEPROM

segment je dlhší ako kapacita pamätí vo vybranom zariadení.

Príklad:

.DEVICE ATmega8 ; výber zariadenia :ATmega8

DSEG - dátový segment

Príkaz DSEG definuje začiatok dátového segmentu. Súbor môže obsahovať viacero

dátových segmentov ktoré sú v procese prekladu zlúčené do jedného. Príkaz ORG sa môže

použiť na špecifikáciu umiestnenia dátového segmentu. Príkaz neobsahuje parametre.

Príklad:

.DSEG ; začiatok dátového segmentu

prem1: .BYTE 1 ; rezervuje jeden byt pre premennú prem1

tabulka: .BYTE velkost ; pre tabuľku rezervuje veľkosť bytov

.CSEG

ldi r30,low(prem1) ; naplní Z-register nižším bytom adresy prem1

ldi r31,high(prem1) ; naplní Z-register vyšším bytom adresy prem1

ld r0,Z ;naplní register r0 hodnotou premennej prem1

DW – definovanie konštanty typu slovo v pamäti programu, alebo v pamäti EEPROM

Príkaz DW rezervuje miesto v pamäti programu, alebo EEPROM pamäti. Príkaz DW

by mal byť označený návestím, aby sme v ďalšom programe boli schopný odkazovať sa na

rezervované pamäťové miesta. Príkaz obsahuje zoznam výrazov, najmenej však jeden výraz.

Musí byť umiestnený vnútri kódového segmentu, alebo EEPROM segmentu. Zoznam

výrazov je postupnosť výrazov oddelených čiarkou. Každý výraz môže nadobúdať hodnotu

z rozsahu od -32768 do 65535.

Príklad:

.CSEG

zoznam: .DW 0, 0xFFFF, 0b0111111110001010, -32768, 65535

.ESEG

eeprem: .DW 0xFFFF

Page 257: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 257

ENDMACRO – koniec makra

Príkaz ENDMACRO definuje ukončenie makra. Neobsahuje parameter.

Príklad:

.MACRO rozdiel ; začiatok makra

subi r16,low(@0) ;odčítaj od r16 nižší byte

sbci r17,high(@0) ;odčítaj od r17 vyšší byte

.ENDMACRO ;koniec makra

EQU – priradenie hodnoty

Príkaz EQU priradí hodnotu návestiu/symbolu. Toto návestie môže byť v ďalšom

programe využité vo výrazoch. Na rozdiel od príkazu SET, priradenie EQU nie je možné

meniť, alebo predefinovať.

Príklad:

.EQU vv_pos = 0x10

.EQU portb = vv_pos + 8

.CSEG ; začiatok kódového segmentu

ldi r16,0x55 ; naplň register r16

out portb,r2 ; zápis na port B

ESEG – EEPROM segment

Príkaz ESEG definuje začiatok EEPROM segmentu. Zdrojový súbor môže obsahovať

viacero EEPROM segmentov, ktoré budú v procese prekladu spojené do jedného. Príkaz

neobsahuje parameter. Poznamenajme, že príkaz BYTE nemôže byť použitý vnútri EEPROM

segmentu. Príkaz ORG sa môže použiť na špecifikáciu umiestnenia konštánt v pamäti

EEPROM.

Príklad:

.DSEG ;začiatok dátového segmentu

tabprem: .BYTE 4 ;rezervuje 4 byty v SRAM

ESEG ; začiatok EEPROM segmentu

eeprem: .DW 0xFFFF ;nastaví jedno slovo v EEPROM

CSEG ;začiatok kódového segmentu

konst: DW 2 ; zapíš do pamäte programu slovo 0x0002

nop ; pokračuj

EXIT – zastavenie prekladu

Príkaz EXIT označuje miesto, kde má byť skončený preklad zdrojového súboru.

V normálnom režime preklad končí až na EOF- označenie konca súboru. Ak sa inštrukcia

EXIT vyskytne v „include“ súbore prekladač skončí preklad súboru „include“ a pokračuje na

riadku, ktorý je umiestnený bezprostredne po príkaze INCLUDE.

Príklad:

.EXIT ; koniec prekladu

INCLUDE – zavedenie (prilepenie) vybraného súboru Príkaz INCLUDE prikazuje prekladaču, aby pokračoval v preklade špecifikovaného

súboru. Tento súbor sa potom prekladá až po EOF, prípadne po príkaz EXIT, následne

pokračuje preklad pôvodného súboru. Poznamenajme, že súbor „include“ môže obsahovať

príkaz INCLUDE.

Príklad:

.INCLUDE „m8def.inc“

Page 258: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 258

LIST – zapnutie generovania súboru správ o preklade (listfile) Príkaz LIST prikáže prekladaču generovať „listfile“. V priebehu prekladu sa generuje

„listfile“, ktorý obsahuje zdrojový kód, adresy a operačný kód. Generovanie „listfile“ je

štandardne nastavené. Príkaz LIST sa používa v spojení s príkazom NOLIST, keď chceme

generovať „listfile“ len vo vybraných častiach prekladaného zdrojového súboru.

Príklad:

.NOLIST ;zákaz generovania listfile

.INCLUDE „m8def.inc“

.LIST ;povolenie generovania listfile

LISTMAC- zapni rozpísanie makier v “listfile“

Príkaz LISTMAC oznamuje prekladaču, aby uviedol obsah makra do „listfile“ vždy,

keď je volané makro. Štandardné nastavenie je také, že obsah makra je uvedený len v prípade,

ak je makro volané s parametrami.

Príklad:

.LISTMACRO ;povolenie výpisu makier

MACRO – začiatok makra

Príkaz MACRO označuje začiatok makra. Parametrom tohoto príkazu je príslušný

názov makra. Ak meno makra napíšeme v ďalšom programe, prekladač ho na príslušné

miesto programu doplní. Makro môžeme volať s maximálne desiatimi parametrami. Tieto

parametre sú označené vnútri makra ako @0 až @9. Makro je ukončené príkazom

ENDMACRO.

Príklad:

.MACRO rozdiel ; začiatok makra

subi @1,low(@0) ;odčítaj od r16 nižší byte

sbci @2,high(@0) ;odčítaj od r17 vyšší byte

.ENDMACRO ;koniec makra

.CSEG ; začiatok kódového segmentu

rozdiel 0x1111,r16,r17 ; volanie makra s parametrami

;r17:r16←r17:r16 – 0x1111

NOLIST – potlačenie generovanie „listfile“

Príkazom NOLIST zakážeme generovanie „listfile“.

Príklad:

.NOLIST

ORG – nastavenie počiatku programu

Príkaz ORG nastaví čítač adries pamäti na hodnotu, ktorá je daná parametrom príkazu.

Ak príkaz ORG je umiestnený v dátovom segmente, potom čítač adries ukazuje na pamäťové

miesta v pamäti SRAM. Ak je príkaz umiestnený v EEPROM segmente, potom čítač adries

ukazuje na pamäťové miesta v EEPROM pamäti. Ak je príkaz ORG označený návestím,

potom návestie bude mať hodnotu parametra. Počiatočné (default) hodnoty čítačov adries

pamäte programu a EEPROM sú rovné nule. Počiatočná hodnota čítača adries pamäte SRAM

je 32.

Príklad:

.DSEG ;začiatok dátového segmentu

.ORG 0x60 ;nastav SRAM adresu na 0x60

prem: .BYTE 1 ;rezervuje 1byt na adrese 0x60 v SRAM

Page 259: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 259

.ESEG ;začiatok EEPROM segmentu

.ORG 0x20 ;nastav EEPROM adresu na 0x20

eeprem: .DW 0xFFEE ;nastav slovo

.CSEG ;začiatok kódového segmentu

.ORG 0x10 ;nastav adresu pamäte FLASH na 0x67

mov r17,r18 ; program

SET – priradenie hodnoty

Podobne ako príkaz EQU aj príkaz SET priradí symbolu hodnotu. Na rozdiel od

príkazu EQU môže byť toto priradenie predefinované v priebehu programu.

Príklad:

.SET vv_pos = 0x10

.SET portb = vv_pos + 8

.CSEG ; začiatok kódového segmentu

ldi r16,0x55 ; naplň register r16

out portb,r2 ; zápis na port B

8.5.2 Výrazy

Výrazy, ktoré podporuje AVR Assembler sa môžu skladať z:

-operandov,

-operátorov,

-funkcií.

Operandy

Užívateľ môže využívať nasledujúce operandy:

- užívateľom definované návestia, ich hodnota je daná konkrétnym umiestnením,

- užívateľom definované premenné pomocou príkazu SET,

- užívateľom definované konštanty pomocou príkazu EQU,

- celočíselné konštanty zapísané v špecifikovaných formátoch:

o dekadicky, 10, 128

o hexadecimálne, 0x0c, alebo $0c

o binárne, 0b00110110

o PC- aktuálna hodnota čítača adries pamäte programu

Funkcie

Pri písaní zdrojového súboru v jazyku symbolických adries môžeme používať

nasledovné funkcie:

LOW(výraz) vracia spodný byt hodnoty výrazu

HIGH(výraz) vracia druhý byte hodnoty výrazu

BYTE2(výraz) vracia druhý byt hodnoty výrazu

BYTE3(výraz) vracia tretí byt hodnoty výrazu

BYTE4(výraz) vracia štvrtý byt hodnoty výrazu

LWRD(výraz) vracia bity 0-15 hodnoty výrazu

HWRD(výraz) vracia bity 16-31 hodnoty výrazu

EXP2(výraz) vracia druhú mocninu hodnoty výrazu

Page 260: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 260

LOG2(výraz) vracia celočíselnú časť z hodnoty log2(výraz)

8.5.3 Operátory

AVR assembler podporuje dvadsať rôznych operátorov. Priorita operátorov je

označená číslom v rozsahu 14 až 4. Poznamenajme, že čím vyššia je hodnota priority tým

vyššia je aj priorita operátora.

Logická negácia, Logical NOT

Symbol: !

Popis: Vracia hodnotu 1, ak hodnota výrazu je rovná 0, ak hodnota výrazu je nenulová

vracia hodnotu 0.

Priorita: 14

Príklad: ldi r16,!0x08 ; naplní register r16 hodnotou 0x00

Bitová negácia, Bitwise N0T

Symbol: ~

Popis: Vracia hodnotu výrazu, pričom všetky bity hodnoty výrazu sú invertované.

Priorita: 14

Príklad: ldi r16,~0x0F ; naplní register r16 hodnotou 0xF0

Mínus s jedným operandom, Unary minus

Symbol: -

Popis: Operátor vracia aritmetickú negáciu výrazu

Priorita: 14

Príklad: ldi r16,-2 ;naplní register r16 hodnotou -2 ,(0xfe)

Násobenie, Multiplication

Symbol: *

Popis: Operátor vracia výsledok po násobení dvoch výrazov

Priorita: 13

Príklad: ldi r16,navestie*2 ;naplní register r16 hodnotou návestie*2

Delenie, Division

Symbol: /

Popis: Operátor vracia celočíselnú časť po delení

Priorita: 13

Príklad: ldi r30,navestie/2 ;naplní register r30 hodnotou navestie/2

Sčítanie, Addition

Symbol: +

Popis: Operátor vracia hodnotu súčtu dvoch výrazov

Priorita: 12

Príklad: ldi r30,c1+c2 ;naplní register r30 hodnotou c1+c2

Odčítanie, Subtraction

Symbol: -

Popis: Operátor vracia hodnotu rozdielu

Page 261: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 261

Priorita: 12

Príklad: ldi r30,c1-c2 ;naplní register r30 hodnotou c1-c2

Posun vľavo, Shift left

Symbol: <<

Popis: Operátor vracia hodnotu ľavého výrazu posunutú doľava o počet bitov

rovnajúcich sa hodnote pravého výrazu.

Priorita: 11

Príklad: ldi r30,1<<maska ; naplní register r30 hodnotou 1 posunutou

; o maska bitov doľava

Posun vpravo, Shift right

Symbol: >>

Popis: Operátor vracia hodnotu ľavého výrazu posunutú doprava o počet bitov

rovnajúcich sa hodnote pravého výrazu.

Priorita: 11

Príklad: ldi r30,c1>>c2 ; naplní register r30 hodnotou c1 posunutou

; o c2 bitov vpravo

Menší, Less than

Symbol: <

Popis: Operátor vracia hodnotu 1,ak hodnota ľavého výrazu je menšia než hodnota

pravého výrazu, (s rešpektovaním znamienka), inak vracia hodnotu 0.

Priorita: 10

Príklad: ldi r30,maska*(c1<c2) ; naplní register r30 hodnotou maska, ak c1 je

; menšie než c2, inak nulou

Menší, alebo rovný, Less or Equal

Symbol: <=

Popis: Operátor vracia hodnotu 1,ak hodnota ľavého výrazu je menšia, alebo sa rovná

hodnote pravého výrazu, (s rešpektovaním znamienka), inak vracia hodnotu 0.

Priorita: 10

Príklad: ldi r30,maska*(c1<=c2) ; naplní register r30 hodnotou maska, ak hodnota

; c1 je menšia, alebo sa rovná hodnote c2, inak 0

Väčší, Greater than

Symbol: >

Popis: Operátor vracia hodnotu 1,ak hodnota ľavého výrazu je väčšia než hodnota

pravého výrazu, (s rešpektovaním znamienka), inak vracia hodnotu 0.

Priorita: 10

Príklad: ldi r30,maska*(c1>c2) ; naplní register r30 hodnotou maska, ak c1 je

; väčšie než c2, inak nulou

Väčší, alebo rovný, Greater or Equal

Symbol: >=

Popis: Operátor vracia hodnotu 1,ak hodnota ľavého výrazu je väčšia, alebo sa rovná

hodnote pravého výrazu, (s rešpektovaním znamienka), inak vracia hodnotu 0.

Priorita: 10

Príklad: ldi r30,maska*(c1>=c2) ; naplní register r30 hodnotou maska, ak c1 je

;väčšie, alebo rovné c2, inak nulou

Page 262: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 262

Rovná sa, Equal

Symbol: ==

Popis: Operátor vracia hodnotu 1,ak hodnota ľavého výrazu sa rovná hodnote

pravého výrazu, inak vracia hodnotu 0.

Priorita: 9

Príklad: ldi r30,maska*(c1==c2) ; naplní register r30 hodnotou maska, ak c1sa

;rovná c2, inak nulou

Nerovná sa, Not Equal

Symbol: !=

Popis: Operátor vracia hodnotu 1,ak hodnota ľavého výrazu sa nerovná hodnote

pravého výrazu, (s rešpektovaním znamienka), inak vracia hodnotu 0.

Priorita: 9

Príklad: ldi r30,maska*(c1!=c2) ; naplní register r30 hodnotou maska, ak c1sa

;nerovná c2, inak nulou

Bitové AND, Bitwise AND

Symbol: &

Popis: Operátor vracia hodnotu rovnú bitovému logickému súčinu hodnôt dvoch

výrazov.

Priorita: 8

Príklad: ldi r30,High(c1&c2) ; naplní register r30 vyšším bytom

;hodnoty výrazu c1&c2

Bitové XOR, Bitwise XOR

Symbol: ^

Popis: Operátor vracia hodnotu rovnú bitovému Exclusive Or hodnôt dvoch výrazov.

Priorita: 7

Príklad: ldi r30,Low(c1^c2) ; naplní register r30 nižším bytom hodnoty

;výrazu c1^c2

Bitové OR, Bitwise OR

Symbol: |

Popis: Operátor vracia hodnotu rovnú bitovému Or hodnôt dvoch výrazov.

Priorita: 6

Príklad: ldi r30,Low(c1|c2) ; naplní register r30 nižším bytom hodnoty

;výrazu c1|c2

Logické AND, Logical AND

Symbol: &&

Popis: Operátor vracia hodnotu 1 ak oba výrazy sú nenulové, inak vracia nulu.

Priorita: 5

Príklad: ldi r30,Low(c1&&c2) ; naplní register r30 nižším bytom hodnoty

;výrazu c1&&c2

Logické OR, Logical OR

Symbol: ||

Popis: Operátor vracia hodnotu 1, ak jeden, alebo obidva výrazy sú nenulové .

Priorita: 4

Page 263: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 263

Príklad: ldi r30,Low(c1||c2) ; naplní register r30 nižším bytom hodnoty

;výrazu c1||c2

9 POPIS MODULU ATMEGA8

Demonštračný modul ATmega8 slúži na experimentálne overenie metód a algoritmov

implementovaných do MCU ATmega8 a programovanie vybraných obvodov ATMEL AVR

Demonštračný modul obsahuje dva mikrokontroléry: ATMEL- ATmega8

a AT90S2313.

Mikrokontrolér AT90S2313 slúži výhradne na programovanie mikrokontrolérov

prostredníctvom rozhrania ISP. Firmware mikrokontroléra zabezpečuje kompatibilitu

s integrovaným vývojovým prostredím AVR Studio a dovoľuje programovať širokú škálu

obvodov ATMEL AVR.

Druhý mikrokontrolér ATmega8 slúži na overenie a demonštráciu činnosti základných

princípov práce mikrokontroléra a riešenie jednoduchých aplikačných úloh. Na rozširujúcom

konektore sú vyvedené dôležité signály mikrokontroléra, čo umožňuje vývoj a overenie

ďalších neštandardných aplikácií.

Konfiguráciu modulu je možné meniť pomocou prepojovacích vývodov ( prepojok )

P0 až P7.

Modul môže byť napájaný zo sieťového adaptéra s napätím v rozsahu 8 až

15V/120mA. V napájacích obvodoch je zapojená ochranná dióda proti prepólovaniu

napájacieho napätia a 5-voltový stabilizátor.

Na obr.102 je zobrazené rozmiestnenie dôležitých komponentov modulu.

Page 264: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 264

DSP3 DSP2 DSP1

232A90S2313

X1

1 16

DSP-LCD 16101

ATmega8

X2

TL1

LED SATB

KN

POT1

TL2

Napájací

konektor

Trimer

PT1Prepojka

P1

EX. KONEKTOR

1 10

1120

P0

Prepojka

P2

Svorka

S1

Prepojka

P3Prepojka

P4

Prepojka

P5Aplikačný konektor

1 5

610

1

10

Konektor RS232

K2 PROG

K1 PROG

LCD KONEKTOR

Prepojka P0

Obr. 102 Rozmiestnenie základných komponentov modulu

označenie Popis

Konektor

RS232

9-pinový konektor sériového rozhrania RS232

KN Konektor na pripojenie sieťového adaptéra 8-20V/100mA

K1 PROG Programovací konektor programátora AVR

K2 PROG Programovací konektor ATmega8. Prepojením s K1 je možné sériovo

programovať MCU ATmega8.

Aplikačný

konektor

Aplikačný konektor na prepojenie modulu s externými obvodmi.

LCD

konektor

16-pinový konektor na pripojenie LCD zobrazovacej jednotky DEM 16101.

Tl1 Tlačidlo na reštartovanie MCU ATmega8.

Tl2 Tlačidlo pripojené na vývod MCU AT mega8, PD2 (INT0).

Prepojka P0 Prepojka na pripojenie sériového rozhrania k programátoru (AT90S2313),

alebo k aplikačnému MCU ATmega8.

Prepojka P1 Prepojka na pripojenie bežca trimra POT1 k vstupu A/D prevodníka, ADC0.

Prepojka P2 Prepojka na pripojenie vstupov interného analógového komparátora k bežcu

POT1-AIN0 a katóde D2-AIN1.

Prepojka P3 Prepojka na pripojenie vstupov A/D prevodníka (ADC1 a ADC2)

k výstupom OZ.

Prepojka P4 Prepojka na pripojenie PWM výstup OC1A k dolnopriepustnému filtru.

Page 265: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 265

Prepojka P5 Prepojka na voľbu funkcie vývodov PD6 a PD7. DSP versus externé obvody.

Svorka S1 Svorky na pripojenie odporového snímača.

Trimer PT1 Trimer na nastavenie veľkosti napätia v rozsahu 0 – VCC.

Tab.79 Popis nastavovacích a modifikačných prvkov, tlačidiel a konektorov

Demonštračný modul sa skladá z časti programátora ( AT90S2313 ) a z časti aplikačnej, na

báze MCU ATmega8.

9.1 PROGRAMÁTOR AVR

Programátor AVR spolupracuje s integrovaným vývojovým prostredím AVR Studio

(v personálnom počítači) a umožňuje programovať nasledovné obvody ATMEL AVR:

AT89S53, AT89S8252

AT90S1200

AT90S2313, AT90S2323, AT90S2333, AT90S2343

AT90S4414, AT90S4433, AT90S4434

AT90S8515, AT90S8535

ATmega103

ATmega128

ATmega16

ATmega161

ATmega163

ATmega32

ATmega103

ATmega8

ATmega83

ATmega8515

ATtiny10, ATtiny11, ATtiny12, ATtiny15, ATtiny19, ATtiny26

Programátor AVR komunikuje s personálnym počítačom prostredníctvom sériového

rozhrania RS232. Komunikačná rýchlosť je nastavená na 19200 b/s. Schéma programátora

AVR je uvedená na obr.103.

1

3

4

5

6

7

8

9

2

VCC

C1+

C1-

C2+

C2-

T1IN

T2IN

R1OUT

R2OUT

V+

V-

T1OUT

T2OUT

R1IN

R2IN

GND

2

6

14

7

13

8

15

1

34

511

10

129

16

232

VCC VCC

P0

/RESET

PD0 (RXD)

PD1 (TXD)

XTAL2

XTAL1

PD2 (INT0)

PD3 (INT1)

PD4 (T0)

PD5 (T1)

GND PD6 (ICP)

PB0 (AIN0)

PB1 (AIN1)

PB2

PB3 (OC1)

PB4

PB5 (MOSI)

PB6 (MISO)

PB7 (SCK)

VCC1

2

34

5

6

7

8

9

10 11

12

1314

15

16

1718

19

20

1

2

3

4

5 6

78

9

10

VCC

AT90S2313

RXD ATmega

TXD ATmega

K RS232

4 MHz

X1

C1

22pF

C2

22pF

R1

10k

C3

M1C4

M1

C5

M1

C6

M1

C7

M1

C8

M1

K1

PROG

a b1

2

3

Obr.103 Programátor AVR

Page 266: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 266

Modul programátora AVR komunikuje s personálnym počítačom prostredníctvom sériového

rozhrania, konektor K RS232. Komunikačné signály (RxD, TxD) sú na úroveň RS232

upravené obvodom MAX 232. Prepojka P0 musí byť v prípade programovania konfigurovaná

podľa obr.3. Sériové rozhranie je taktiež využívané na komunikáciu aplikačného MCU

ATmega8 s okolím, preto je možné pomocou prepojky P0 zvoliť jeden z dvoch možných

komunikačných režimov demonštračného modulu.

V režime programovanie je potrebné P0 konfigurovať podľa

Uvedeného obrázku.

V režime sériovej komunikácie MCU ATmega8 je potrebné

prepojku P0 konfigurovať podľa uvedeného obrázku.

Pri komunikácii s programovaným zariadením programátor

AVR využíva rozhranie ISP. Rozhranie ISP obsahuje

nasledujúce komunikačné signály: SCK, MISO, MOSI.

Okrem spomenutých komunikačných signálov je potrebné

ovládať vývod /RESET programovaného obvodu. V

programovacom konektore K1 PROG sú preto priradené

štyri vývody komunikačným a riadiacim signálom SCK,

MISO, MOSI a /RESET , ďalší vývod je priradený

digitálnej zemi - GND. V prípade, že chceme programovanú aplikáciu napájať z programátora

AVR je na konektor K1 PROG vyvedené aj napájacie napätie VCC. Rozmiestnenie signálov

na programovacom konektore K1 PROG je uvedené na obrázku.

9.2 APLIKAČNÁ ČASŤ MODULU ATMEGA8

Aplikačná časť modulu ATmega8 slúži na overenie činnosti, demonštráciu

základných princípov práce mikrokontroléra. a riešenie jednoduchých aplikačných úloh. Na

rozširujúcom konektore sú vyvedené dôležité signály mikrokontroléra, čo umožňuje vývoj

a overenie ďalších neštandardných aplikácií. Pomocou prepojok P1 až P5 je možné

konfigurovať aplikačnú časť modulu tak, aby bolo možné overiť aj alternatívne funkcie

vývodov MCU. Základným prvkom aplikačnej časti je mikrokontrolér ATmega8

synchronizovaný kryštálovým rezonátorom s frekvenciou 16 MHz. Reštartovať MCU je

možné pomocou tlačidla Tl1. Aplikačná časť má možnosť zobraziť požadované údaje

prostredníctvom troch sedemsegmentových zobrazovacích prvkov DSP1 až DSP3, prípadne

prostredníctvom LCD zobrazovacieho prvku, umožňujúceho zobraziť16 alfanumerických

znakov. Schéma aplikačnej časti je uvedená na obr.104. Z dôvodu väčšej prehľadnosti nie sú

P0

1 2 3

a

b

P0

1 2 3

a

b

K1 PROG 1

10

5

6

VCC MOSI GND

MISO SCK /RESET

Page 267: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 267

na obr.104 uvedené obvody napájania, zapojenie aplikačného konektora a konektora LCD

zobrazovacieho prvku.

A

B

C

D

E

F

G

H

SA1

SA2

A

B

CD

E

F

H

7

6

4

2

1

9

10

53

8

A

B

C

D

E

F

G

H

SA1

SA2

A

B

CD

E

F

H

7

6

4

2

1

9

10

53

8

A

B

C

D

E

F

G

H

SA1

SA2

A

B

CD

E

F

H

7

6

4

2

1

9

10

53

8

PC6 (/RESET)

PD0 (RXD)PD1 (TXD)

PD2 (INT0)

PD3 (INT1)PD4 (XCK,T0)

VCC

GND

PB6 (XT1,TOSC1)

PB7 (XT2,TOSC2)

PD5 (T1)

PD6 (AIN0)

PD7 (AIN1)

PB0 (ICP1) PB1 (OC1A)

PB2 (/SS,OC1B)

PB3 (MOSI,OC2)

PB4 (MISO)

PB5 (SCK)

AVCC

AREF

GND

PC0 (ADC0)

PC1 (ADC1)

PC2 (ADC2)

PC3 (ADC3)

PC4 (ADC4)

PC5 (ADC5)1

2

34

56

7

8

910

1112

13

14 15

16

17

18

19

20

21

22

24

25

2627

28

23

ATmega8 PDID

1

2

3

4

5 6

78

9

10VCC

R1 M1

C1

M1

C2

22pF C3

22pF

X1

16MHz

VCC

K2

PROG

LED4 R2

1k

VCC

a b1

2

3

D6

D7

D0D1

D2

D3

D4

D5

DSP1

DSP2

DSP3

T1 T2 T3

R3 2k2

R4 2k2

R5 2k2

R6:14

330j

VCC

P5

TL

C4

M1

C5

M1C6

M1

VCC

D2

POT1

10k

P1ADC0

R33

330j

C27

33uF

+

P2

a b

1

2

Tl1

Tl2

- -++

LM358

P4 R8 220j

C17 2.2uF+

1

2

a b

P3

R10 1kS1

PC1

ADC1PC2

ADC2

LM358

G

G

G

Obr.104 Aplikačná časť modulu ATmega8

Podrobnejší popis a účel jednotlivých komponentov, prepojok-Px a svoriek-S1 aplikačnej

časti modulu bude uvedený pri

popise jednoduchých aplikácií. Na

tomto mieste popíšeme

rozmiestnenie signálov aplikačného

konektora, ktorý slúži na prípadné

prepojenie modulu s okolím.

1 2 3 4 5 6 7 8 9 10

11121314151617181920

AG

ND

AG

ND

PC

1P

C0

PC

3P

C2

PC

5P

C4

PD

6/P

5P

D7

/P5

PB

2P

B1

PD

2P

B3

PD

4P

D3

PD

5G

ND

GN

DV

CC

Page 268: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 268

Aplikačný (rozširujúci) konektor „EX. KONEKTOR“ má 10 vývodov v dvoch radoch.

Rozmiestnenie signálov aplikačného konektora je uvedené na nasledujúcom obrázku.

9.3 NASTAVENIE PARAMETROV MCU

Parametre obvodu je možné nastaviť pomocou „lock“ a „fuse“ bitov v procese

programovania obvodu. Môžeme ich zvoliť v dialógovom okne „Advanced“ programátora.

V uvedených aplikáciách, v ktorých je využitý demonštračný modul ATmega8 sú nastavené

„fuse“ a „lock“ bity podľa obr.105.

Obr.105 Nastavenie parametrov MCU

Pripomeňme, že pomocou „lock“ a „fuse“ bitov sú nastavené nasledovné parametre MCU:

„Mode 1“ - Ochrana prístupu k pamätiam nie je nastavená, nie je obmedzené čítanie obsahu

a programovanie pamätí FLASH a EEPROM.

„BLB0 Mode 1“ – Nie sú nastavené žiadne obmedzenia pre používanie inštrukcií LPM

a SPM pri prístupe do aplikačnej časti pamäte programu.

Page 269: OBSAH - FRIbotfribot.sk/yrobot/wp-content/uploads/2015/04/ATmega8.pdf · Mikrokontroler ATmega8 - popis systému 5 1.1 SÚASNÝ STAV Napriek požiadavkám na neustále zvyšovanie

Mikrokontroler ATmega8 - popis systému 269

„BLB1 Mode 1“ – Nie sú nastavené žiadne obmedzenia pre používanie inštrukcií LPM

a SPM pri prístupe do časti pamäte zavádzacieho (boot) programu.

„SPI“ - Je povolené sériové programovanie SPI.

„BOOTRST“ – Voľba reštartovacej adresy. Reštartovacia adresa je 0x000.

„EESAVE“ – Ak je naprogramovaný bit EESAVE, tak sa obsah EEPROM pamäte pri

mazaní obsahu MCU (chipu) uchová.

„WDTON“ – Počiatočné povolenie „watch-dog“ čítača. Pri nastavení uvedenom na obr.8 je

činnosť WDT zakázaná, v prípade potreby je možné ju povoliť užívateľským programom.

„Reset Disable“ – Nastavenie funkcie RST/PC6 vývodu. Pri nastavení uvedenom na obr.8

má vývod priradenú funkciu RESET.

„Full Amplitude“ – Voľba veľkosti amplitúdy oscilátora. V aplikáciách pracujúcich

v zašumených prostrediach a pri budení ďalších aplikácií sa doporučuje daný bit CKOPT

naprogramovať označením uvedenej voľby. Taktiež pri použití rezonátora s frekvenciou

vyššou než 8 MHz je potrebné zvoliť „Full Amplitude“. Cenou za túto voľbu je zvýšenie

spotreby MCU.

„Ext XTAL,High frequency“ – Voľba použitého rezonátora. V uvedenom prípade je použitý

externý kryštálový rezonátor s vysokou frekvenciou.

„Startup: 4ms + 16K CK“ – Voľba štartovacieho času z režimov zo zníženou spotrebou

a doplnkového oneskorenia po reštarte MCU.

„NO BOD function“ – Povolene funkcie BOD - detekcia poklesu napájacieho napätia pod

definovanú hodnotu. Táto hodnota je určená pomocou „fuse“ bitu „BODLEVEL“.

„Boot block 1024 Words“ – Voľba veľkosti časti pamäte určenej pre zavádzací program.

Na základe nastavených parametrov MCU pracuje v základnom režime t.j. po reštarte sa čítač

inštrukcií nastaví na adresu 0x000. Ochrana pamätí MCU nie je nastavená. Nie sú nastavené

žiadne ďalšie obmedzenia na používanie inštrukcií SPM a LPM pri prístupe k pamäti.

Po nastavení parametrov MCU podľa obr.8 je hodnota „fuse“ a „lock“ bitov nasledovná:

BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0

0 1 1 1 1 1 1 1

„Fuse“ bity, dolný byt

RSTDISBL WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST

1 1 0 0 1 0 0 1

„Fuse“ bity, horný byt

BLB12 BLB11 BLB02 BLB01 LB2 LB1

1 1 1 1 1 1 1 1

„Lock“ bity

Význam jednotlivých bitov je uvedený v tabuľkách 69 až 71.

10 APLIKAČNÉ PRÍKLADY