Page 1
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
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
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
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
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
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
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
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
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
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
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
dá
t
dá
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
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
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
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
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
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
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
ná
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
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
ná
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Mikrokontroler ATmega8 - popis systému 49
Pxn
Q D
RES
úd
ajo
vá
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
vá
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
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
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
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
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
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
vá
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
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
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
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
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
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
vá
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
sť
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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