Mikroprocesorov´ a technika Laboratorn´ı cviˇcen´ı
Ing. Tom´ aˇ s Fr´ yza, Ph.D. Ing. Zbynˇ ek Fedra ˇ Ing. Jiˇ r´ı Sebesta, Ph.D.
´ USTAV RADIOELEKTRONIKY
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
1
Obsah 1 V´ yvojov´ e prostˇ red´ı AVR 1.1 Zad´an´ı . . . . . . . . 1.2 Teoretick´e poznatky . 1.3 Pokyny k zad´an´ı . . . 1.4 Shrnut´ı . . . . . . . . 1.5 Kontroln´ı ot´azky . . .
Studio, . . . . . . . . . . . . . . . . . . . . . . . . .
aritmetick´ e operace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 . 5 . 5 . 6 . 10 . 10
2 Ovl´ ad´ an´ı LED diod, oˇ setˇ ren´ı stisku tlaˇ c´ıtka 2.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . 2.2 Teoretick´e poznatky . . . . . . . . . . . . . 2.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . . 2.4 Shrnut´ı . . . . . . . . . . . . . . . . . . . . 2.5 Kontroln´ı ot´azky . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
11 11 11 12 16 16
3 Obsluha pˇ reruˇ sen´ı 3.1 Zad´an´ı . . . . . . . . . . . . . . . 3.2 Teoretick´e poznatky . . . . . . . . 3.2.1 Extern´ı pˇreruˇsen´ı . . . . . . 3.2.2 Pˇreruˇsen´ı od ˇc´ıtaˇce/ˇcasovaˇce 3.3 Pokyny k zad´an´ı . . . . . . . . . . 3.4 Shrnut´ı . . . . . . . . . . . . . . . 3.5 Kontroln´ı ot´azky . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
17 17 17 19 19 20 21 21
4 Pulznˇ eˇ s´ıˇ rkov´ a modulace 4.1 Zad´an´ı . . . . . . . . 4.2 Teoretick´e poznatky . 4.3 Pokyny k zad´an´ı . . . 4.4 Shrnut´ı . . . . . . . . 4.5 Kontroln´ı ot´azky . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
22 22 22 24 25 25
. . . . . . .
26 26 26 26 27 27 30 30
PWM . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
5 Programov´ an´ı v jazyce C, obsluha pˇ reruˇ sen´ı 5.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . . . 5.2 Teoretick´e poznatky . . . . . . . . . . . . . . 5.2.1 Vyˇsˇs´ı programovac´ı jazyky . . . . . . . 5.2.2 Obsluha pˇreruˇsen´ı v jazyce C . . . . . 5.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . . . 5.4 Shrnut´ı . . . . . . . . . . . . . . . . . . . . . . 5.5 Kontroln´ı ot´azky . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
6 Komunikace s LCD displejem 31 6.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.2 Teoretick´e poznatky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Mikroprocesorov´a technika
6.4 6.5
2
Shrnut´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Kontroln´ı ot´azky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7 Zpracov´ an´ı analogov´ ych sign´ al˚ u 7.1 Zad´an´ı . . . . . . . . . . . . . . 7.2 Teoretick´e poznatky . . . . . . 7.3 Pokyny k zad´an´ı . . . . . . . . 7.4 Shrnut´ı . . . . . . . . . . . . . . 7.5 Kontroln´ı ot´azky . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
35 35 35 36 38 38
8 S´ eriov´ y pˇ renos dat 8.1 Zad´an´ı . . . . . . . . 8.2 Teoretick´e poznatky 8.3 Pokyny k zad´an´ı . . 8.4 Shrnut´ı . . . . . . . 8.5 Kontroln´ı ot´azky . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
39 39 39 41 42 42
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
A V´ yvojov´ a deska ATmega16 B Z´ akladn´ı popis jazyka C B.1 Promˇenn´e a operandy . . . . . . . . B.2 Syntaxe podm´ınky . . . . . . . . . . B.3 Syntaxe cyklu . . . . . . . . . . . . . B.4 Specifika pˇrekladaˇce GCC a knihovny C Znakov´ a sada LCD displeje
43
. . . . . . . . . . . . . . . avr-libc
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
44 44 45 46 47 48
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
3
Seznam obr´ azk˚ u 1.1 1.2 1.3 1.4 1.5 2.1 2.2 2.3 2.4 3.1 4.1 4.2 5.1 5.2 5.3 6.1 6.2 7.1 8.1 8.2 A.1 C.1
Vytvoˇren´ı nov´eho projektu a v´ ybˇer programovac´ıho jazyka . . . . . V´ ybˇer lad´ıc´ı platformy a c´ılov´eho mikrokontrol´eru ATmega16 . . . . V´ yvojov´e prostˇred´ı AVR Studio s vytvoˇren´ ym pr´azdn´ ym projektem ´ eˇsn´ Uspˇ y pˇreklad aplikace a informace o velikosti v´ ysledn´eho k´odu . Ladic´ı prostˇred´ı AVR Studia . . . . . . . . . . . . . . . . . . . . . . V´ ybˇer AVR program´atoru . . . . . . . . . . . . . . . . . . . . . . . Dialogov´e okno pro programov´an´ı mikrokontrol´eru ATmega16 . . . Zobrazen´ı obsahu registr˚ u I/O port˚ u A, B, C a D . . . . . . . . . . Uk´azka pouˇzit´ı direktiv pro ˇr´ızen´ı pˇrekladu zdrojov´eho k´odu . . . . Uk´azka z´apisu pˇreruˇsen´ı v jazyce symbolick´ ych adres . . . . . . . . Princip tvorby PWM sign´alu . . . . . . . . . . . . . . . . . . . . . . ˇ Casov´ y diagram generov´an´ı PWM sign´alu (obr´azek pˇrevzat z [5]) . Uk´azka z´apisu pˇreruˇsen´ı v programovac´ım jazyce C . . . . . . . . . Princip zmˇeny frekvence generovan´eho akustick´eho sign´alu . . . . . V´ ybˇer program´atoru AVRISP mkII . . . . . . . . . . . . . . . . . . Zapojen´ı LCD displeje na v´ yvojov´e desce ATmega16 . . . . . . . . Novˇe definovan´ y znak × pro LCD displej . . . . . . . . . . . . . . . Zapojen´ı odporov´eho dˇeliˇce v poli konektor˚ u v´ yvojov´e desky . . . . Struktura asynchronn´ıho r´amce . . . . . . . . . . . . . . . . . . . . Aplikace Terminal pro ovl´ad´an´ı s´eriov´eho portu poˇc´ıtaˇce . . . . . . Zapojen´ı v´ yvojov´e desky ATmega16 . . . . . . . . . . . . . . . . . . Znakov´a sada LCD displeje (obr´azek pˇrevzat z [12]) . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
7 7 8 8 9 13 14 15 15 19 23 23 28 29 29 32 34 37 40 41 43 48
Mikroprocesorov´a technika
4
Seznam tabulek 3.1 3.2 3.3 5.1 6.1 6.2 B.1 B.2 B.3 B.4 B.5
Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 . Zp˚ usob spouˇstˇen´ı extern´ıch pˇreruˇsen´ı INTn (MCUCR) . . . . Nastaven´ı pˇreddˇeliˇcky ˇc´ıtaˇce/ˇcasovaˇce 0 (TCCR0) . . . . . . Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 . Nˇekter´e pˇr´ıkazy HD44780 pro komunikaci s LCD displejem Soupis nˇekter´ ych funkc´ı knihovny pro LCD . . . . . . . . . Nˇekter´e typy a rozsahy hodnot promˇenn´ ych . . . . . . . . Aritmetick´e operace . . . . . . . . . . . . . . . . . . . . . . Bitov´e a logick´e operace . . . . . . . . . . . . . . . . . . . Relaˇcn´ı operandy . . . . . . . . . . . . . . . . . . . . . . . Speci´aln´ı funkce pro mikrokontrol´ery AVR . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
18 19 20 28 32 33 45 45 45 46 47
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
1
5
V´ yvojov´ e prostˇ red´ı AVR Studio, aritmetick´ e operace
Test pˇ redchoz´ıch znalost´ı 1. Jak´e ˇc´ıseln´e soustavy se nejˇcastˇeji vyuˇz´ıvaj´ı k reprezentaci hodnot v mikroprocesorov´e technice a jak´ ym zp˚ usobem se graficky odliˇsuj´ı (pˇr´ıpony, prefixy, . . .)? 2. Jak´ ym zp˚ usobem lze pˇrev´adˇet hodnoty z bin´arn´ı podoby do hexadecim´aln´ı, pˇr´ıp. do soustavy des´ıtkov´e? 3. Jak´e instrukce lze u mikrokontrol´eru AVR pouˇz´ıt k v´ ypoˇctu souˇctu a rozd´ılu dvou hodnot?
C´ıle laboratorn´ı u ´ lohy C´ılem laboratorn´ı u ´lohy je osvojen´ı si pr´ace s v´ yvojov´ ym prostˇred´ım AVR Studio, urˇcen´e pro psan´ı a ladˇen´ı aplikac´ı, stejnˇe jako programov´an´ı mikrokontrol´er˚ u AVR. Souˇcasnˇe m´a u ´loha za c´ıl umoˇznit student˚ um proniknout do zp˚ usobu v´ yvoje a testov´an´ı jednoduch´ ych aplikac´ı, urˇcen´ ych pro mikrokontrol´er ATmega16.
1.1
Zad´ an´ı
1. Seznamte se s v´ yvojov´ ym prostˇred´ım AVR Studio pro programov´an´ı a ladˇen´ı aplikac´ ı s mikrokontrol´ e ry AVR. Vytvoˇrte jednoduchou aplikaci pro v´ ypoˇcet vztahu P ych adres (JSA). i=0 {a + b − i} v jazyce symbolick´ 2. Pomoc´ı integrovan´eho lad´ıc´ıho n´astroje analyzujte spr´avnou funkci vytvoˇren´e aplikace. 3. Proved’te ruˇcn´ı pˇreklad jedn´e instrukce z vaˇseho programu. V´ ysledek zkontrolujte se strojov´ ym pˇrekladem. 4. Modifikujte vytvoˇrenou aplikaci na v´ ypoˇcet hodnot 2n , kde n = 1, 2, . . . , 7. 5. Vytvoˇrte program pro realizaci souˇctu dvou komplexn´ıch ˇc´ısel.
1.2
Teoretick´ e poznatky
V ˇc´ıslicov´ ych soustav´ach, tedy i v mikroprocesorov´e technice, jsou hodnoty reprezentov´any vˇzdy v bin´arn´ı soustavˇe, tj. rozliˇsuj´ı se jen dva stavy. Vzhledem k faktu, ˇze z´apis hodnot v bin´arn´ı podobˇe je rozs´ahl´ y a tud´ıˇz nepˇr´ıliˇs pˇrehledn´ y, pouˇz´ıv´a se pro lepˇs´ı kompaktnost z´apisu soustava hexadecim´aln´ı. V t´eto soustavˇe je moˇzn´e kaˇzdou ˇctveˇrici bit˚ u nahradit jedin´ ym symbolem z mnoˇziny {0, 1, . . . , 9, A, . . . , F }. Posledn´ı ˇc´ıselnou soustavou, kter´a se pouˇz´ıv´a v mikroprocesorov´e technice je soustava des´ıtkov´a. V t´eto soustavˇe jsou zpravidla vyˇzadov´any vstupn´ı a v´ ystupn´ı hodnoty srozumiteln´e pro uˇzivatele; napˇr.:
Mikroprocesorov´a technika
6
hodnoty operand˚ u v kalkulaˇcce, zobrazen´a velikost mˇeˇren´eho napˇet´ı, ˇcas na digit´aln´ıch hodin´ach a podobnˇe. Historie mikrokontrol´er˚ u sah´a do konce sedmdes´at´ ych let 20. stolet´ı, od kdy se v´ yvoj v mikroprocesorov´e technice rozdˇelil na dvˇe vˇetve. Prvn´ı smˇer vede ke zvyˇsov´an´ı poˇcetn´ıho v´ ykonu procesor˚ u, vˇetˇs´ıch kapacit i rychlost´ı pamˇet´ı, apod. Do t´eto kategorie patˇr´ı napˇr. mikroprocesory z oblasti PC techniky. Druh´ y proud smˇeˇroval k integraci vˇsech potˇrebn´ ych obvod˚ u do jedin´e souˇc´astky. O mikrokontrol´erech tedy hovoˇr´ıme jako o mikroprocesorech, doplnˇen´ ych o obvody pamˇet´ı a pˇr´ıdavn´ ych periferi´ı, um´ıstˇen´ ych na jedin´em ˇcipu. Takto vytvoˇren´ y obvod je n´aslednˇe schopen ˇr´ıdit jednoduch´e aplikace z oblasti spotˇrebn´ı elektroniky, audio-video techniky, zabezpeˇcovac´ıch zaˇr´ızen´ı, obsluhy kl´avesnic a myˇs´ı v PC technice, v automobilov´em pr˚ umyslu (ˇr´ıdic´ı jednotky motor˚ u, ABS) a v mnoha dalˇs´ıch technick´ ych oblastech [2]. V souˇcasn´e dobˇe existuje cel´a ˇrada v´ yrobc˚ u, kteˇr´ı produkuj´ı mikrokontrol´ery s r˚ uznou strukturou. Kromˇe nejstarˇs´ı a patrnˇe nejrozˇs´ıˇrenˇejˇs´ı ˇrady ’51 firmy Intel, jsou bˇeˇzn´e tak´e produkty firmy Microchip (PIC), Freescale (HC08, HC11, . . .), ˇci Atmel (AVR). Mikrokontrol´ery AVR obsahuj´ı 32 identick´ ych 8bitov´ ych registr˚ u pro bˇeˇzn´e pouˇzit´ı (oznaˇcovan´e r0 aˇz r31), kter´e mohou obsahovat jak data, tak i adresy. Pamˇet’ov´ y prostor mikrokontrol´eru d´ale obsahuje 64 adres vstupnˇe/v´ ystupn´ıch registr˚ u, kter´e slouˇz´ı k perifern´ım funkc´ım jako jsou ˇr´ıdic´ı registry, ˇc´ıtaˇce/ˇcasovaˇce, A/D pˇrevodn´ıky a dalˇs´ı (podrobnˇeji o I/O registrech v n´asleduj´ıc´ıch laboratorn´ıch cviˇcen´ıch).
1.3
Pokyny k zad´ an´ı
Bod 1. V´ yvojov´e prostˇred´ı AVR Studio je voln´ y n´astroj, kter´ y je dostupn´ y ke staˇzen´ı na internetov´ ych str´ank´ach firmy Atmel [1] a slouˇz´ı k v´ yvoji a testov´an´ı aplikac´ı pro mikrokontrol´ery AVR. Program lze spustit kliknut´ım na ikonu ”beruˇsky” na pracovn´ı ploˇse, pˇr´ıp. pˇres Start/Programs/Atmel AVR Tools/AVR Studio 4. Pro kaˇzdou aplikaci je nutn´e vytvoˇrit tzv. projekt, kter´ y obsahuje informace o souborech se zdrojov´ ym k´odem i o konkr´etn´ım mikrokontrol´eru, pro kter´ y je aplikace urˇcena. Nov´ y projekt lze vytvoˇrit v menu Project/New Project. V n´asleduj´ıc´ım dialogov´em oknˇe je potˇreba zvolit v jak´em programovac´ım jazyce bude cel´a aplikace naps´ana. Moˇzn´e jsou dvˇe varianty: v jazyce symbolick´ ych adres (tj. v tzv. asembleru) - Atmel AVR Assembler, nebo ve vyˇsˇs´ım programovac´ım jazyce C (dostupn´ y je pˇrekladaˇce GCC) - AVR GCC. Toto laboratorn´ı cviˇcen´ı je urˇceno k osvojen´ı si programov´an´ı v JSA, proto zvolte volbu Atmel AVR Assembler. D´ale je nutn´e napsat n´azev cel´eho projektu Project name a pˇredevˇs´ım uv´est um´ıstˇen´ı na pevn´em disku Location, kam m´a b´ yt novˇe vytvoˇren´ y projekt uloˇzen. Vˇsechny projekty doˇcasnˇe ukl´adejte do adres´aˇre D:\BMPT\vase jmeno\. Zatrˇzen´ım voleb Create initial file a Create folder zajist´ıte vytvoˇren´ı podadres´aˇre (jm´eno bude totoˇzn´e s n´azvem projektu) a vytvoˇren´ı pr´azdn´eho zdrojov´eho souboru s n´azvem nazev projektu.asm (viz. obr´azek 1.1). Volby potvrd’te tlaˇc´ıtkem Next. Tvorba projektu pokraˇcuje v´ ybˇerem platformy pro ladˇen´ı projektu a c´ılov´eho mikrokontrol´eru. Vyberte ladˇen´ı aplikace pomoc´ı intern´ıho simul´atoru AVR Simulator a mikrokontrol´er ATmega16. (viz. obr´azek 1.2). Po stisknut´ı tlaˇc´ıtka Finish se nov´ y projekt vytvoˇr´ı a otevˇre se v samotn´em v´ yvojov´em prostˇred´ı, jak lze vidˇet na obr´ azku 1.3.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
7
Obr´ azek 1.1: Vytvoˇren´ı nov´eho projektu s n´azvem prvni asm a v´ ybˇer programovac´ıho jazyka
Obr´ azek 1.2: V´ ybˇer lad´ıc´ı platformy a c´ılov´eho mikrokontrol´eru ATmega16 Prostˇred´ı je rozdˇeleno do ˇctyˇr ˇc´ast´ı: 1) menu a ovl´adac´ı prvky, 2) inspektor projektu (v programovac´ım m´odu) a vnitˇrn´ı uspoˇr´ad´an´ı mikrokontrol´eru (v ladic´ım m´odu), 3) editor pro psan´ı zdrojov´eho k´odu a 4) informaˇcn´ı panel o pr˚ ubˇehu pˇrekladu aplikace. Pomoc´ı editoru vytvoˇrte zdrojov´ y k´od v JSA pro mikrokontrol´er ATmega16, kter´ y umoˇzn´ı naplnˇen´ı dvouP8bitov´ ych registr˚ u konstantami a a b, kter´e n´aslednˇe vyuˇzijte pro aritmetickou operaci i=0 {a + b − i}. V podstatˇe se jedn´a o nekoneˇcnou smyˇcku s jednou operac´ı souˇctu a jednou dekrementac´ı v kaˇzd´em cyklu. Pro hodnoty a a b uvaˇzujte neznam´enkov´a ˇc´ısla. Vyuˇzijte instrukce mikrokontrol´eru ATmega16 pro aritmetick´e operace bez pˇrenosu a z d˚ uvodu zjednoduˇsen´ı neuvaˇzujte moˇznost pˇreteˇcen´ı. Pro z´apis sˇc´ıtanc˚ u pouˇzijte hodnoty zadan´e v hexadecim´aln´ı a v bin´arn´ı podobˇe! Zdrojov´ y k´od lze pˇreloˇzit pˇr´ıkazem Build/Build, pˇr´ıp. stisknut´ım kl´avesy F7, nebo na liˇstˇe 1). T´ımto pˇr´ıkazem dojde nejprve ke syntaktick´e kontkliknut´ım na ikonu role zdrojov´eho k´odu a n´aslednˇe k pˇrekladu do strojov´eho k´odu dan´eho mikrokontrol´eru. Informace o pr˚ ubˇehu a v´ ysledc´ıch pˇrekladu jsou zobrazeny v informaˇcn´ım panelu 4). ´ Uspˇeˇsn´ y pˇreklad je indikov´an konstatov´an´ım Assembly complete, 0 errors. ´ eˇsn´ 0 warnings. Eventu´aln´ı chyby je potˇreba odstranit. Uspˇ y pˇreklad je tak´e doprov´azen
Mikroprocesorov´a technika
8
Obr´ azek 1.3: V´ yvojov´e prostˇred´ı AVR Studio s vytvoˇren´ ym pr´azdn´ ym projektem informac´ı o velikosti v´ ysledn´eho k´odu a jeho rozloˇzen´ı do programov´e pamˇeti Flash (.cseg), datov´e pamˇeti (.dseg) a do pamˇeti EEPROM (.eseg) (viz. obr´ azek 1.4).
´ eˇsn´ Obr´ azek 1.4: Uspˇ y pˇreklad aplikace a informace o velikosti v´ ysledn´eho k´odu
Bod 2. Korektn´ı funkci programu vyzkouˇsejte v integrovan´em simul´atoru. Do lad´ıc´ıho reˇzimu se pˇrep´ın´a pˇr´ıkazem Debug/Start Debugging, stisknut´ım kl´avesov´e zkratky
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
9
Ctrl+Shift+Alt+F5, nebo kliknut´ım na ikonu . Proces pˇrekladu a spuˇstˇen´ı ladic´ıho . V prostˇred´ı simul´atoru jsou zpˇr´ıstupnˇeny tlaˇc´ıtka n´astroje lze sjednotil tlaˇc´ıtkem v pˇr´ıkazov´e liˇstˇe ovl´adaj´ıc´ı bˇeh a krokov´an´ı programu, nastavov´an´ı breakpoint˚ u, ˇci zobrazuj´ıc´ı obsah pamˇeti, registr˚ u a zvolen´ ych promˇenn´ ych. V inspektoru projekt˚ u na lev´e stranˇe doˇslo automaticky k pˇrepnut´ı na z´aloˇzku I/O View, obsahuj´ıc´ı hodnoty veˇsker´ ych registr˚ u (ˇr´ıdic´ıch i pro obecn´e pouˇzit´ı r0 - r31) jak zn´azorˇ nuje obr´ azek 1.5.
Obr´ azek 1.5: Ladic´ı prostˇred´ı AVR Studia Krokov´an´ım programu (napˇr. kl´avesou F11) ovˇeˇrte spr´avnou funkci vaˇs´ı aplikace. Ukonˇcen´ı reˇzimu ladˇen´ı lze prov´est pˇr´ıkazem Debug/Stop Debugging, kl´avesovou zkratkou Ctrl+Shift+F5, nebo tlaˇc´ıtkem . Bod 3. Vyuˇcuj´ıc´ı v´am zad´a jednu konkr´etn´ı instrukci z vaˇseho programu a pomoc´ı manu´alu instrukˇcn´ı sady mikrokontrol´er˚ u AVR [6] ji ruˇcnˇe pˇreloˇzte do strojov´eho k´odu. V´ ysledek zkontrolujte s automatick´ ym pˇrekladem programu AVR Studio. Zobrazit strojov´ y k´od lze v ladic´ım m´odu napˇr´ıklad pˇr´ıkazem View/Disassembler (tlaˇc´ıtko ). Z kolika bit˚ u se skl´ad´a jedna instrukce mikrokontrol´eru AVR? Bod 4. Vytvoˇrte nov´ y projekt pro mikrokontrol´er ATmega16 a v JSA realizujte program pro postupn´ y v´ ypoˇcet hodnot 2n , kde n = 1, 2, . . . , 7. Lze vyuˇz´ıt ˇc´ast programu vytvoˇren´eho v bodˇe 1. Ukonˇcovac´ı podm´ınkou se nezab´ yvejte. Kolik byt˚ u obsahuje v´ami vytvoˇren´ y program a kolik instrukc´ı jste pouˇzili? Jak´ ym zp˚ usobem lze jednoduˇse realizovat n´asoben´ı a dˇelen´ı hodnotou 2n v bin´arn´ı soustavˇe? Bod 5. Vytvoˇrte nov´ y projekt pro mikrokontrol´er ATmega16 a v JSA naprogramujte aplikaci, kter´a bude realizovat souˇcet dvou komplexn´ıch ˇc´ısel zadan´ ych ve sloˇzkov´em tvaru. Pro re´aln´e i imagin´arn´ı sloˇzky uvaˇzujte cel´a neznam´enkov´a ˇc´ısla, kter´a si zvol´ıte. Je vhodn´e volit ˇc´ısla menˇs´ı, aby pˇri d´ılˇc´ıch aritmetick´ ych operac´ıch nedoˇslo k pˇreteˇcen´ı a
Mikroprocesorov´a technika
10
t´ım k obt´ıˇzn´e kontrole spr´avnosti v´ ysledk˚ u. Pro kaˇzdou z komplexn´ıch ˇc´ast´ı vstupn´ıch a v´ ystupn´ıch hodnot vyˇcleˇ nte jeden 8bitov´ y registr. Celkem tedy vstupn´ı a v´ ystupn´ı data zaberou ˇsest registr˚ u (re´aln´a a imagin´arn´ı ˇc´ast pro dvˇe vstupn´ı ˇc´ısla a jeden v´ ysledek). Pro pˇripomenut´ı je souˇcet dvou komplexn´ıch ˇc´ısel a a b definov´an rovnic´ı a + b = (<{a} + <{b}) + (={a} + ={b}) ,
(1.1)
kde <{a} reprezentuje re´alnou ˇc´ast a ={a} imagin´arn´ı ˇc´ast komplexn´ıho ˇc´ısla a a je imagin´arn´ı jednotka. Vypoˇctenou hodnotu zkontrolujte ”ruˇcn´ım” v´ ypoˇctem, pˇr´ıp. v programu Matlab. Kolik instrukc´ı obsahuje v´aˇs program pro v´ ypoˇcet souˇctu komplexn´ıch ˇc´ısel? Jak velkou ˇc´ast pamˇeti program zab´ır´a? Kolik registr˚ u vyuˇz´ıv´ate celkem?
1.4
Shrnut´ı
Laboratorn´ı u ´loha byla koncipov´ana jako u ´vod do v´ yvoje aplikac´ı pro mikrokontrol´er ATmega16. Jej´ım u ´kolem bylo pˇribl´ıˇzit student˚ um tvorbu programu v jazyce symbolick´ ych adres, spr´avn´e pouˇzit´ı z´akladn´ıch instrukc´ı, pˇreklad instrukc´ı do strojov´eho k´odu a ladˇen´ı programu pomoc´ı simul´atoru. Hlavn´ı d˚ uraz byl kladen na uˇzit´ı instrukc´ı aritmetick´ ych operac´ı a operac´ı pro pˇresun dat.
1.5
Kontroln´ı ot´ azky
Ot´ azka 1.1 Kolik registr˚ u obsahuje mikrokontrol´er ATmega16 a jak´ym zp˚ usobem lze v programu AVR Studio zobrazit jejich obsah? Ot´ azka 1.2 Je n´asleduj´ıc´ı posloupnost instrukc´ı syntakticky a s´emanticky spr´ avn´ a? ldi ldi add sub
r16,1f r17,25 r16,r15 r16,r17
Ot´ azka 1.3 Obmˇen ˇte aplikaci z bodu 5 pro v´ypoˇcet komplexn´ıho souˇcinu? a · b = (<{a} · <{b} − ={a} · ={b}) + (<{a} · ={b} + ={a} · <{b}) .
(1.2)
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
2
11
Ovl´ ad´ an´ı LED diod, oˇ setˇ ren´ı stisku tlaˇ c´ıtka
Test pˇ redchoz´ıch znalost´ı 1. Jak´ ym zp˚ usobem m˚ uˇze mikrokontrol´er komunikovat s okol´ım? Jak lze u mikrokontrol´eru ATmega16 definovat smˇer komunikace jednotliv´ ych pin˚ u? 2. Co jsou to tzv. vstupnˇe/v´ ystupn´ı registry mikrokontrol´eru, k ˇcemu slouˇz´ı a jak´ ym zp˚ usobem lze s nimi pracovat? 3. Jak je moˇzn´e v mikroprocesorov´e technice snadno testovat, zda je v´ ysledek aritmetick´e operace roven nule? Jak lze tento postup vyuˇz´ıt pro realizaci cyklu?
C´ıle laboratorn´ı u ´ lohy C´ılem laboratorn´ı u ´lohy je vyuˇzit´ı mikrokontrol´eru k ˇr´ızen´ı jednoduch´ ych proces˚ u prostˇrednictv´ım I/O port˚ u. D´ale je c´ılem u ´lohy realizace podm´ınˇen´ ych skok˚ u a vol´an´ı podprogram˚ u.
2.1
Zad´ an´ı
1. V jazyce symbolick´ ych adres AVR sestavte a ovˇeˇrte jednoduchou aplikaci pro rozsv´ıcen´ı zvolen´ ych LED diod, kter´e jsou pˇripojeny k I/O br´anˇe mikrokontrol´eru. Seznamte se s v´ yvojovou deskou STK500 a s metodou programov´an´ı re´aln´ ych mikrokontrol´er˚ u prostˇrednictv´ım ISP (In System Programming). 2. Vytvoˇrte 8bitov´ y bin´arn´ı ˇc´ıtaˇc, jehoˇz hodnotu zobrazte pomoc´ı LED diod. Realizujte zpoˇzdˇen´ı chodu ˇc´ıtaˇce. 3. Modifikujte aplikaci z pˇredeˇsl´eho bodu a zpoˇzdˇen´ı realizujte pomoc´ı podprogramu. 4. V jazyce symbolick´ ych adres AVR sestavte obdobnou aplikaci 8bitov´eho ˇc´ıtaˇce jako v pˇredeˇsl´em bodˇe, jen zmˇeny stav˚ u ˇc´ıtaˇce realizujte stiskem tlaˇc´ıtka.
2.2
Teoretick´ e poznatky
Vˇsechny vstupnˇe/v´ ystupn´ı porty (I/O br´any) mikrokontrol´eru ATmega16 mohou b´ yt pouˇzity jako obecn´e ˇc´ıslicov´e vstupy/v´ ystupy a souˇcasnˇe mohou tvoˇrit rozhran´ı k jednotliv´ ym periferi´ım implementovan´ ym na ˇcipu procesoru. Alternativn´ı periferie jsou ve sch´ematick´em znaku definov´any popisem pinu v z´avorce. T´ımto zp˚ usobem jsou ˇreˇseny I/O obvody vˇsech mikrokontrol´er˚ u (nˇekter´e I/O piny nemusej´ı b´ yt pˇripojeny k intern´ı periferii a obvykle pak jsou pouze obecn´ ym ˇc´ıslicov´ ym vstupem/v´ ystupem). Jednotliv´e I/O piny procesor˚ u ˇrady AVR jsou ˇreˇseny tzv. Read-Modify-Write architekturou, tj. smˇer toku dat a stav jednotliv´ ych I/O pin˚ u lze libovolnˇe mˇenit nez´avisle na ostatn´ıch pinech. Pro pr´aci s I/O br´anami, aplikovan´ ymi jako obecn´e ˇc´ıslicov´e vstupy/v´ ystupy, slouˇz´ı skupina konfiguraˇcn´ıch registr˚ u. U mikrokontrol´eru AVR jsou pro tyto u ´ˇcely k dispozici n´asleduj´ıc´ı registry (symbol n definuje n´azev portu A, B, C nebo D):
Mikroprocesorov´a technika
12
DDRn (Data Direction Registr) urˇcuje smˇer toku dat, z´apisem hodnoty 0 na pˇr´ısluˇsn´ y bit tohoto registru konfigurujeme I/O pin jako vstupn´ı, z´apisem hodnoty 1 jako v´ ystupn´ı, PORTn je datov´ ym registrem portu a odpov´ıd´a hodnotˇe zapsan´e do vyrovn´avac´ıho registru portu, tedy hodnotˇe kterou zapisujeme na pˇr´ısluˇsn´ y pin (v´ yvod) br´any, PINn (Pins Input) je urˇcen pro ˇcten´ı a odpov´ıd´a hodnotˇe pˇreˇcten´e (synchronizovan´e) z pˇr´ısluˇsn´eho pinu (log. u ´roveˇ n sign´alu pˇriveden´a z vnˇejˇs´ıch obvod˚ u na tento pin). V architektuˇre AVR jsou definov´any dalˇs´ı registry pro pr´aci s I/O branami umoˇzn ˇuj´ıc´ı konfiguraci pull-up rezistor˚ u, nastaven´ı vysok´e impedance, apod. Pro naˇsi pr´aci budou prozat´ım postaˇcovat v´ yˇse uveden´e registry. Pro ˇcasto se opakuj´ıc´ı ˇc´asti zdrojov´eho k´odu se vyuˇz´ıvaj´ı makra nebo podprogramy. Makra jsou realizov´ana pomoc´ı pˇrekladaˇce, kdy se do zdrojov´eho k´odu vkl´ad´a poˇzadovan´a posloupnost instrukc´ı. Takto psan´e aplikace tedy zab´ıraj´ı vˇetˇs´ı ˇc´ast programov´e pamˇeti. Jejich v´ ykon je ale rychlejˇs´ı. Podprogram se odliˇsuje t´ım, ˇze je v pamˇeti obsaˇzen pouze jednou a pˇri kaˇzd´em pouˇzit´ı se tzv. vol´a, tj. sk´aˇce se na m´ısto v pamˇeti, kde je uloˇzen. Skoky a n´avraty z podprogramu zp˚ usobuj´ı delˇs´ı dobu v´ ykonu oproti makru. Pˇri vol´an´ı podprogramu je tak´e nutn´e uloˇzit tzv. n´avratovou adresu, tj. pamˇet’ovou pozici kde bude v´ ykon programu pokraˇcovat po n´avratu z podprogramu. N´avratov´a adresa se ukl´ad´a do z´asobn´ıku, pro kter´ y je vyˇclenˇena ˇc´ast pamˇeti SRAM.
2.3
Pokyny k zad´ an´ı
Bod 1. Ve v´ yvojov´em prostˇred´ı vytvoˇrte nov´ y projekt v jazyce symbolick´ ych adres (v kolonce Project type je nutn´e vybrat volbu Atmel AVR Assembler). V zadan´e aplikaci je u ´kolem rozsv´ıtit LED diody zapojen´e k I/O br´anˇe. Postup je tedy zˇrejm´ y, nejprve z´apisem do registru DDRn zap´ıˇseme konfiguraˇcn´ı hodnotu tak, aby pˇr´ısluˇsn´e piny dan´e I/O br´any, k nimˇz jsou pˇripojeny LED diody, byly nastaveny jako v´ ystupn´ı (hodnota 1). Z´apisem do pˇr´ısluˇsn´eho registru PORTn pak definujeme, kter´a z tˇechto LED diod bude sv´ıtit. Pro z´apis do registr˚ u periferi´ı (I/O registry) se vyuˇz´ıv´a instrukce out, pro ˇcten´ı pak instrukce in. Z hlediska hardwarov´eho je tedy nutno vˇedˇet jak jsou LED diody k I/O v´ yvod˚ um mikrokontrol´eru pˇripojeny. Dalˇs´ı d˚ uleˇzitou informac´ı pˇri pˇripojov´an´ı dalˇs´ıch obvod˚ u k I/O pin˚ um je proudov´a zat´ıˇzitelnost jednotliv´ ych pin˚ u. Ta je uvedena v katalogov´em listu mikrokontrol´eru a je specifikov´ana jak pro logickou u ´roveˇ n v´ ystupu 0, tak i 1 a obvykle se tyto hodnoty liˇs´ı. Souˇcasnˇe je tˇreba kontrolovat tak´e celkov´ y odbˇer vˇsech pˇripojen´ ych obvod˚ u k I/O port˚ um mikrokontrol´eru, aby nebyla pˇrekroˇcena celkov´a dovolen´e v´ ykonov´a ztr´ata na ˇcipu (najdeme ji opˇet v katalogov´em listu a obvykle je definov´ana v z´avislosti na provozn´ı teplotˇe okol´ı). Pro tuto laboratorn´ı u ´lohu budeme vyuˇz´ıvat v´ yvojovou desku STK500 firmy Atmel, pˇripojenou k poˇc´ıtaˇci prostˇrednictv´ım s´eriov´eho rozhran´ı RS-232. Zapojen´ı desky a jej´ı popis je uveden v [4]. V´ yvojov´a deska umoˇzn ˇuje programovat celou ˇradu mikrokontrol´er˚ u typu AVR. Pro naˇse potˇreby byl vybr´an mikrokontrol´er ATmega16. K I/O bran´am procesoru lze pomoci propojek pˇripojovat r˚ uzn´e perifern´ı obvody. S ohledem na zad´an´ı je port D pˇripojen k osmici tlaˇc´ıtek a port B k sadˇe LED diod. Propojen´ı nemˇen ˇte.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
13
Ned´ılnou ˇc´ast´ı v´ yvojov´e desky je programovac´ı modul mikrokontrol´eru, tedy jednotka umoˇzn ˇuj´ıc´ı naprogramovat mikrokontrol´er pˇr´ımo z prostˇred´ı AVR Studio. Tato programovac´ı jednotka umoˇzn ˇuje bezprostˇredn´ı programov´an´ı mikrokontrol´eru zapojen´eho v re´aln´em syst´emu. Nen´ı tedy tˇreba mikrokontrol´er vytahovat ˇci vypajovat z c´ılov´eho hardwaru. Tento zp˚ usob programov´an´ı je oznaˇcov´an zkratkou ISP (In System Programming). V n´asleduj´ıc´ım odstavci bude struˇcnˇe uk´az´ano jak vaˇsi sestavenou, pˇreloˇzenou a pˇr´ıpadnˇe odladˇenou aplikaci v simul´atoru AVR Studia naprogramovat do fyzick´eho mikrokontrol´eru prostˇrednictv´ım ISP. Pˇri zakl´ad´an´ı projektu zad´ate jeho jm´eno a v oknˇe Select debug platform and device natav´ıte AVR Simulator a ATmega16. ISP syst´em neumoˇzn ˇuje ladˇen´ı aplikace pˇr´ımo v syst´emu, k tomuto u ´ˇcelu slouˇz´ı jin´e, finanˇcnˇe n´akladnˇejˇs´ı prostˇredky (vyuˇz´ıvaj´ıc´ı napˇr. JTAG rozhran´ı), viz. pˇredn´aˇsky. Ladˇen´ı m˚ uˇzete prov´adˇet v simul´atoru v AVR Studiu. Po sestaven´ı a odladˇen´ı aplikace lze pˇristoupit k fyzick´emu naprogramov´an´ı mikrokontrol´eru ve v´ yvojov´e desce. ISP programov´an´ı v AVR Studiu aktivujeme v menu Tools/Program AVR, kde jsou k dispozici dva zp˚ usoby nav´az´an´ı komunikace AVR Studia s ISP program´atorem: Connect a Auto Connect. V naˇsem pˇr´ıpadˇe je v´ yhodnˇejˇs´ı poloˇzka Auto Connect, po kliknut´ı na ni se vyhled´a dostupn´ y program´ator pˇripojen´ y k poˇc´ıtaˇci a otevˇre dialogov´e okno pro fyzick´e naprogramov´an´ı mikrokontrol´eru. Auto Connect lze akv horn´ı liˇstˇe n´astroj˚ u. Pro u ´plnost, poloˇzka Connect tivovat tak´e kliknut´ım na ikonku umoˇzn ˇuje ruˇcn´ı nastaven´ı program´atoru. Vyberte program´ator STK500 or AVRISP.
Obr´ azek 2.1: V´ ybˇer AVR program´atoru Okno pro nastaven´ı programov´an´ı pomoc´ı ISP program´atoru je zn´azornˇeno na obr´ azku 2.2. Obsahuje nˇekolik z´aloˇzek. Nejd˚ uleˇzitˇejˇs´ı je pro n´as prvn´ı z´aloˇzka Program, kde nastav´ıme typ c´ılov´eho mikrokontrol´eru (je automaticky pˇredvolen typ, kter´ y jste si zvolili pˇri zakl´ad´an´ı projektu). N´asleduje volba zp˚ usobu programov´an´ı procesoru (v naˇsem pˇr´ıpadˇe je moˇzn´ y pouze ISP m´od). Pro spolehliv´e naprogramov´an´ı mikrokontrol´eru je vhodn´e m´ıt zaˇskrtnuty poloˇzky maz´an´ı pamˇeti pˇred programov´an´ım a verifikace obsahu po naprogramov´an´ı. Pak bude pamˇet’ maz´ana vˇzdy pˇred nov´ ym naplnˇen´ım a po naplnˇen´ı bude zkontrolov´an jej´ı obsah. N´asleduje blok komponent v r´amci programov´e pamˇeti Flash. Pomoc´ı mal´eho tlaˇc´ıtka vedle editaˇcn´ıho ˇr´adku otevˇreme klasick´e souborov´e menu pro naˇcten´ı k´odu, kter´ y chceme do mikrokontrol´eru naprogramovat. Pˇr´ısluˇsn´ y soubor najdeme ve sloˇzce vytvoˇren´eho projektu, m´a jm´eno projektu s pˇr´ıponou hex. Jakmile soubor naˇcteme, m˚ uˇzeme jej stiskem tlaˇc´ıtka Program naprogramovat do programov´e pamˇeti mikrokontrol´eru. Tlaˇc´ıtkem Verify prov´ad´ıme pˇr´ıpadnou kontrolu naprogramovan´eho obsahu pamˇeti. Tlaˇc´ıtko Read je urˇceno pro naˇcten´ı k´odu z programov´e pamˇeti mikrokon-
Mikroprocesorov´a technika
14
trol´eru (pokud je to umoˇznˇeno) do souboru. Pokud je poˇzadov´ana pr´ace s intern´ı pamˇet´ı EEPROM mikrokontrol´eru, lze jej´ı obsah naplnit, verifikovat nebo ˇc´ıst pomoc´ı bloku komponent v r´amci EEPROM. Vˇsechny operace, v´ ysledky a chyby, kter´e nastanou pˇri programov´an´ı mikrokontrol´eru, jsou pˇrehlednˇe zobrazov´any ve spodn´ım r´amu.
Obr´ azek 2.2: Dialogov´e okno pro programov´an´ı mikrokontrol´eru ATmega16 Dalˇs´ı z´aloˇzky v oknˇe rozˇsiˇruj´ı moˇznosti pro konfiguraci vlastn´ıho mikrokontrol´eru i program´atoru. Tˇemito z´aloˇzkami se nebudeme zab´ yvat. Nyn´ı jiˇz v´ıme, jak k´od z´ıskan´ yu ´spˇeˇsn´ ym pˇrekladem zadan´e aplikace naprogramovat do fyzick´eho mikrokontrol´eru, vrat’me se tedy k zadan´emu u ´kolu. LED diody jsou propojeny s portem B. Vˇsechny LED diody jsou n´ızkopˇr´ıkonov´e (cca 2 mA v propustn´em smˇeru), coˇz bezpeˇcnˇe vyhovuje parametr˚ um zat´ıˇzitelnosti mikokontrol´eru ATmega16. Zvolte si, kter´e LED rozsv´ıt´ıte. Ladˇen´ı aplikace lze prov´est v AVR simul´atoru, pˇriˇcemˇz stav nastaven´ı jednotliv´ ych bit˚ u I/O registr˚ u lze sledovat v lev´em simulaˇcn´ım oknˇe v rozbalovac´ım menu I/O ATMEGA16 (PORTA, PORTB, PORTC, PORTD) viz. obr´ azek 2.3. Pro rozˇs´ıˇren´ı vaˇseho program´atorsk´eho umˇen´ı uved’me ˇc´ast zdrojov´eho k´odu v JSA odpov´ıdaj´ıc´ı ˇreˇsen´e aplikaci pro rozsvˇecov´an´ı LED diod, kter´ y obsahuje nov´e uˇziteˇcn´e direktivy pro pˇrekladaˇc (viz. obr´azek 2.4). Direktivy netvoˇr´ı v´ ysledn´ y program, jen urˇcit´ ym zp˚ usobem ˇr´ıd´ı chod pˇrekladu cel´e aplikace do strojov´eho k´odu; vyznaˇcuj´ı se teˇckou na pozici prvn´ıho znaku. Direktivy .nolist a .list vypnou, resp. zapnou, generaci v´ ypisu. Lze je vyuˇz´ıt pro pˇrehlednost, napˇr. pro vyjmut´ı dlouh´ ych v´ ypis˚ u definiˇcn´ıch soubor˚ u. Direktiva .cseg informuje pˇrekladaˇc, ˇze n´asleduj´ıc´ı k´od je urˇcen pro programovou pamˇet’. Pokud je nutn´e ˇc´ast k´odu uloˇzit napˇr. do pamˇeti EEPROM (obvykle nˇejak´e konstanty, nejˇcastˇeji kalibraˇcn´ı) pouˇzijeme pˇred t´ımto k´odem direktivu .eseg, apod. Dalˇs´ı velmi d˚ uleˇzitou direktivou pro pr´aci s re´aln´ ym mikrokontrol´erem je .org, kter´a definuje fyzickou adresu v pamˇeti, od kter´e m´a b´ yt pˇreloˇzen´ y k´od uloˇzen. Nˇekter´e ˇc´asti programov´e pamˇeti maj´ı totiˇz speci´aln´ı v´ yznam napˇr. pro pˇreruˇsen´ı. Pro n´as je v t´eto chv´ıli d˚ uleˇzit´a adresa 0 (0x0000), od kter´e se prov´ad´ı vykon´av´an´ı k´odu (instrukc´ı) po resetu (tak´e po pˇripojen´ı
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
15
Obr´ azek 2.3: Zobrazen´ı obsahu registr˚ u I/O port˚ u A, B, C a D .nolist ; vypnut´ ı v´ ypisu .include <m16def.inc> ; definiˇ cn´ ı soubor pro mikrokontrol´ er ATmega16 .list ; povolen´ ı v´ ypisu .cseg .org 0x0000 rjmp reset
; pˇ reloˇ zen´ y k´ od bude uloˇ zen v prog. pamˇ eti ; n´ asleduj´ ıc´ ı k´ od bude uloˇ zen v pamˇ eti od adr. 0x0000 ; skok na n´ avˇ eˇ st´ ı reset - inicializace po resetu
.org 0x002a ; reset: ; ldi r16,low(RAMEND) ; out spl,r16 ; ldi r16,high(RAMEND); out sph,r16 ; ...
n´ asleduj´ ıc´ ı k´ od bude uloˇ zen v pamˇ eti od adr. 0x002a nastaveni ukazatele z´ asobn´ ıku na konec pameti RAM naˇ cten´ ı niˇ zˇ s´ ıho bytu posledn´ ıho slova adresy ram naplnˇ en´ ı niˇ zˇ s´ ıho bytu ukazatele na z´ asobn´ ık naˇ cten´ ı vyˇ sˇ s´ ıho bytu posledn´ ıho slova adresy ram naplnˇ en´ ı vyˇ sˇ s´ ıho bytu ukazatele na z´ asobn´ ık
Obr´ azek 2.4: Uk´azka pouˇzit´ı direktiv pro ˇr´ızen´ı pˇrekladu zdrojov´eho k´odu nap´ajec´ıho napˇet´ı). V pˇredloˇzen´em v´ ypisu zdrojov´eho k´odu je zde um´ıstˇena instrukce nepodm´ınˇen´eho skoku na adresu 0x002a, kde pokraˇcuje dalˇs´ı bˇeh vykon´avan´eho programu. Tato adresa nen´ı zvolena n´ahodnˇe, ale je prvn´ı adresou v programov´e pamˇeti ATmega16, kter´a nen´ı urˇcen´a pro v´ yˇse zm´ınˇen´e speci´aln´ı u ´ˇcely. U jin´ ych typ˚ u mikrokontrol´er˚ u m˚ uˇze b´ yt jin´a. T´ımto krokem zajist´ıme, ˇze nedojde k ˇz´adn´ ym probl´em˚ um pˇri bˇehu programu a ˇze speci´aln´ı adresy z˚ ustanou voln´e pro dalˇs´ı rozˇsiˇrov´an´ı programu [5]. Posledn´ı 4 instrukce z obr´azku 2.4 slouˇz´ı k definici z´asobn´ıku. Ten bude pouˇzit aˇz v bodˇe 3. Bod 2. Bin´arn´ı ˇc´ıtaˇc vytvoˇrte pomoc´ı nekoneˇcn´e smyˇcky, ve kter´e budete inkrementovat
Mikroprocesorov´a technika
16
obsah 8bitov´e promˇenn´e, tu odes´ılat na v´ ystupn´ı port a zobrazovat pomoc´ı LED diod. Oˇsetˇren´ı pˇreteˇcen´ı maxim´aln´ı hodnoty dan´e 8 bity neuvaˇzujte. Aby byly zmˇeny ˇc´ıtaˇce patrn´e, je nutno do programu zaˇradit tzv. zpoˇzd’ovac´ı smyˇcku, kter´a zajist´ı prodlouˇzen´ı doby trv´an´ı jednoho stavu. Zpoˇzd’ovac´ı smyˇcku vytvoˇrte pomoc´ı cyklu. Bod 3. V r´amci tohoto u ´kolu budete sestavovat a vyuˇz´ıvat sv˚ uj prvn´ı podprogram. Aby vˇse bylo jednoduch´e a srozumiteln´e, bude se jednat o u ´pravu aplikace z pˇredeˇsl´eho bodu. Podprogram bude realizovat zpoˇzd’ovac´ı smyˇcku. Teorie k pr´aci s podprogramy je ponˇekud komplikovan´a na vysvˇetlen´ı ve stroh´em textu. Vysvˇetlen´ı principu a vyuˇzit´ı podprogram˚ u a z´asad pr´ace s nimi provede vyuˇcuj´ıc´ı. Bod 4. Modifikujte aplikaci z pˇredeˇsl´eho bodu. Pro zmˇenu stavu bin´arn´ıho ˇc´ıtaˇce pouˇzijte libovoln´e tlaˇc´ıtko na v´ yvojov´e desce. Pˇri stisku tlaˇc´ıtka vznikaj´ı mechanick´e z´akmity pˇri pˇrechodu kontaktu ze sepnut´e do rozepnut´e polohy a naopak (viz. poˇc´ıtaˇcov´e cviˇcen´ı pˇredmˇetu BICT). To se z hlediska elektrick´eho sign´alu a jeho vyhodnocov´an´ı digit´aln´ım vstupem m˚ uˇze projevit sledem impulz˚ u, kter´ y m˚ uˇze v neoˇsetˇren´e podobˇe degradovat spr´avnou funkci aplikace. Oˇsetˇren´ı t´eto nepˇr´ıjemn´e skuteˇcnosti m˚ uˇze b´ yt provedeno hardwarovˇe pomoc´ı vhodn´eho zapojen´ı tlaˇc´ıtka v RC ˇcl´anku nebo softwarovˇe. C´ılem t´eto u ´lohy je sezn´amit se pr´avˇe s programov´ ym oˇsetˇren´ım zakmit´av´an´ı tlaˇc´ıtek. Cesta je pomˇernˇe jednoduch´a. Staˇc´ı prov´adˇet opakovan´e ˇcten´ı stavu na vstupu, na nˇejˇz je pˇripojeno tlaˇc´ıtko (nejˇcastˇeji s pull-up rezistorem) a kontrolovat, aby stav sepnut´ı byl pˇr´ıtomen trvale po urˇcitou dobu (ˇr´adu des´ıtek ms). Minim´aln´ı dobu intervalu vol´ıme na z´akladˇe experimentu, protoˇze se na n´ı bude pod´ılet nejen lidsk´ y faktor (program´atoˇri jej hant´ yrkou naz´ yvaj´ı Alzheimer˚ uv syndrom vyt’uk´avaˇce SMSek ), ale i mechanick´e vlastnosti tlaˇc´ıtka. Pˇri sestavov´an´ı programu postupujte tak, ˇze test stisknut´ı tlaˇc´ıtka prov´adˇejte kaˇzdou 1 ms. Pak pomoc´ı experiment´aln´ıho ovˇeˇren´ı na v´ yvojov´e desce urˇcete minim´aln´ı potˇrebn´ y interval pro akceptaci stisknut´eho tlaˇc´ıtka. Nesm´ı b´ yt pˇr´ıliˇs kr´atk´ y, kv˚ uli z´akmit˚ um, ani pˇr´ıliˇs dlouh´ y, kv˚ uli schopnosti lidsk´e.
2.4
Shrnut´ı
Laboratorn´ı u ´loha umoˇzn ˇuje student˚ um osvojen´ı si pouˇzit´ı vstupnˇe/v´ ystupn´ıch port˚ u pro obsluhu jednoduch´ ych perifern´ıch zaˇr´ızen´ı (LED dioda, tlaˇc´ıtko). Rovnˇeˇz pˇredstavuje tvorbu a programov´an´ı aplikac´ı pro re´aln´e mikrokontrol´ery, vˇcetnˇe pouˇzit´ı podprogram˚ u pro efektivnˇejˇs´ı z´apis zdrojov´eho k´odu.
2.5
Kontroln´ı ot´ azky
Ot´ azka 2.1 Co znamen´a zkratka ISP a jak´e v´yhody tato metoda pˇrin´ aˇs´ı? Ot´ azka 2.2 Jak´e zn´ate direktivy pˇrekladaˇce a k ˇcemu konkr´etnˇe slouˇz´ı? Ot´ azka 2.3 Nakreslete v´yvojov´y diagram aplikace z bodu 4.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
3
17
Obsluha pˇ reruˇ sen´ı
Test pˇ redchoz´ıch znalost´ı 1. Jak´e jsou rozd´ıly mezi podprogramem a obsluhou pˇreruˇsen´ı? 2. Jmenujte dvˇe nutn´e podm´ınky, kter´e mus´ı b´ yt splnˇeny k zah´ajen´ı obsluhy libovoln´eho pˇreruˇsen´ı? 3. Na ˇcem z´avis´ı rychlost pˇreteˇcen´ı intern´ıho ˇc´ıtaˇce/ˇcasovaˇce?
C´ıle laboratorn´ı u ´ lohy C´ılem laboratorn´ı u ´lohy je osvojen´ı si pr´ace s pˇreruˇsen´ım mikrokontrol´eru v jazyce symbolick´ ych adres. Konkr´etnˇe bude vyuˇzito extern´ı pˇreruˇsen´ı od tlaˇc´ıtka a pˇreruˇsen´ı od intern´ıho ˇc´ıtaˇce/ˇcasovaˇce.
3.1
Zad´ an´ı
1. Seznamte se s hled´an´ım informac´ı v anglick´em datasheetu k mikrokontrol´eru ATmega16. Vyhledejte potˇrebn´e informace k nastaven´ı a povolen´ı extern´ıho pˇreruˇsen´ı od tlaˇc´ıtka. 2. V JSA naprogramujte aplikaci 8bitov´eho ˇc´ıtaˇce ˇr´ızen´eho extern´ım pˇreruˇsen´ım. 3. V datasheetu vyhledejte informace pro nastaven´ı intern´ıho ˇc´ıtaˇce/ˇcasovaˇce 0. 4. V JSA naprogramujte aplikaci 8bitov´eho ˇc´ıtaˇce ˇr´ızen´eho pˇreruˇsen´ım od 8bitov´eho ˇc´ıtaˇce/ˇcasovaˇce. 5. Bonus: V JSA naprogramujte aplikaci zdruˇzuj´ıc´ı jiˇz vytvoˇren´e programu. Bin´arn´ı ˇc´ıtaˇc z pˇredchoz´ıho bodu doplˇ nte dvojici extern´ıch pˇreruˇsen´ı. Jedn´ım tlaˇc´ıtkem resetujte stav ˇc´ıtaˇce, druh´ ym mˇen ˇte smˇer ˇc´ıt´an´ı.
3.2
Teoretick´ e poznatky
´ Uvodn´ ı ˇc´ast programov´e pamˇeti je u mikrokontrol´er˚ u vyhrazeno pro tzv. vektory pˇreruˇsen´ı. Tyto vektory popisuj´ı ˇcinnost syst´emu v pˇr´ıpadˇe akutn´ıch ud´alost´ı. Pokud dojde u mikroprocesoru k ud´alosti, kter´a vyvol´av´a pˇreruˇsen´ı, mikrokontrol´er se ”pod´ıv´a” na konkr´etn´ı m´ısto v programov´e pamˇeti (pr´avˇe do oblasti vektor˚ u pˇreruˇsen´ı) a hled´a zde program obsluhy vznikl´e situace. Z pochopiteln´ ych d˚ uvod˚ u se do t´eto oblasti nevkl´ad´a cel´ y program obsluhy pˇreruˇsen´ı, ale jen skok na zaˇc´atek tohoto programu. Poˇcet vektor˚ u pˇreruˇsen´ı se liˇs´ı pro jednotliv´e procesory (hlavnˇe podle jejich hardwarov´e vybavenosti). Pro n´ami pouˇz´ıvan´ y mikrokontrol´er ATmega16 firmy Atmel lze soupis vˇsech vektor˚ u pˇreruˇsen´ı nal´est v tabulce 3.1.
Mikroprocesorov´a technika
18
Tabulka 3.1: Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 ˇ Adresa Zdroj pˇreruˇsen´ı Popis pˇreruˇsen´ı C. 1 0x0000 RESET Extern´ı reset, pˇripojen´ı nap´ajen´ı 2 0x0002 INT0 Extern´ı poˇzadavek na pˇreruˇsen´ı 0 3 0x0004 INT1 Extern´ı poˇzadavek na pˇreruˇsen´ı 1 ˇ ıtaˇc/ˇcasovaˇc 2 - shoda komparace 4 0x0006 TIMER2 COMP C´ ˇ ıtaˇc/ˇcasovaˇc 2 - pˇreteˇcen´ı 5 0x0008 TIMER2 OVF C´ ˇ ıtaˇc/ˇcasovaˇc 1 - zachycen´ı 6 0x000A TIMER1 CAPT C´ ˇ ıtaˇc/ˇcasovaˇc 1 - shoda s kompar´atorem A 7 0x000C TIMER1 COMPA C´ ˇ ıtaˇc/ˇcasovaˇc 1 - shoda s kompar´atorem B 8 0x000E TIMER1 COMPB C´ ˇ ıtaˇc/ˇcasovaˇc 1 - pˇreteˇcen´ı 9 0x0010 TIMER1 OVF C´ ˇ ıtaˇc/ˇcasovaˇc 0 - pˇreteˇcen´ı C´ 10 0x0012 TIMER0 OVF 11 0x0014 SPI, STC Dokonˇcen´ı s´eriov´eho pˇrenosu SPI 12 0x0016 USART, RXC USART - kompletn´ı pˇr´ıjem dat 13 0x0018 USART, UDRE USART - pr´azdn´ y datov´ y registr 14 0x001A USART, TXC USART - kompletn´ı vysl´an´ı dat 15 0x001C ADC ADC - pˇrevod dokonˇcen 16 0x001E EE RDY EEPROM - komunikace pˇripravena 17 0x0020 ANA COMP Zmˇena v´ ystupu analogov´eho kompar´atoru 18 0x0022 TWI Ud´alost na I2C sbˇernici 19 0x0024 INT2 Extern´ı poˇzadavek na pˇreruˇsen´ı 2 ˇ ıtaˇc/ˇcasovaˇc 0 - shoda komparace 20 0x0026 TIMER0 COMP C´ 21 0x0028 SPM RDY Uloˇzen´ı do programov´e pamˇeti pˇripraveno Pˇreruˇsen´ı, kter´e obsahuj´ı vˇsechny syst´emy je tzv. reset. K nˇemu dojde po pˇripojen´ı nap´ajec´ıho napˇet´ı nebo po zresetov´an´ı syst´emu. Jelikoˇz po zapnut´ı syst´emu zaˇcne mikroprocesor vykon´avat instrukce od zaˇc´atku programov´e pamˇeti, je vektor pˇreruˇsen´ı pro reset um´ıstˇen pr´avˇe na adrese 0x0000. Skoky na pˇr´ısluˇsn´e obsluˇzn´e programu lze realizovat napˇr´ıklad instrukc´ı rjmp, jak naznaˇcuje obr´ azek 3.1. Veˇsker´a pˇreruˇsen´ı je nutn´e pˇredem aktivovat (povolit) v odpov´ıdaj´ıc´ıch ˇr´ıdic´ıch registrech a nav´ıc povolit glob´aln´ı pˇreruˇsen´ı ve stavov´em registru SREG (Status Register), coˇz lze pˇr´ımo prov´est instrukc´ı sei. Pˇri aktivaci pˇreruˇsen´ı jsou po dobu vykon´an´ı obsluhy pˇreruˇsen´ı ostatn´ı pˇreruˇsen´ı obecnˇe zak´az´ana. Obsluhu pˇreruˇsen´ı je nutn´e ukonˇcit pˇr´ıkazem reti, kter´ y s´am opˇet povol´ı ostatn´ı pˇreruˇsen´ı (jedn´a se o obdobu instrukce ret u n´avratu z podprogramu). Stejnˇe jako u vol´an´ı podprogramu je i u obsluhy pˇreruˇsen´ı nutn´e pˇredem uloˇzit n´avratovou adresu. Opˇet se vyuˇzije ˇc´ast pamˇeti RAM, kter´a pˇredstavuje z´asobn´ık, ˇ tj. na zaˇc´atku aplikace je nutn´e jej definovat! Razen´ ı jednotliv´ ych vektor˚ u pˇreruˇsen´ı v programov´e pamˇeti z´aroveˇ n ud´av´a jejich prioritu (nejniˇzˇs´ı adresa (reset) odpov´ıd´a nejvyˇsˇs´ı prioritˇe, atd.).
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
.include<m16def.inc> .org 0x0000 rjmp reset .org 0x0002 rjmp citac .org 0x002a reset: ... ... sei loop: rjmp loop citac: ... reti
; ; ; ;
19
adresa pˇ reruˇ sen´ ı pˇ ri reset relativn´ ı skok na n´ avˇ eˇ st´ ı reset adresa extern´ ıho pˇ reruˇ sen´ ı INT0 relativn´ ı skok na n´ avˇ eˇ st´ ı citac
; uloˇ z n´ asleduj´ ıc´ ı k´ od od adresy 0x002a ; ; ; ;
definice z´ asobn´ ıku naplnˇ en´ ı I/O registr˚ u glob´ aln´ ı povolen´ ı pˇ reruˇ sen´ ı nekoneˇ cn´ a smyˇ cka
; program pro obsluhu extern´ ıho pˇ reruˇ sen´ ı ; ukonˇ cen´ ı obsluhy pˇ reruˇ sen´ ı
Obr´ azek 3.1: Uk´azka z´apisu pˇreruˇsen´ı v jazyce symbolick´ ych adres 3.2.1
Extern´ı pˇ reruˇ sen´ı
Extern´ı pˇreruˇsen´ı jsou oznaˇcov´ana jako INT0, INT1 a INT2 a odpov´ıdaj´ı trojici konkr´etn´ım pin˚ um procesoru. Zaj´ımavost´ı je, ˇze pˇreruˇsen´ı funguje i kdyˇz jsou samotn´e piny nastaveny jako v´ ystupn´ı. Kaˇzd´e pˇreruˇsen´ı m´a odpov´ıdaj´ıc´ı maskovac´ı bit, kter´ y umoˇzn ˇuje povolen´ı ˇci zak´az´an´ı dan´eho pˇreruˇsen´ı. Pro vˇsechny tˇri extern´ı pˇreruˇsen´ı se tyto maskovac´ı bity nach´az´ı v registru GICR (General Interrupt Control Register). Bit INT1 povoluje pˇreruˇsen´ı od zdroje INT1, apod. Pro povolen´ı dan´eho pˇreruˇsen´ı je tedy tˇreba nastavit odpov´ıdaj´ıc´ı bit (na hodnotu 1). D´ale je nutn´e nastavit za jak´ ych podm´ınek se bude extern´ı pˇreruˇsen´ı generovat. To lze nastavit pomoc´ı bit˚ u ISCn1 a ISCn0 v registru MCUCR (MCU Control Register). Chceme-li napˇr. generovat extern´ı pˇreruˇsen´ı INT1 s kaˇzdou n´astupnou hranou, je nutn´e nastavit bity ISC11 a ISC10 v tomto registru. V´ yznam jednotliv´ ych nastaven´ı je zn´azornˇen v tabulce 3.2. Tabulka 3.2: Zp˚ usob spouˇstˇen´ı extern´ıch pˇreruˇsen´ı INTn (MCUCR) ISCn1:ISCn0 0b00 0b01 0b10 0b11
3.2.2
Popis N´ızk´a u ´roveˇ n (log. 0) na pinu INTn generuje poˇzadavek Jak´akoliv zmˇena logick´e u ´rovnˇe na pinu INTn generuje poˇzadavek Sestupn´a hrana na pinu INTn generuje poˇzadavek Vzestupn´a hrana na pinu INTn generuje poˇzadavek
Pˇ reruˇ sen´ı od ˇ c´ıtaˇ ce/ˇ casovaˇ ce
Mikrokontrol´er ATmega16 nab´ız´ı pomˇernˇe ˇsirokou ˇsk´alu nastaven´ı a m´od˚ u dostupn´ ych pro ˇc´ıtaˇce/ˇcasovaˇce integrovan´e na ˇcipu. V t´eto laboratorn´ı u ´loze se budeme zab´ yvat
Mikroprocesorov´a technika
20
pouze z´akladn´ım ˇc´ıtaˇcem/ˇcasovaˇcem 0 (jedn´a se o 8bitov´ y ˇc´ıtaˇc/ˇcasovaˇc) a pouze jeho z´akladn´ım pouˇzit´ım. ˇ ıtaˇc/ˇcasovaˇc m˚ C´ uˇzeme pouˇz´ıt bud’ ve spojen´ı s extern´ım hodinov´ ym sign´alem, pˇripojen´ ym na pin oznaˇcen´ y T0 (PB0), nebo s hodinov´ ym sign´alem mikrokontrol´eru. Pro vˇetˇs´ı variabilitu lze nastavit pˇreddˇeliˇcku pro hodinov´ y sign´al mikrokontrol´eru a t´ım zpomalit ˇc´ıt´an´ı. Hodnotu pˇreddˇeliˇcky i pˇrep´ın´an´ı zdroje hodin lze nastavit v registru TCCR0 (Timer/Counter Control Register), jehoˇz sloˇzen´ı lze nal´ezt v [5]. Pro n´as jsou zajimav´e tˇri bity pro nastaven´ı pˇreddˇeliˇcky (viz. tabulka 3.3). Tabulka 3.3: Nastaven´ı pˇreddˇeliˇcky ˇc´ıtaˇce/ˇcasovaˇce 0 (TCCR0) CS02:CS00 0b000 0b001 0b010 0b011 0b100 0b101 0b110 0b111
Popis ˇ 0 nepracuje Hodinov´ y sign´al odpojen. C/c fclk fclk /8 fclk /64 fclk /256 fclk /1 024 Extern´ı zdroj ˇr´ıdic´ıho sign´alu, sestupn´a hrana Extern´ı zdroj ˇr´ıdic´ıho sign´alu, n´abˇeˇzn´a hrana
S tˇemito znalostmi m˚ uˇzeme nechat bˇeˇzet ˇc´ıtaˇc a pomoc´ı pˇreruˇsen´ı, kter´e se automaticky generuje pˇri pˇreteˇcen´ı tohoto ˇc´ıtaˇce, odmˇeˇrovat dan´ y ˇcas. V samotn´em programu pak funguje toto pˇreruˇsen´ı jako nejmenˇs´ı ˇcasov´a jednotka a programovˇe lze na nˇej nav´azat dalˇs´ı ˇc´ıtaˇc (napˇr. zvol´ıme pˇreddˇeliˇcku tak, aby cel´ y cyklus ˇc´ıtaˇce trval 10ms a programem pak oˇsetˇr´ıme poˇc´ıt´an´ı do 100 a dos´ahnout tak doby 1s). Stejnˇe jako extern´ı pˇreruˇsen´ı, m´a i pˇreruˇsen´ı od ˇc´ıtaˇce/ˇcasovaˇce vlastn´ı registr maskov´an´ı TIMSK (Timer/Counter Interrupt Mask Register). Pro n´as je zaj´ımav´ y pouze bit TOIE0, kter´ y povoluje pˇreruˇsen´ı od ˇc´ıtaˇce/ˇcasovaˇce 0.
3.3
Pokyny k zad´ an´ı
Bod 1. V datasheetu k mikrokontrol´eru ATmega16 [5] vyhledejte kapitolu t´ ykaj´ıc´ı se pˇreruˇsen´ı (anglicky: Interrupts), pˇr´ıpadnˇe extern´ıho pˇreruˇsen´ı (External Interrupts). K nastaven´ı extern´ıho pˇreruˇsen´ı je nutn´e naplnit dva ˇr´ıdic´ı registry, konkr´etnˇe GICR a MCUCR. V datasheetu si vyhledejte v´ yznam jednotliv´ ych bit˚ u tˇechto registr˚ u a pˇripravte si bitov´a slova, kter´ ymi napln´ıte tyto registry. Vyuˇcuj´ıc´ı v´am zad´a ud´alost, kter´a bude pˇreruˇsen´ı spouˇstˇet (n´abˇeˇzn´a hrana, sestupn´a, . . .). Vyuˇzijte extern´ı pˇreruˇsen´ı INT0 generovan´e tlaˇc´ıtkem na pinu PD2. Bod 2. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt a v JSA naprogramujte aplikaci 8bitov´eho bin´arn´ıho ˇc´ıtaˇce, jehoˇz stav zobrazujte pomoc´ı LED diod. Zmˇenu stavu ˇc´ıtaˇce realizujte pomoc´ı tlaˇc´ıtka PD2, kter´e bude spouˇstˇet extern´ı pˇreruˇsen´ı INT0. Vyuˇzijte nastaven´ı registr˚ u GICR a MCUCR z pˇredeˇsl´eho bodu. Jedn´a se o I/O registry,
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
21
proto vyuˇzijte kombinaci instrukc´ı ldi a out. Nezapomeˇ nte definovat z´asobn´ık a povolit glob´aln´ı pˇreruˇsen´ı. Stisk tlaˇc´ıtka oˇsetˇrete kr´atk´ ym zpoˇzdˇen´ım. Bod 3. Ze znalosti frekvence hodinov´eho sign´alu fclk (u STK500 je vybr´an intern´ı oscil´ator s frekvenc´ı fcpu = 1M Hz) vypoˇctˇete dobu za kterou dojde k pˇreteˇcen´ı 8bitov´eho ˇc´ıtaˇce/ˇcasovaˇce. V´ ypoˇcet proved’te pro vˇsechny hodnoty pˇreddˇeliˇcky. Podobnˇe jako v bodˇe 1, vyhledejte v datasheetu k mikrokontrol´eru ATmega16 [5] kapitolu zab´ yvaj´ıc´ı se 8bitov´ ym ˇc´ıtaˇcem/ˇcasovaˇcem 0 (anglicky: 8-bit Timer/Counter0). K nastaven´ı ˇc´ıtaˇce/ˇcasovaˇce 0 je opˇet nutn´e naplnit dva ˇr´ıdic´ı registry, konkr´etnˇe TCCR0 a TIMSK. V datasheetu si vyhledejte v´ yznam jednotliv´ ych bit˚ u tˇechto registr˚ u a pˇripravte si bitov´a slova, kter´ ymi napln´ıte tyto registry. Hodnotu pˇreddˇeliˇcky si zvolte. Bod 4. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt a v JSA naprogramujte aplikaci 8bitov´eho bin´arn´ıho ˇc´ıtaˇce, jehoˇz stav zobrazujte pomoc´ı LED diod. Zmˇenu stavu ˇc´ıtaˇce realizujte pomoc´ı pˇreruˇsen´ı od pˇreteˇcen´ı ˇc´ıtaˇce/ˇcasovaˇce 0. Vyuˇzijte nastaven´ı registr˚ u TCCR0 a TIMSK z pˇredeˇsl´eho bodu. Bonus. V JSA vytvoˇrte aplikaci automatick´eho bin´arn´ıho ˇc´ıtaˇce. Vyuˇzijete zdrojov´e k´ody z bodu 2 a 4. Pˇreruˇsen´ı od ˇc´ıtaˇce/ˇcasovaˇce vyuˇzijte ke zmˇenˇe stavu bin´arn´ıho ˇc´ıtaˇce. Extern´ım pˇreruˇsen´ım INT0 resetujte stav ˇc´ıtaˇce a pˇreruˇsen´ım INT1 (PD3) mˇen ˇte smˇer ˇc´ıt´an´ı. Je tedy nutn´e nastavit a povolit generov´an´ı extern´ıho pˇreruˇsen´ı tak´e od tlaˇc´ıtka z pinu PD3.
3.4
Shrnut´ı
Laboratorn´ı u ´loha umoˇzn ˇuje student˚ um proniknout do problematiky obsluhy pˇreruˇsen´ı mikrokontrol´er˚ u. Konkr´etnˇe byly pops´any vektory pˇreruˇsen´ı a vyuˇzit´ı extern´ıho pˇreruˇsen´ı od tlaˇc´ıtka. Druh´ y typ pˇreruˇsen´ı byl generov´an intern´ım ˇc´ıtaˇcem pˇri jeho pˇreteˇcen´ı. Studenti mˇeli moˇznost vyzkouˇset si programov´an´ı a otestov´an´ı aplikac´ı v jazyce symbolick´ ych adres.
3.5
Kontroln´ı ot´ azky
Ot´ azka 3.1 Kde a jak´ym zp˚ usobem se ukl´ adaj´ı n´ avratov´e adresy pˇri vol´ an´ı obsluhy pˇreruˇsen´ı? Ot´ azka 3.2 Jak ˇcasto bude doch´azek k pˇreteˇcen´ı 16bitov´eho ˇc´ıtaˇce, je-li frekvence hodinov´eho sign´alu 16 MHz sn´ıˇzena pˇreddˇeliˇckou o hodnotˇe 8? Ot´ azka 3.3 Nakreslete v´yvojov´y diagram aplikace z bodu 4.
Mikroprocesorov´a technika
4
22
Pulznˇ eˇ s´ıˇ rkov´ a modulace PWM
Test pˇ redchoz´ıch znalost´ı 1. K jak´ ym jednoduch´ ym aplikac´ım lze vyuˇz´ıt funkce ˇc´ıt´an´ı, ˇcasov´an´ı a komparace intern´ıho ˇc´ıtaˇce/ˇcasovaˇce? 2. V jak´em pamˇet’ov´em segmentu a od jak´e adresy se nach´az´ı vˇsechny ˇr´ıdic´ı (I/O) registry mikrokontrol´eru ATmega16? 3. Jak´ y je rozd´ıl mezi programov´ ym ˇc´ıtaˇcem (PC) a z´asobn´ıkem?
C´ıle laboratorn´ı u ´ lohy C´ılem laboratorn´ı u ´lohy je procviˇcit si nastavov´an´ı ˇr´ıdic´ıch I/O registr˚ u a hled´an´ı informac´ı v anglick´e dokumentaci. C´ıle budou vyuˇzity v aplikaci generov´an´ı PWM sign´alu pomoc´ı intern´ıho 8bitov´eho ˇc´ıtaˇce/ˇcasovaˇce.
4.1
Zad´ an´ı
1. Procviˇcte si hled´an´ım informac´ı v anglick´em datasheetu k mikrokontrol´eru ATmega16. Vyhledejte potˇrebn´e informace k nastaven´ı ˇc´ıtaˇce/ˇcasovaˇce 0 pro generov´an´ı PWM sign´alu. 2. V JSA naprogramujte aplikaci generuj´ıc´ı PWM sign´al se stˇr´ıdou 1 : 2. 3. V JSA naprogramujte aplikaci generuj´ıc´ı PWM sign´al s promˇennou stˇr´ıdou. Vizu´alnˇe ovˇeˇrte spr´avnou funkci aplikace pomoc´ı LED diody. 4. Bonus: Modifikujte aplikaci z pˇredeˇsl´eho bodu, aby se jas LED diody pozvolna sniˇzoval i zvyˇsoval.
4.2
Teoretick´ e poznatky
Pulznˇe ˇs´ıˇrkov´a modulace PWM (Pulse Width Modulation) pˇredstavuje zp˚ usob modulov´an´ı pˇren´aˇsen´ ych dat. Modulovan´ y sign´al m´a konstantn´ı periodu, ale promˇennou stˇr´ıdu obd´eln´ıkov´eho sign´alu. Stˇr´ıda (anglicky: duty cycle) ud´av´a pomˇer mezi dobou trv´an´ı vysok´e a n´ızk´e u ´rovnˇe. Tento pomˇer b´ yv´a vyj´adˇren v absolutn´ı (napˇr. 1 : 3), nebo procentu´aln´ı m´ıˇre (napˇr. 25%). Uk´azka vstupn´ıho a modulovan´eho sign´alu je zobrazena na obr´ azku 4.1. Jednoduch´ y modul´ator lze realizovat pomoc´ı kompar´atoru, kdy na jeden vstup pˇrivedeme datov´ y sign´al, a na druh´ y sign´al nosn´e vlny. Ten je tvoˇren pilov´ ym pr˚ ubˇehem. Kompar´ator pak pˇrekl´ap´ı v´ ystupn´ı u ´roveˇ n v z´avislosti na pomˇeru obou vstupn´ıch sign´al˚ u. Ke generov´an´ı sign´alu lze velmi snadno vyuˇz´ıt intern´ı ˇc´ıtaˇc/ˇcasovaˇc mikrokontrol´eru, nastav´ıme-li ho do funkce komparace. V tomto m´odu totiˇz ˇc´ıtaˇc/ˇcasovaˇc porovn´av´a hodnotu z datov´eho registru TCNT0 (Timer/Counter Register) s hodnotou uloˇzenou v kom-
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
23
Obr´ azek 4.1: Princip tvorby PWM sign´alu paraˇcn´ım registru OCR0 (Output Compare Register). V pˇr´ıpadˇe rovnosti obou hodnot je moˇzn´e mˇenit u ´roveˇ n v´ ystupn´ıho sign´alu. Mikrokontrol´er ATmega16 umoˇzn ˇuje pouˇzit´ı nˇekolika m´od˚ u generov´an´ı sign´alu. V t´eto laboratorn´ ı u ´lozeMode, se zamˇ eˇr´ıme Diagram pouze na m´od s oznaˇcen´ım Fast PWM. Pˇri tomto Figure 32. Fast PWM Timing nastaven´ı ˇc´ıtaˇc naˇc´ıt´a od hodnoty 0x00 do 0xff, pot´e nuluje sv˚ uj stav a pokraˇcuje v opakovan´em naˇc´ıt´an´ı. Neinvertuj´ıc´ı podoba v´ ystupn´ıho sign´alu je nulov´ ana pˇri shodˇe mezi OCRn Interrupt Flag Set ˇ TCNT0 a OCR0 a je nastavena pˇri pˇreteˇcen´ı ˇc´ıtaˇce TCNT0. Casov´ y diagram popsan´e funkce je zn´azornˇen na obr´azku 4.2. Je zˇrejm´e, ˇze perioda takto generovan´eho sign´alu z˚ ust´av´a nemˇenn´a, a ˇze z´avis´ı pouze na frekvenci hodinov´eho sign´alu mikrokontrol´ eru a na hodnotˇe OCRn Update and TOVn Interrupt Flag Set pˇreddˇeliˇcky.
TCNTn
OCn
(COMn1:0 = 2)
OCn
(COMn1:0 = 3)
Period
1
2
3
4
5
6
7
ˇ Overflow Obr´ azek 4.2: Casov´ y diagram sign´ alu (obr´ zek pˇrevzat z [5])MAX. If The Timer/Counter Flaggenerov´ (TOV0)an´ isı PWM set each time the acounter reaches the interrupt is enabled, the interrupt handler routine can be used for updating the compare value. Aplikaci generov´an´ı sign´alu lze obohatit celkem dvˇema odliˇsn´ ymi zdroji pˇreruˇsen´ı. Poˇzadavek na pˇreruˇ sen´ ı zp˚ usobuje reteˇcen´ı ˇc´ıtaˇ ce/ˇ casovaˇ ce a tak´e ud´ alost In fast PWM mode, the compare unitjednak allowspˇ generation of PWM waveforms on the shody OC0 mezi datov´ y m a komparaˇ c n´ ım registrem ˇ c ´ ıtaˇ c e. Obˇ e tyto pˇ r eruˇ s en´ ı se povoluj´ ı v konpin. Setting the COM01:0 bits to 2 will produce a non-inverted PWM and an inverted troln´ ım registru TIMSK (Timer/Counter MasktoRegister). PWM output can be generated by setting Interrupt the COM01:0 3 (See Table 40 on page 84). The actual OC0 value will only be visible on the port pin if the data direction for the port pin is set as output. The PWM waveform is generated by setting (or clearing) the OC0 Register at the compare match between OCR0 and TCNT0, and clearing (or setting) the OC0 Register at the timer clock cycle the counter is cleared (changes from MAX to BOTTOM).
Mikroprocesorov´a technika
4.3
24
Pokyny k zad´ an´ı
Bod 1. V datasheetu k mikrokontrol´eru ATmega16 [5] vyhledejte kapitolu zab´ yvaj´ıc´ı se 8bitov´ ym ˇc´ıtaˇcem/ˇcasovaˇcem 0 (anglicky: 8-bit Timer/Counter0), konkr´etnˇe ˇc´asti zab´ yvaj´ıc´ı se generov´an´ım PWM sign´alu pomoc´ı komparace. K nastaven´ı ˇc´ıtaˇce/ˇcasovaˇce 0 je nutn´e naplnit ˇr´ıdic´ı registr TCCR0 (Timer/Counter Control Register). V datasheetu si vyhledejte v´ yznam jednotliv´ ych bit˚ u tohoto registru a pˇripravte si bitov´e slovo, kter´ ym tento registr napln´ıte. Pro generov´an´ı PWM sign´alu je nutn´e nastavit Fast m´od PWM, neinvertovanou formu v´ ystupn´ıho sign´alu a hodnotu pˇreddˇeliˇcky. Tuto hodnotu si sami zvolte. Bod 2. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt a v JSA naprogramujte aplikaci generuj´ıc´ı PWM sign´al se stˇr´ıdou 1 : 2. Definujte port B jako v´ ystupn´ı (na pinu PB3 je pomoc´ı ˇc´ıtaˇce/ˇcasovaˇce 0 generov´an PWM sign´al). Vyuˇzijte nastaven´ı registru TCCR0 z pˇredeˇsl´eho bodu. Stˇr´ıda generovan´eho sign´alu je adekv´atn´ı hodnotˇe, kterou uloˇz´ıte do komparaˇcn´ıho registru OCR0 (Output Compare Register). Tato u ´loha nevyˇzaduje generov´an´ı pˇreruˇsen´ı. Vstupnˇe/v´ ystupn´ı registry lze naplnit s vyuˇzit´ım posloupnosti instrukc´ı ldi a out. Zaps´an´ı 8bitov´eho slova do registru zp˚ usobem ldi r16,0b00011010 vˇsak m˚ uˇze b´ yt nepˇrehledn´e a ˇcasto je tak´e zdrojem program´atorsk´ ych chyb. Zn´amkou zkuˇsen´ ych program´ator˚ u je vyuˇzit´ı pozic jednotliv´ ych bit˚ u v I/O registru, bitov´eho posuvu <<, pˇr´ıp. logick´eho souˇctu |. Jednotliv´e bitov´e pozice (0, . . . , 7) jsou oznaˇcov´any konstantami, kter´e lze nal´ezt v datasheetu u popisu kaˇzd´eho registru. Jsou-li napˇr. tˇri nejniˇzˇs´ı bity registru TCCR0 pojmenov´any CS02, CS01, CS00 a chceme-li uloˇzit do tohoto registru hodnotu 0b00000110, je moˇzn´e naprogramovat tuto operaci n´asleduj´ıc´ım zp˚ usobem. ldi r16,(1<
Zaps´an´ı hodnot do vˇsech I/O registr˚ u staˇc´ı prov´est jen jednou. Nezapomˇen ˇte v´aˇs program ukonˇcit nekoneˇcnou smyˇckou, kter´a tedy nebude obsahovat ˇz´adn´e dalˇs´ı instrukce. Pomoc´ı hodnoty v´ami zvolen´e pˇreddˇeliˇcky N a se znalost´ı frekvence hodinov´eho sign´alu fclk vypoˇctˇete periodu generovan´eho sign´alu. V´ ypoˇcet ovˇeˇrte odeˇcten´ım hodnoty na osciloskopu (jehoˇz sonda je pochopitelnˇe pˇripojena na pin PB3). Rovnˇeˇz ovˇeˇrte poˇzadovanou stˇr´ıdu sign´alu. Pˇri psan´ı k´odu se vyvarujte bezmyˇslenkovit´eho opisov´an´ı instrukc´ı, ˇci ˇc´ast´ı k´odu z pˇredeˇsl´ ych laboratorn´ıch cviˇcen´ı. Snaˇzte se o optimalizaci vaˇseho programu z hlediska m´ısta v programov´e pamˇeti. Bod 3. V JSA vytvoˇrte aplikaci, kter´a bude line´arnˇe mˇenit stˇr´ıdu generovan´eho PWM sign´alu. Vyuˇzijte zdrojov´eho k´odu z pˇredeˇsl´eho bodu. Stˇr´ıdu, tj. komparaˇcn´ı hodnotu v registru OCR0 inkrementujte v obsluze pˇreruˇsen´ı, kter´a se spouˇst´ı pr´avˇe pˇri komparaci. Z tabulky 3.1 zjistˇete vektor tohoto pˇreruˇsen´ı. Nezapomeˇ nte definovat z´asobn´ık, povolit pˇreruˇsen´ı pro komparaci a glob´aln´ı pˇreruˇsen´ı. Zvol´ıte-li hodnotu pˇreddˇeliˇcky 8 nebo 64 budete schopni pozorovat vliv zmˇeny stˇr´ıdy na v´ ystupn´ı LED diodˇe.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
25
Bonus. Modifikujte zdrojov´ y k´od z pˇredeˇsl´e u ´lohy tak, aby se jas LED diody na pinu PB3 pozvolna sniˇzoval a n´aslednˇe zase pozvolna zvyˇsoval. Z obr´ azku 4.2 je moˇzn´e nahl´ednout, jak´ ym zp˚ usobem toho lze doc´ılit.
4.4
Shrnut´ı
Laboratorn´ı u ´loha umoˇzn ˇuje student˚ um hloubˇeji proniknout do problematiky obsluhy pˇreruˇsen´ı mikrokontrol´er˚ u. Konkr´etnˇe bylo generov´ano pˇreruˇsen´ı od intern´ıho ˇc´ıtaˇce pˇri komparaci. T´eto funkce lze snadno vyuˇz´ıt pˇri generov´an´ı v´ ystupn´ıho sign´alu s promˇennou stˇr´ıdou.
4.5
Kontroln´ı ot´ azky
Ot´ azka 4.1 Jakou hodnotu bude obsahovat komparaˇcn´ı registr, m´ a-li b´yt generov´ an obd´eln´ıkov´y sign´al se stˇr´ıdou 1 : 5? Ot´ azka 4.2 Jak´e slovo bude obsahovat ˇr´ıdic´ı registr TCCR0, m´ a-li b´yt ˇc´ıtaˇc/ˇcasovaˇc vyuˇzit ke komparaci hodnot v norm´aln´ım m´ odu (non-PWM), pˇri komparaci nulovat v´ystupn´ı u ´roveˇ n a inkrementace ˇc´ıtaˇce bude zpomalena 8×? Ot´ azka 4.3 Jakou posloupnost´ı instrukc´ı napln´ıte registr TCCR0 ˇr´ıdic´ım slovem z pˇredeˇsl´e ot´ azky?
Mikroprocesorov´a technika
5
26
Programov´ an´ı v jazyce C, obsluha pˇ reruˇ sen´ı
Test pˇ redchoz´ıch znalost´ı 1. V jak´em pamˇet’ov´em segmentu a od jak´ ych adres se nach´az´ı vektory pˇreruˇsen´ı? 2. Jak prob´ıh´a v´ ykon obsluhy libovoln´eho pˇreruˇsen´ı? 3. Jak lze v jazyce C naprogramovat podm´ınku a cyklus?
C´ıle laboratorn´ı u ´ lohy C´ılem laboratorn´ı u ´lohy je osvojen´ı si programov´an´ı mikrokontrol´er˚ u ve vyˇsˇs´ım programovac´ım jazyce C a pr´ace s pˇreruˇsen´ım.
5.1
Zad´ an´ı
1. Seznamte se s programov´an´ım mikrokontrol´eru ATmega16 v jazyce C. Vytvoˇrte aplikaci, generuj´ıc´ı akustick´ y sign´al pomoc´ı reproduktoru. 2. Seznamte se s programov´an´ım obsluhy pˇreruˇsen´ı v jazyce C. Vytvoˇrte aplikaci bin´arn´ıho ˇc´ıtaˇce ˇr´ızen´eho intern´ım ˇc´ıtaˇcem/ˇcasovaˇcem. 3. K aplikaci z pˇredeˇsl´eho bodu pˇridejte obsluˇzn´e tlaˇc´ıtko pro nulov´an´ı stavu ˇc´ıtaˇce. 4. Bonus: Napiˇste program v jazyce C, kter´ y pomoc´ı reproduktoru generuje kol´ısav´ y t´on (sir´enu).
5.2 5.2.1
Teoretick´ e poznatky Vyˇ sˇ s´ı programovac´ı jazyky
Pro v´ yvoj aplikac´ı se zpravidla pouˇz´ıvaj´ı vyˇsˇs´ı programovac´ı jazyky, u mikrokontrol´er˚ u je to nejˇcastˇeji jazyk C. Oproti zdrojov´emu k´odu v jazyce symbolick´ ych adres, je k´od v jazyce C pˇrehlednˇejˇs´ı, snadno pˇrenositeln´ y mezi odliˇsn´ ymi architekturami a v´ yvoj takov´e aplikace je rychlejˇs´ı. Na druhou stranu zab´ır´a v´ ysledn´ y k´od v´ıce m´ısta v pamˇeti a jeho v´ ykon je pomalejˇs´ı. Tato vlastnost je d´ana mechanizmem pˇrekladu zdrojov´eho k´odu z C do JSA a n´aslednˇe do strojov´eho k´odu mikrokontrol´eru. Pˇrekladaˇc, tj. program nahrazuj´ıc´ı u ´seky programu ve vyˇsˇs´ım jazyce posloupnosti instrukc´ı, zpravidla nepracuje optim´alnˇe. Pˇreloˇzen´ y k´od tak obsahuje tak´e instrukce, kter´e nejsou bezprostˇrednˇe nutn´e k vykon´an´ı pˇr´ısluˇsn´e funkce. Pˇresto v´ yhody vyˇsˇs´ıch jazyk˚ u v´ yraznˇe pˇrevyˇsuj´ı tyto nedostatky. V pˇr´ıpadˇe, kdy je vyˇzadov´ana absolutn´ı kontrola nad funkc´ı a ˇcasov´an´ım programu, jsou exponovan´e u ´seky zdrojov´eho k´odu ps´any v JSA, ostatn´ı ˇc´asti jsou ponech´any v jazyce C. Programovac´ı jazyk C byl poprv´e standardizov´an americkou spoleˇcnost´ı ANSI (American National Standards Institute) v 80. letech. Pˇrestoˇze byl tento standard n´aslednˇe
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
27
pˇrevzat tak´e mezin´arodn´ı spoleˇcnost´ı ISO (International Organization for Standardization), je st´ale pouˇz´ıv´an n´azev jazyka ANSI C. V souˇcasn´e dobˇe je platn´a verze z bˇrezna 2000 s oznaˇcen´ım ISO/IEC 9899:1999 [8]. Kr´atk´e pˇribl´ıˇzen´ı struktury jazyka C je uvedeno v pˇr´ıloze B. Existuje cel´a ˇrada pˇrekladaˇc˚ u tohoto jazyka do strojov´eho k´odu. Navz´ajem se liˇs´ı m´ırou optimalizace v´ ysledn´eho k´odu, rychlost´ı pˇrekladu a cenou. Jedn´ım z rozˇs´ıˇren´ ych pˇrekladaˇc˚ u je GCC (GNU Compiler Collection) [9]. Jak n´azev napov´ıd´a, jedn´a se o soubor pˇrekl´adac´ıch n´astroj˚ u projektu GNU, kter´ y sdruˇzuje tzv. svobodn´ y software. Dopln´ıme-li pˇrekladaˇc GCC knihovnou, popisuj´ıc´ı strukturu a funkci mikrokontrol´eru AVR, m˚ uˇzeme tento voln´ y n´astroj vyuˇz´ıt tak´e k v´ yvoji aplikac´ı pro AVR. Pro operaˇcn´ı syst´em Windows je tato kombinace dostupn´a prostˇrednictv´ım open source projektu s n´azvem WinAVR [10]. Tento n´astroj kromˇe pˇrekladaˇce obsahuje tak´e program´ator, lad´ıc´ı n´astroje a dalˇs´ı funkce. Po nainstalov´an´ı je vˇse dostupn´e pˇr´ımo z v´ yvojov´eho prostˇred´ı AVR Studia. 5.2.2
Obsluha pˇ reruˇ sen´ı v jazyce C
V´ yznam a pouˇzit´ı pˇreruˇsen´ı v jazyce symbolick´ ych adres popisuje laboratorn´ı u ´loha ˇc. 3. Pˇripomeˇ nme, ˇze obsluhu libovoln´eho pˇreruˇsen´ı je nutn´e vloˇzit do pamˇet’ov´eho prostoru, kter´ y ud´av´a vektor pˇreruˇsen´ı. Je tedy nutn´e vˇedˇet, na kterou adresu vektor ukazuje. Pˇri vyuˇzit´ı programovac´ıho jazyka C a pˇrekladaˇce GCC je situace m´ırnˇe jednoduˇsˇs´ı. Staˇc´ı vytvoˇrit obsluˇznou funkci (resp. makro) s n´azvem ISR (Interrupt Service Routine), jejiˇz jedin´ ym parametrem je identifik´ator zdroje pˇreruˇsen´ı. Ty jsou pro mikrokontrol´er ATmega16 vyps´any v tabulce 5.1. Napˇr. pro extern´ı poˇzadavek na pˇreruˇsen´ı 0 je to parametr INT0 vect, apod. Konkr´etn´ı adresu vektoru pˇreruˇsen´ı dopln´ı aˇz pˇrekladaˇc. Ten tak´e s´am definuje z´asobn´ık, ˇci zajiˇst’uje n´avrat z obsluhy pˇreruˇsen´ı. Kostra zdrojov´eho k´odu, vyuˇz´ıvaj´ıc´ı extern´ıho pˇreruˇsen´ı 0 je zobrazena na obr´azku obr´ azku 5.1. Tento k´od je ekvivalentem zdrojov´eho k´odu v jazyce symbolick´ ych adres z obr´ azku 3.1. Specifika knihovny pro programov´an´ı mikrokontrol´er˚ u AVR (avr-libc) je moˇzn´e nal´ezt v kapitole B.4 a na internetov´e str´ance [11].
5.3
Pokyny k zad´ an´ı
Bod 1. Pro naˇsi dalˇs´ı pr´aci v laboratorn´ıch cviˇcen´ıch budeme vyuˇz´ıvat v´ yvojovou desku ´ DEVELOPMENT BOARD ATmega16 vyvinutou na Ustavu radioelektroniky c´ılenˇe pro pˇredmˇet Mikroprocesorov´a technika. Zapojen´ı desky a jej´ı popis je uveden v pˇr´ıloze A. J´adrem desky je mikrokontrol´er ATmega16-16AU s extern´ım krystalem o frekvenci 16M Hz. K I/O bran´am procesoru lze propojen´ım pˇr´ısluˇsn´ ych propojek pˇripojovat r˚ uzn´e perifern´ı obvody, LED diody, tlaˇc´ıtka, kl´avesnici, LED displej, LCD znakov´ y displej, reproduktor se zesilovaˇcem, ˇradiˇce rozhran´ı RS-232 a USB, D/A pˇrevodn´ık ˇci hodinov´ y obvod s kalend´aˇrem, ˇr´ızen´ ym sbˇernic´ı I2C. Pr´ace s perifern´ımi zaˇr´ızen´ımi je podstatou mikroprocesorov´ ych aplikac´ı a bude z´akladn´ı n´apln´ı dalˇs´ıch laboratorn´ıch u ´loh. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt v jazyce C (v kolonce Project type je nutn´e vybrat volbu AVR GCC) pro mikrokontrol´er ATmega16. Do projektu vloˇzte hlaviˇckov´ y soubor avr/io.h, kter´ y obsahuje popis vybran´eho mikrokontrol´eru. V tomto souboru jsou n´azvy vˇsech ˇr´ıdic´ıch registr˚ u definov´any velk´ ymi p´ısmeny,
Mikroprocesorov´a technika
28
Tabulka 5.1: Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 ˇ Adresa Parametr v C (GCC) Popis pˇreruˇsen´ı C. 1 0x0000 Extern´ı reset, pˇripojen´ı nap´ajen´ı 2 0x0002 INT0 vect Extern´ı poˇzadavek na pˇreruˇsen´ı 0 3 0x0004 INT1 vect Extern´ı poˇzadavek na pˇreruˇsen´ı 1 ˇ ıtaˇc/ˇcasovaˇc 2 - shoda komparace 4 0x0006 TIMER2 COMP vect C´ ˇ ıtaˇc/ˇcasovaˇc 2 - pˇreteˇcen´ı 5 0x0008 TIMER2 OVF vect C´ ˇ ıtaˇc/ˇcasovaˇc 1 - zachycen´ı 6 0x000A TIMER1 CAPT vect C´ ˇ ıtaˇc/ˇcasovaˇc 1 - shoda s kompar´atorem A 7 0x000C TIMER1 COMPA vect C´ ˇ ıtaˇc/ˇcasovaˇc 1 - shoda s kompar´atorem B 8 0x000E TIMER1 COMPB vect C´ ˇ ıtaˇc/ˇcasovaˇc 1 - pˇreteˇcen´ı 9 0x0010 TIMER1 OVF vect C´ ˇ ıtaˇc/ˇcasovaˇc 0 - pˇreteˇcen´ı C´ 10 0x0012 TIMER0 OVF vect 11 0x0014 SPI STC vect Dokonˇcen´ı s´eriov´eho pˇrenosu SPI 12 0x0016 USART RXC vect USART - kompletn´ı pˇr´ıjem dat 13 0x0018 USART UDRE vect USART - pr´azdn´ y datov´ y registr 14 0x001A USART TXC vect USART - kompletn´ı vysl´an´ı dat 15 0x001C ADC vect ADC - AD pˇrevod dokonˇcen 16 0x001E EE RDY vect EEPROM - komunikace pˇripravena 17 0x0020 ANA COMP vect Zmˇena v´ ystupu analogov´eho kompar´atoru 18 0x0022 TWI vect Ud´alost na I2C sbˇernici 19 0x0024 INT2 vect Extern´ı poˇzadavek na pˇreruˇsen´ı 2 ˇ ıtaˇc/ˇcasovaˇc 0 - shoda komparace 20 0x0026 TIMER0 COMP vect C´ 21 0x0028 SPM RDY vect Uloˇzen´ı do programov´e pamˇeti pˇripraveno
#include
#include ... int main( void ) { ... sei() ; while( 1 ) ; } ISR( INT0_vect ) { ... }
// hlaviˇ ckov´ y soubor popisuj´ ıc´ ı mikrokontrol´ er // knihovna potˇ rebn´ a pro pˇ reruˇ sen´ ı
// tˇ elo hlavn´ ı funkce // glob´ aln´ ı povolen´ ı pˇ reruˇ sen´ ı // nekoneˇ cn´ a smyˇ cka
// program pro obsluhu extern´ ıho pˇ reruˇ sen´ ı
Obr´ azek 5.1: Uk´azka z´apisu pˇreruˇsen´ı v programovac´ım jazyce C
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
29
proto mˇejte na pamˇeti, ˇze ve zdrojov´em k´odu mus´ıte pouˇz´ıvat pr´avˇe tento z´apis. Vaˇsim u ´kolem bude rozezvuˇcet reproduktor. Reproduktor se zesilovaˇcem je pˇripojen k jednomu z v´ yvod˚ u I/O br´any mikrokontrol´eru (viz. sch´ema). Reproduktor rozezvuˇc´ıme generov´an´ım periodick´e zmˇeny tohoto pinu nastaven´eho jako v´ ystupn´ı. Aby byl generovan´ y t´on v akustick´em p´asmu, je nutno do programu zaˇradit zpoˇzd’ovac´ı smyˇcku, kter´a zajist´ı prodlouˇzen´ı doby, kdy je hodnota sign´alu v u ´rovni log. 0 nebo log. 1, jak naznaˇcuje obr´ azek 5.2. Tuto smyˇcku naprogramujte jako cyklus. Ve zdrojov´em k´odu si osvojte tak´e syntaxi podm´ınky a deklarace promˇenn´ ych.
Obr´ azek 5.2: Princip zmˇeny frekvence generovan´eho akustick´eho sign´alu Vytvoˇrenou aplikaci naprogramujte do programov´e pamˇeti mikrokontrol´eru pomoc´ı programovac´ıho modulu ISP. Tento modul je na desce DEVELOPMENT BOARD ATmega16 um´ıstˇen pod maticovou kl´avesnic´ı a jeho spr´avn´a funkce je indikov´ana zelenou sign´aln´ı SMD diodou. Jedn´a se o modul AVRISP mkII firmy Atmel [7], proto pˇri nav´az´an´ı komunikace AVR Studia s program´atorem je nutn´e vybrat pr´avˇe tento produkt, jak naznaˇcuje obr´azek 5.3.
Obr´ azek 5.3: V´ ybˇer program´atoru AVRISP mkII Po ovˇeˇren´ı spr´avn´e ˇcinnosti programu, smaˇzte obsah pamˇeti Flash mikrokontrol´eru - na d˚ uvod pˇrijdete sami. To lze prov´est tlaˇc´ıtkem Erase Device, kter´e se nach´az´ı v programovac´ım dialogu. Bod 2. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt v jazyce C a naprogramujte 4bitov´ y bin´arn´ı ˇc´ıtaˇc, kter´ y bude inkrementovat svou hodnotu kaˇzdou sekundu a bude ˇr´ızen pˇreteˇcen´ım 16bitov´eho ˇc´ıtaˇce/ˇcasovaˇce 1. Stav ˇc´ıtaˇce zobrazte pomoc´ı LED diod, kter´e jsou pˇripojeny k horn´ı polovinˇe portu D. Pro spr´avnou funkci staˇc´ı nastavit pˇreddˇeliˇcku v ˇr´ıdic´ım registru TCCR1B (Timer/Counter1 Control Register B) a povolit pˇreruˇsen´ı pˇri pˇreteˇcen´ı v registru TIMSK (Timer/Counter Interrupt Mask Register). Struktury registr˚ u naleznete v datasheetu [5]. Vypoˇctˇete doby pˇreteˇcen´ı ˇc´ıtaˇce/ˇcasovaˇce 1 pro vˇsechny hodnoty pˇreddˇeliˇcky v pˇr´ıpadˇe, ˇze frekvence hodinov´eho sign´alu mikrokontrol´eru
Mikroprocesorov´a technika
30
ˇ ıdic´ı registry naplˇ na v´ yvojov´e desce je fCP U = 16M Hz. R´ nujte zp˚ usobem kombinov´an´ı bitov´eho posuvu doleva << a logick´eho souˇctu |, uk´azan´ ym na pˇredn´aˇsk´ach. Bod 3. K aplikaci z pˇredchoz´ıho bodu pˇridejte obsluhu extern´ıho poˇzadavku na pˇreruˇsen´ı INT0, ˇr´ızen´e tlaˇc´ıtkem. Tato obsluha necht’ resetuje stav bin´arn´ıho ˇc´ıtaˇce. Realizujte jednoduchou metodu oˇsetˇren´ı stisku mechanick´eho tlaˇc´ıtka. Jak´e tlaˇc´ıtko je zdrojem pˇreruˇsen´ı INT0 na v´ yvojov´e desce? Bonus. V jazyce C naprogramujte aplikaci, kter´a generuje sir´enu, tj. periodickou zmˇenu dvou t´on˚ u. Nakreslete ˇcasov´ y pr˚ ubˇeh generovan´eho sign´alu. Pro odmˇeˇrov´an´ı potˇrebn´ ych ˇcasov´ ych interval˚ u vyuˇzijte pˇreteˇcen´ı intern´ıch ˇc´ıtaˇc˚ u/ˇcasovaˇc˚ u 0 a 1. Jeden z nich nastavte pomoc´ı pˇreddˇeliˇcky pro generov´an´ı pˇr´ısluˇsn´ ych frekvenc´ı v´ ystupn´ıho sign´alu a druh´ y pro odmˇeˇrov´an´ı doby trv´an´ı obou t´on˚ u.
5.4
Shrnut´ı
Laboratorn´ı u ´loha umoˇzn ˇuje student˚ um proniknout do problematiky programov´an´ı mikrokontrol´er˚ u v jazyce C. Konkr´etnˇe byl pops´an zp˚ usob tvorby obsluhy pˇreruˇsen´ı od intern´ıho ˇc´ıtaˇce/ˇcasovaˇce a extern´ı poˇzadavek na pˇreruˇsen´ı od tlaˇc´ıtka.
5.5
Kontroln´ı ot´ azky
Ot´ azka 5.1 Kolika bitov´e jsou promˇenn´e typu char a signed int v jazyce C? Ot´ azka 5.2 Nakreslete v´yvojov´y diagram aplikace z bonusov´eho pˇr´ıkladu. Ot´ azka 5.3 Jak´ym zp˚ usobem je moˇzn´e pˇrepsat n´ asleduj´ıc´ı pˇr´ıkazy v jazyce C do jazyka symbolick´ych adres mikrokontrol´eru AVR? Kolik byt˚ u pˇreloˇzen´y program zab´ır´ a? DDRD = 0xf0 ; PORTD = 0 ; TCCR1B |= (1<<2) | (1<<1) ; sei() ;
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
6
31
Komunikace s LCD displejem
Test pˇ redchoz´ıch znalost´ı 1. Jak´e ˇr´ıdic´ı sign´aly v mikroprocesorov´e technice ovl´adaj´ı operaci ˇcten´ı/z´apis? Uved’te dvˇe z´akladn´ı varianty, kter´e vyuˇz´ıvaj´ı napˇr. firmy Intel a Atmel. 2. Co je to ASCII tabulka a jak´e u ´daje obsahuje? 3. Jak´ ym zp˚ usobem lze v jazyce C kombinovat v´ ypis textov´eho ˇretˇezce s hodnotou promˇenn´e urˇcit´eho typu (napˇr. typu char)?
C´ıle laboratorn´ı u ´ lohy Laboratorn´ı u ´loha si klade za c´ıl sezn´amit studenty s moˇznost´ı pˇripojen´ı LCD displeje k I/O portu mikrokontrol´eru AVR. Vyuˇzita bude 4bitov´a datov´a komunikace mezi mikrokontrol´erem ATmega16 a LCD displejem s rozliˇsen´ım 16×4 znak˚ u. Programov´an´ı ˇr´ıdic´ı aplikace bude prob´ıhat ve vyˇsˇs´ım programovac´ım jazyce C a bude vyuˇzita knihovna pro LCD displej, jejiˇz autor je Peter Fleury [13].
6.1
Zad´ an´ı
1. Seznamte se s knihovnou pro vyuˇzit´ı LCD displeje v jazyce C. 2. Realizujte bin´arn´ı ˇc´ıtaˇc, kter´ y bude ovl´ad´an pˇreteˇcen´ım 16bitov´eho ˇc´ıtaˇce/ˇcasovaˇce a jeho stav zobrazte pomoc´ı LED diod a na LCD displeji. 3. Vytvoˇrte dvojici nov´ ych znak˚ u, kter´e bude moˇzn´e zobrazit na LCD displeji. 4. Bonus: Na LCD displeji realizujte jednoduch´e menu, ve kter´em se budete pohybovat pomoc´ı tlaˇc´ıtek.
6.2
Teoretick´ e poznatky
´ cinn´ Uˇ y zp˚ usob zobrazen´ı informac´ı v cel´e ˇradˇe ˇr´ıdic´ıch aplikac´ı je pomoc´ı LCD displeje. Tato laboratorn´ı u ´loha je zamˇeˇrena na pouˇzit´ı znakov´ ych LCD displej˚ u. Vˇetˇsina vyr´abˇen´ ych LCD displej˚ u je ovl´ad´ana pomoc´ı ˇr´ıdic´ıho obvodu HD44780 firmy Hitachi [14], pˇr´ıp. jeho ekvivalent˚ u. Tento ˇradiˇc je ve sv´e podstatˇe normou pro komunikaci s LCD displeji. Zpravidla se vyr´abˇej´ı displeje s rozliˇsen´ım od 8×1 aˇz po 40×4 znak˚ u s podsv´ıcen´ım (ˇzlutozelen´e, modr´e) i bez. Znakov´ y LCD displej obsahuje osm datov´ ych pin˚ u pro pˇrenos instrukc´ı a dat, d´ale sadu tˇr´ı ˇr´ıdic´ıch sign´al˚ u a koneˇcnˇe piny pro nap´ajen´ı, nastaven´ı kontrastu a podsv´ıcen´ı. Pˇrestoˇze datov´e informace, kter´e LCD displej pˇrij´ım´a/vys´ıl´a jsou 8bitov´e, ˇcasto se komunikace realizuje pouze ˇctveˇric´ı datov´ ych vodiˇc˚ u (oznaˇcov´ano jako 4bitov´a komunikace). Bytov´a slova se tak pos´ılaj´ı ve dvou kroc´ıch: nejprve vyˇsˇs´ı nibl, n´aslednˇe niˇzˇs´ı. Stejn´ ym zp˚ usobem je realizov´ana komunikace mikrokontrol´eru ATmega16
Mikroprocesorov´a technika
32
s LCD displejem na v´ yvojov´e desce, jak naznaˇcuje obr´ azek 6.1. Je zˇrejm´e, ˇze 4bitovou komunikac´ı byl sn´ıˇzen poˇcet nutn´ ych pin˚ u mikrokontrol´eru z jeden´acti na sedm. Konkr´etnˇe se jedn´a o piny PA7 aˇz PA1 na portu A.
Obr´ azek 6.1: Zapojen´ı LCD displeje na v´ yvojov´e desce ATmega16 ˇ ıdic´ı sign´al RS slouˇz´ı k identifikaci zda jsou mezi mikrokontrol´erem a LCD displejem R´ pˇren´aˇseny instrukce nebo data (RS = 0: instrukce, RS = 1: data). Sign´al R/W identifikuje zda doch´az´ı k z´apisu nebo ke ˇcten´ı z LCD displeje (R/W = 0: z´apis, R/W = 1: ˇcten´ı). Kladn´ y puls sign´alu E (Enable) oznaˇcuje okamˇziky, kdy jsou ˇctena data z datov´e a ˇr´ıdic´ı sbˇernice. Proces komunikace mikrokontrol´eru ve smˇeru k LCD displeji prob´ıh´a v nˇekolika kroc´ıch. Nejprve se nutn´e nastavit pˇr´ısluˇsn´e hodnoty dvou ˇr´ıdic´ıch sign´al˚ u RS a R/W . N´aslednˇe se na datov´e piny D7 : 4 pˇrivede vyˇsˇs´ı nibl zapisovan´ ych dat. Pˇr´ıjem tˇechto dat v LCD displeji je spuˇstˇen kladn´ ym pulzem sign´alu E, kter´ y mus´ı trvat nˇekolik hodinov´ ych cykl˚ u. N´aslednˇe se na datov´e piny pˇrivede niˇzˇs´ı polovina pos´ılan´eho bytu a opˇet se potvrd´ı kr´atk´ ym pulsem E. Struktura nˇekter´ ych instrukc´ı pro komunikaci s displejem (resp. s ˇradiˇcem HD44780) je zobrazena v tabulce 6.1. Form´at instrukc´ı je pevnˇe d´an. y soupis Jedn´a se vˇzdy o 1bytov´e slovo doplnˇen´e o ˇr´ıdic´ı sign´aly RS a R/W . Podrobn´ vˇsech instrukc´ı je moˇzn´e nal´ezt v literatuˇre, napˇr. v [12]. Tabulka 6.1: Nˇekter´e pˇr´ıkazy HD44780 pro komunikaci s LCD displejem RS 0 0 0
R/W 0 0 0
DB7 : DB0 0000 0001 0000 001x 0000 1DCB
0 1 1
0 0 1
01cgram adr 8bitov´ a data 8bitov´ a data
6.3
Popis instrukce Smaz´an´ı displeje. N´avrat kurzoru na pozici (0,0). Zapnut´ı displeje/kurzoru. D: zapnut´ı displeje. C: zobrazen´ı kurzoru. B: blik´an´ı kurzoru. Nastaven´ı adresy CGRAM segmentu. Z´apis dat do pamˇeti CGRAM nebo DDRAM. ˇ ı dat z pamˇeti CGRAM nebo DDRAM. Cten´
Pokyny k zad´ an´ı
Bod 1. V programu AVR Studio vytvoˇrte nov´ y projekt v jazyce C pro mikrokontrol´er ATmega16 a pomoc´ı jiˇz hotov´e knihovny pro komunikaci s LCD displejem naprogramujte
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
33
aplikaci, kter´a vyp´ıˇse textov´ y ˇretˇezec na displeji. Knihovnu, jej´ıˇz p˚ uvodn´ı autor byl Peter Fleury [13], si st´ahnˇete ze str´anek eLearningu VUT v Brnˇe. Jedn´a se o dva soubory s y soubor vaˇs´ı n´azvy lcd c.c a lcd h.h. Oba zkop´ırujte do adres´aˇre, kde se nach´az´ı zdrojov´ aplikace. Soubor s koncovkou *.c je nutn´e vloˇzit do vaˇseho projektu. Postup je snadn´ y. Prav´ ym tlaˇc´ıtkem kliknˇete na sloˇzku obsahuj´ıc´ı zdrojov´e soubory (Source Files) v lev´e y soubor lcd h.h se jiˇz vloˇz´ı do ˇc´asti AVR Studia a vloˇzte soubor lcd c.c. Hlaviˇckov´ projektu automaticky pˇri pˇrekladu. Knihovna pro komunikaci s LCD displejem, kterou jste vloˇzili do projektu obsahuje veˇsker´e nastaven´ı a funkce pro inicializaci a pouˇzit´ı LCD displeje. Soupis pomocn´ ych funkc´ı, kter´e budete potˇrebovat je uveden v tabulce 6.2. Vˇsechny tyto funkce nevrac´ı ˇz´adnou hodnotu. Tabulka 6.2: Soupis nˇekter´ ych funkc´ı knihovny pro LCD N´azev funkce Popis funkce lcd init() ; Inicializace LCD displeje. lcd clrscr() ; Smaz´an´ı obsahu LCD displeje. lcd gotoxy( 0,2 ) ; Pˇresun kurzoru na pozici (0,2). lcd putc( ’A’ ) ; Zobrazen´ı znaku A. lcd puts( "BMPT" ) ; Zobrazen´ı ˇretˇezce znak˚ u BMPT. lcd command( 0b01000000 ) ; Z´apis 1bytov´e instrukce do LCD displeje. lcd data( 0b00001010 ) ; Z´apis 1bytov´ ych dat do LCD displeje. Naprogramujte aplikaci, kter´a vyuˇzije prvn´ıch pˇet funkc´ı z tabulky 6.2. Nezapomˇen ˇte vloˇzit hlaviˇckov´ y soubor knihovny LCD displeje. Knihovny, dostupn´e ve stejn´em adres´aˇri jako cel´a aplikace se vkl´adaj´ı pˇr´ıkazem #include "nazev knihovny". V hlavn´ı funkci aplikace inicializujte LCD displej, bezprostˇrednˇe pot´e smaˇzte obsah displeje a n´aslednˇe na r˚ uzn´e pozice vypiˇste libovoln´e znaky a ˇretˇezce. Funkci ukonˇcete pr´azdnou nekoneˇcnou smyˇckou. Bod 2. Jiˇz vytvoˇren´ y projekt z pˇredeˇsl´eho bodu rozˇsiˇrte o obsluhu pˇreruˇsen´ı pˇri pˇreteˇcen´ı 16bitov´eho ˇc´ıtaˇce/ˇcasovaˇce. Toto pˇreruˇsen´ı bude inkrementovat stav 4bitov´eho bin´arn´ıho ˇc´ıtaˇce (viz. laboratorn´ı u ´loha ˇc. 5). Kromˇe zobrazen´ı stavu ˇc´ıtaˇce pomoc´ı LED diod, zobrazte jeho stav tak´e na LCD displeji. Hodnotu promˇenn´e je moˇzn´e zobrazit pomoc´ı kombinace pˇr´ıkaz˚ u sprintf() z knihovny stdio.h a lcd puts(). Konkr´etn´ı pouˇzit´ı a syntaxi uveden´ ych pˇr´ıkaz˚ u v´am uk´aˇze vyuˇcuj´ıc´ı. Bod 3. Dostupn´a znakov´a sada LCD displeje je zobrazena v pˇr´ıloze C. Kromˇe tˇechto znak˚ u je moˇzn´e nadefinovat aˇz osm nov´ ych znak˚ u. Uˇzivatelsky definovan´e znaky jsou v LCD displeji uloˇzeny od adresy 0x00 do 0x07. Tento u ´sek pamˇeti se jmenuje CGRAM (Character Generator RAM). Znaky se definuj´ı v matici 5×8 bod˚ u. Zobrazen´ y pixel bude v t´eto matici obsahovat hodnotu 1, body kter´e maj´ı b´ yt skryty obsahuj´ı 0. Jeden znak je tedy reprezentov´an osmic´ı slov (jedno slovo na ˇr´adek). Pˇr´ıklad novˇe definovan´eho znaku je zn´azornˇen na obr´azku 6.2. Do podobn´e matice si postupnˇe zn´azornˇete dva znaky, kter´e chcete nadefinovat.
Mikroprocesorov´a technika
4 . 1 . . . 1 . .
3 . . 1 . 1 . . .
2 . . . 1 . . . .
1 . . 1 . 1 . . .
0 . 1 . . . 1 . .
34
data 0b00000 0b10001 0b01010 0b00100 0b01010 0b10001 0b00000 0b00000
Obr´ azek 6.2: Novˇe definovan´ y znak × pro LCD displej Nov´ y znak m´a smysl uloˇzit do pamˇeti CGRAM na sam´em zaˇc´atku aplikace. K nastaven´ı t´eto adresy vyuˇzijte pˇr´ıkaz lcd command(), jehoˇz argument naleznete v tabulce 6.1. Bezprostˇrednˇe po t´eto instrukci, LCD displej oˇcek´av´a uloˇzen´ı osmi datov´ ych slov popisuj´ıc´ıch samotn´ y znak, tj. osmkr´at vyuˇzijte funkci lcd data(). Pro spr´avnou komunikaci je nutn´e po uloˇzen´ı nov´eho znaku, zavolat funkci smaz´an´ı obsahu displeje y na adrese 0x00 lze pomoc´ı funkce lcd putc( 0x00 lcd clrscr(). Zobrazit znak, uloˇzen´ ). Bonus. V programu AVR Studio vytvoˇrte nov´ y projekt v jazyce C pro mikrokontrol´er ATmega16 a naprogramujte aplikaci pro LCD displej realizuj´ıc´ı listov´an´ı v menu. K posunu v menu vyuˇzijte dvojice tlaˇc´ıtek. Tˇret´ım tlaˇc´ıtkem potvrzujte v´ ybˇer. Menu m˚ uˇze napˇr. ovl´adat stav LED diod na v´ yvojov´e desce.
6.4
Shrnut´ı
Laboratorn´ı u ´loha pˇredstavuje moˇznost propojen´ı LCD displeje s mikrokontrol´erem. Pro vz´ajemnou komunikaci byla pouˇzita 4bitov´a verze datov´e komunikace a knihovna funkc´ı pro LCD displej, dostupn´a na Internetu [13]. Studenti si osvojili vol´an´ı tˇechto pomocn´ ych funkc´ı, spoleˇcnˇe s moˇznost´ı vytvoˇren´ı nov´eho znaku, kter´ y nen´ı obsaˇzen ve znakov´e sadˇe LCD displeje.
6.5
Kontroln´ı ot´ azky
Ot´ azka 6.1 Naˇcrtnˇete ˇcasov´e pr˚ ubˇehy vˇsech datov´ych i ˇr´ıdic´ıch sign´ al˚ u pˇri ˇcten´ı 8bitov´eho slova (napˇr. 0x4c) z LCD displeje do mikrokontrol´eru. Datov´ a komunikace je nastavena jako 4bitov´a. Ot´ azka 6.2 V bin´arn´ı podobˇe zapiˇste matici, reprezentuj´ıc´ı znak A ve znakov´e sadˇe LCD displeje. Ot´ azka 6.3 Jak´ym zp˚ usobem je moˇzn´e vkl´ adat instrukce mikrokontrol´eru AVR do zdrojov´eho k´ odu v jazyce C?
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
7
35
Zpracov´ an´ı analogov´ ych sign´ al˚ u
Test pˇ redchoz´ıch znalost´ı 1. Jak´a je funkce A/D pˇrevodn´ıku a na ˇcem z´avis´ı kvantizaˇcn´ı chyba? 2. Jak dlouho trv´a jeden A/D pˇrevod mikrokontrol´eru ATmega16? 3. Jak´a je funkce analogov´eho kompar´atoru? 4. Liˇs´ı se nˇejak n´asleduj´ıc´ı zp˚ usoby vkl´adan´ı knihovny v jazyce C? #include a #include "nazev knihovny.h".
C´ıle laboratorn´ı u ´ lohy C´ılem laboratorn´ı u ´lohy je pouˇzit´ı dvou bˇeˇzn´ ych intern´ıch perif´eri´ı mikrokontrol´er˚ u ke zpracov´an´ı analogov´eho sign´alu. Jedn´a se o A/D pˇrevodn´ık a analogov´ y kompar´ator. Studenti si osvoj´ı ovl´ad´an´ı tˇechto perif´eri´ı pomoc´ı pˇr´ısluˇsn´ ych kontroln´ıch registr˚ u. Dalˇs´ım c´ılem u ´lohy je pouˇzit´ı pˇreruˇsen´ı a zobrazen´ı dat na LCD displeji.
7.1
Zad´ an´ı
1. S pomoc´ı datasheetu ATmega16 si pˇripravte potˇrebn´ y obsah ˇr´ıdic´ıch registr˚ u A/D pˇrevodn´ıku. 2. Vytvoˇrte aplikaci s jej´ıˇz pomoc´ı budete schopni zmˇeˇrit hodnotu napˇet´ı na odporu. 3. S pomoc´ı datasheetu si pˇripravte potˇrebn´ y obsah ˇr´ıdic´ıho registru analogov´eho kompar´atoru. 4. Naprogramujte aplikaci, kter´a bude porovn´avat napˇet´ı na tlaˇc´ıtku S4 s vnitˇrn´ım referenˇcn´ım napˇet´ım VBG . Stav signalizujte pomoc´ı LED diody a pomoc´ı LCD displeje.
7.2
Teoretick´ e poznatky
Vˇsechna digit´aln´ı zaˇr´ızen´ı jsou schopna zpracov´avat data pouze v ˇc´ıslicov´e podobˇe. Vzhledem k situaci, ˇze okoln´ı svˇet je vˇzdy analogov´ y, je potˇreba zpracov´avan´a data pro mikrokontrol´er nejprve pˇrev´est. K bˇeˇzn´e v´ ybavˇe mikrokontrol´er˚ u patˇr´ı intern´ı A/D pˇrevodn´ık, ˇci analogov´ y kompar´ator. Pˇr´ıtomnost tˇechto perif´eri´ı minimalizuje poˇcet extern´ıch souˇc´astek v zapojen´ı ˇr´ıdic´ı aplikace. Pr´avˇe tˇemto perif´eri´ım je vˇenov´ano n´asleduj´ıc´ı laboratorn´ı cviˇcen´ı. Vstupn´ı analogov´ y sign´al m˚ uˇze reprezentovat celou ˇradu veliˇcin: sign´al od teplotn´ıho, nebo tlakov´eho ˇcidla, u ´roveˇ n akustick´eho sign´alu, velikost napˇet´ı, apod. A/D pˇrevod (podobnˇe jako D/A) je ve sv´e podstatˇe ot´azkou proporc´ı, tj. jak velkou hodnotu m´a vstupn´ı sign´al vzhledem k maxim´aln´ımu rozsahu pˇrevodn´ıku. Napˇr´ıklad, pokud m´a vstupn´ı analogov´ y sign´al hodnotu 2V a maxim´aln´ı rozsah pˇrevodn´ıku je 5V, reprezentuje v´ ystupn´ı
Mikroprocesorov´a technika
36
digit´aln´ı hodnota 40% pln´eho rozsahu. Pouˇzijeme-li jin´e maxim´aln´ı (referenˇcn´ı) napˇet´ı, bude v´ ystupn´ı hodnota tak´e odliˇsn´a i pˇres konstantn´ı napˇet´ı na analogov´em vstupu! V´ ystupn´ı sign´al A/D pˇrevodn´ıku je reprezentov´an posloupnost´ı bit˚ u. Poˇcet tˇechto bit˚ u specifikuje poˇcet rozliˇsiteln´ ych u ´rovn´ı pˇrev´adˇen´eho sign´alu. U 8bitov´eho A/D pˇrevodn´ıku je to 256, u 10bitov´eho 1 024 u ´rovn´ı, apod. Obecnˇe je tedy u ´lohou A/D pˇrevodn´ıku pˇrev´adˇet napˇet´ı vstupn´ıho analogov´eho sign´alu na nbitovou digit´aln´ı reprezentaci v z´avislosti na referenˇcn´ım napˇet´ı. Z pˇredchoz´ı u ´vahy plyne rovnice pro vyj´adˇren´ı z´avislosti mezi hodnotou vstupn´ıho napˇet´ı a jej´ı digit´aln´ı reprezentac´ı ADCH : L =
VIN · 2n − 1, VREF
(7.1)
kde ADCH : L je digit´aln´ı hodnota pˇreveden´eho napˇet´ı VIN , VREF pˇredstavuje maxim´aln´ı hodnotu vstupn´ıho napˇet´ı a n je poˇcet bit˚ u urˇcen´ ych k A/D pˇrevodu. Doba A/D pˇrevodu u ATmega16 je odliˇsn´a pro prvn´ı pˇrev´adˇenou hodnotu a pro vˇsechny n´asleduj´ıc´ı vzorky. U prvn´ıho pˇrevodu je nutn´e nastavit pouˇzit´e analogov´e obvody pˇrevodn´ıku, takˇze pˇreveden´a hodnota je k dispozici za 25 cykl˚ u hodinov´eho sign´alu pro A/D pˇrevodn´ık a za 13 cykl˚ u pro vˇsechny n´asleduj´ıc´ı vzorky. Za pˇredpokladu, ˇze frekvence hodinov´eho sign´alu A/D pˇrevodn´ıku mus´ı b´ yt v rozmez´ı od 50kHz do 200kHz, je moˇzn´e dos´ahnout rychlosti pˇrevodu aˇz 15,3kSPS (Samples Per Second). A/D pˇrevodn´ık obsaˇzen´ y v ATmega16 je 10bitov´ y. Druhou moˇznost´ı jak z´ıskat digitalizovanou podobu analogov´eho sign´alu je pouˇzit´ı analogov´eho kompar´atoru. Analogov´ y kompar´ator je perif´erie, kter´a porovn´av´a u ´rovnˇe dvou analogov´ ych sign´al˚ u. U mikrokontrol´eru ATmega16 je prvn´ı z nich pˇriveden na neinvertuj´ıc´ı vstup kompar´atoru AIN0, druh´ y na invertuj´ıc´ı AIN1. Fyzicky se jedn´a o piny PB2 a PB3. Je-li splnˇena podm´ınka AIN 0 > AIN 1, pak v´ ystup kompar´atoru vykazuje log. 1. Mikrokontrol´er ATmega16 nav´ıc umoˇzn ˇuje nahradit neinvertuj´ıc´ı vstup kompar´atoru AIN0 vnitˇrn´ım referenˇcn´ım napˇet´ım VBG , jehoˇz typick´a hodnota je 1,23V. V´ ystupn´ı hodnotu kompar´atoru, resp. jej´ı zmˇenu, nen´ı nutn´e neust´ale kontrolovat. Zda doˇslo k pˇreklopen´ı v´ ystupn´ıho stavu kompar´atoru je v´ yhodnˇejˇs´ı indikovat pomoc´ı pˇreruˇsen´ı. To lze generovat pˇri zmˇenˇe kompar´atoru z log. 1 na log. 0 nebo obr´acenˇe, pˇr´ıp. pˇri kaˇzd´e zmˇenˇe stavu kompar´atoru. Podrobn´ y popis pouˇzit´ı A/D pˇrevodn´ıku a analogov´eho kompar´atoru je moˇzn´e nal´ezt v datasheetu [5].
7.3
Pokyny k zad´ an´ı
Bod 1. Poˇzadovanou funkci A/D pˇrevodn´ıku (anglicky: Analog to Digital Converter) je nutn´e nastavit v ˇr´ıdic´ıch registrech ADMUX (ADC Multiplexer Selection Register) a ADCSRA (ADC Control and Status Register A). S pomoc´ı datasheetu [5] si pˇripravte hodnoty obou ˇr´ıdic´ıch registr˚ u. V registru ADMUX nastavte nap´ajec´ı napˇet´ı AVCC jako referenˇcn´ı a jako vstupn´ı kan´al pˇrevodn´ıku vyberte ADC0. V kontroln´ım a stavov´em registru ADCSRA povolte pouˇzit´ı A/D pˇrevodn´ıku, zah´ajen´ı A/D pˇrevodu, generaci pˇreruˇsen´ı po jeho dokonˇcen´ı a rychlost s jakou bude A/D pˇrevod prob´ıhat. Nastavte takovou pˇreddˇeliˇcku, aby frekvence odvozen´eho hodinov´eho sign´alu byla v rozmez´ı 50kHz aˇz 200kHz. Vypoˇctˇete frekvenci hodinov´eho sign´alu pro A/D pˇrevodn´ık pro vˇsechny hodnoty pˇreddˇeliˇcky za pˇredpokladu, ˇze frekvence MCU je 16MHz.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
37
Bod 2. Naprogramujte aplikaci pro mikrokontrol´er ATmega16 v jazyce C, kter´a zmˇeˇr´ı hodnotu napˇet´ı na v´ ystupu odporov´eho dˇeliˇce. Zapojen´ı dˇeliˇce je uvedeno na obr´ azku 7.1. Ke zmˇeˇren´ı u ´rovnˇe analogov´eho napˇet´ı pouˇzijte vnitˇrn´ı 10bitov´ y A/D pˇrevodn´ık mikrokontrol´eru. Pˇrevedenou hodnotu zobrazte na LCD displeji. Potˇrebn´e knihovny pro komunikaci s LCD displejem si st´ahnˇete ze str´anek eLearningu VUT v Brnˇe, nebo pouˇzijte z laboratorn´ıho cviˇcen´ı ˇc. 6. Po vytvoˇren´ı nov´eho projektu v programu AVR Studio do nˇej nezapomeˇ nte vloˇzit zdrojov´ y soubor knihovny lcd c.c (postup je naznaˇcen v uveden´em laboratorn´ım cviˇcen´ı).
Obr´ azek 7.1: Zapojen´ı odporov´eho dˇeliˇce v poli konektor˚ u v´ yvojov´e desky Vzhledem k situaci, ˇze intern´ı A/D pˇrevodn´ık je osmi kan´alov´ y a vyuˇz´ıv´a I/O piny PA7(ADC7) aˇz PA0(ADC0) um´ıstˇen´e na portu A (ke kter´emu je ovˇsem pˇripojen tak´e LCD displej, kter´ y budeme rovnˇeˇz pouˇz´ıvat, viz. sch´ema zapojen´ı na obr´ azku A.1), je nutn´e vyuˇz´ıt jedin´ y voln´ y kan´al A/D pˇrevodn´ıku um´ıstˇen´ y na pinu PA0(ADC0). Propojen´ı odporov´eho dˇeliˇce a tohoto vstupu A/D pˇrevodn´ıku je realizov´ano v poli konektor˚ u KA aˇz KD na v´ yvojov´e desce. Zkontrolujte spr´avn´e zapojen´ı dˇeliˇce, ale nemˇen ˇte jej! A/D pˇrevodn´ık budeme vyuˇz´ıvat v tzv. jednoduch´em pˇrevodu (reˇzimu), kdy vstupn´ı napˇet´ı jednoho kan´alu je vztaˇzeno k zemi. A/D pˇrevodn´ık umoˇzn ˇuje tak´e pˇrevod diferenˇcn´ı hodnoty napˇet´ı dvou vstupn´ıch sign´al˚ u vˇcetnˇe ˇr´ızen´ı zes´ılen´ı. Tento reˇzim ovˇsem nebudeme vyuˇz´ıvat. Napiˇste obsluhu pˇreruˇsen´ı, kter´a se spust´ı bude-li k dispozici 10bitov´a digit´aln´ı hodnota pˇreveden´eho napˇet´ı. Zobrazte tuto hodnotu na LCD displeji. Proved’te ruˇcn´ı v´ ypoˇcet vstupn´ıho napˇet´ı ve voltech a vypoˇctˇete hodnotu nezn´am´eho odporu R2. Hodnotu rezistoru R1 v´am zdˇel´ı vyuˇcuj´ıc´ı. Pˇreveden´a hodnota je uloˇzena ve dvou datov´ ych registrech ADCH:L (ADC Data Register). V jazyce C jsou oba registry sjednocen´e do jedin´e 16bitov´e promˇenn´e ADCW, kterou m˚ uˇzete v aplikaci vyuˇz´ıt. Bod 3. V datasheetu [5] vyhledejte kapitolu t´ ykaj´ıc´ı se analogov´eho kompar´atoru (anglicky: Analog Comparator) a pˇripravte si obsah kontroln´ıho a stavov´eho registru ACSR (Analog Comparator Control and Status Register). Pomoc´ı tohoto registru vyberte referenˇcn´ı napˇet´ı (Bandgap reference) m´ısto neinvertuj´ıc´ıho vstupu AIN0 a povolte generov´an´ı pˇreruˇsen´ı pˇri kaˇzd´e zmˇenˇe v´ ystupu kompar´atoru. Bod 4. V jazyce C naprogramujte aplikaci pro mikrokontrol´er ATmega16, kter´a porovn´av´a napˇet´ı na tlaˇc´ıtku S4 s intern´ı referenˇcn´ı hodnotou VBG = 1, 23V . Vyuˇzijte k tomu analogov´ y kompar´ator mikrokontrol´eru ATmega16. K invertuj´ıc´ımu vstupu kompar´atoru AIN1 je pomoc´ı dr´atov´e propojky v poli konektor˚ u pˇripojen v´ ystup tlaˇc´ıtka S4. V´ ystupn´ı stav kompar´atoru indikujte pomoc´ı LED diody a pomoc´ı LCD displeje. In-
Mikroprocesorov´a technika
38
dikov´an´ı naprogramujte v r´amci obsluhy pˇreruˇsen´ı, kter´a bude generov´ana pˇri kaˇzd´e zmˇenˇe v´ ystupn´ı hodnoty kompar´atoru. Hodnota na v´ ystupu kompar´atoru je rovnˇeˇz uloˇzena v registru ACSR. K testov´an´ı pˇr´ısluˇsn´eho bitu vyuˇzijte nˇekter´e z funkc´ı uveden´ ych v tabulce B.5.
7.4
Shrnut´ı
Laboratorn´ı u ´loha umoˇznila student˚ um osvojen´ı si pr´ace s perif´eriemi mikrokontrol´eru ATmega16 pro zpracov´an´ı analogov´eho sign´alu. Jednalo se o 10bitov´ y intern´ı A/D pˇrevodn´ık a analogov´ y kompar´ator. Obˇe perif´erie jsou ovl´ad´any pomoc´ı kontroln´ıch registr˚ u uloˇzen´ ych v datov´e pamˇeti SRAM v oblasti I/O registr˚ u. Po absolvov´an´ı laboratorn´ıho cviˇcen´ı by studenti mˇeli b´ yt schopni nastavit z´akladn´ı pouˇzit´ı obou intern´ıch perif´eri´ı a ˇr´ıdit tak A/D pˇrevod nebo komparaci dvou sign´al˚ u, vˇcetnˇe generov´an´ı pˇr´ısluˇsn´ ych pˇreruˇsen´ı a pr´ace s LCD displejem.
7.5
Kontroln´ı ot´ azky
Ot´ azka 7.1 Jak´e minim´aln´ı napˇet’ov´e kroky je schopen rozliˇsit A/D pˇrevodn´ık mikrokontrol´eru ATmega16 pˇri pouˇzit´ı vnitˇrn´ıho zdroje referenˇcn´ıho napˇet´ı nebo extern´ıho zdroje 5V? Ot´ azka 7.2 Nakreslete typick´e pˇrevodn´ı charakteristiky kompar´ atoru pro zapojen´ı se zpˇetnou vazbou a bez ni. Ot´ azka 7.3 Jakou hodnotu obsahuje programov´y ˇc´ıtaˇc pˇri zah´ ajen´ı obsluhy pˇreruˇsen´ı od A/D pˇrevodn´ıku a analogov´eho kompar´ atoru? Kter´e z tˇechto pˇreruˇsen´ı se vykon´ a jako prvn´ı za pˇredpokladu, ˇze oba poˇzadavky pˇriˇsly souˇcasnˇe?
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
8
39
S´ eriov´ y pˇ renos dat
Test pˇ redchoz´ıch znalost´ı 1. Jak´ y je rozd´ıl mezi synchronn´ı a asynchronn´ı komunikac´ı? Kam patˇr´ı UART? 2. Co je to paritn´ı bit a jak´ ym zp˚ usobem se vypoˇcte? 3. Co to je symbolov´a rychlost a jak se liˇs´ı od bitov´e rychlosti?
C´ıle laboratorn´ı u ´ lohy C´ılem t´eto laboratorn´ı u ´lohy je sezn´amit studenty s ˇr´ızen´ım s´eriov´e asynchronn´ı komunikace UART. V laboratoˇr´ıch pouˇz´ıvan´ y mikrokontrol´er ATmega16 sice obsahuje jednotku, kter´a umoˇzn ˇuje tak´e synchronn´ı komunikaci USART, ale zad´an´ı je kv˚ uli jednoduchosti a snadnˇejˇs´ımu pochopen´ı problematiky koncipov´ano pouze na vyuˇzit´ı UART.
8.1
Zad´ an´ı
1. Pˇripravte si nastaven´ı ˇr´ıdic´ıch registr˚ u asynchronn´ı jednotky USART mikrokontrol´eru ATmega16 a sloˇzen´ı asynchronn´ıho r´amce. 2. V jazyce C sestavte program pro mikrokontrol´er ATmega16, kter´ y bude opakovanˇe vys´ılat jeden datov´ y r´amec pomoc´ı jednotky USART. 3. V jazyce C sestavte program, kter´ y bude pˇrepos´ılat pˇrijat´a data zpˇet do poˇc´ıtaˇce. Pro oˇsetˇren´ı pˇrijet´ı dat vyuˇzijte pˇreruˇsen´ı. 4. Bonus: Doplˇ nte ˇreˇsen´ı pˇredchoz´ıho bodu o k´od, kter´ y umoˇzn´ı pomoc´ı pˇredem definovan´ ych znak˚ u ovl´adat LED diody na v´ yvojov´e desce a zobrazovat pˇrijat´a dat na LCD displeji.
8.2
Teoretick´ e poznatky
Pod oznaˇcen´ım UART (Universal Asynchronous Receiver and Transmitter) se skr´ yv´a integrovan´ y hardware realizuj´ıc´ı s´eriovou komunikaci s okol´ım. Pro zachov´an´ı obecnosti pomineme, ˇze mikrokontrol´er ATmega16 je vybaven rozhran´ım USART (Universal Synchronous Asynchronous serial Receiver and Transmitter) podporuj´ıc´ı nav´ıc i synchronn´ı komunikaci. Asynchronn´ı komunikace se vyznaˇcuje nest´al´ ym zp˚ usobem vys´ıl´an´ı, tj. data mohou b´ yt po s´eriov´e lince vysl´ana v libovoln´em okamˇziku. Na rozd´ıl od komunikace synchronn´ı, nen´ı u asynchronn´ıho zp˚ usobu komunikace pˇren´aˇsena informace o synchronizaci. Pˇrij´ımaˇc takov´eho sign´alu tedy mus´ı b´ yt schopen data spr´avnˇe interpretovat jin´ ym zp˚ usobem. Vyuˇz´ıv´a se pˇredem zvolen´a struktura datov´eho r´amce, pomoci nˇehoˇz se data pos´ılaj´ı. Datov´ y asynchronn´ı r´amec obsahuje jeden stop bit (vˇzdy log. 0), d´ale urˇcit´ y poˇcet datov´ ych bit˚ u v poˇrad´ı od LSB k MSB (5 aˇz 9 bit˚ u), voliteln´ y paritn´ı bit pro jednoduch´e
Mikroprocesorov´a technika
40
zabezpeˇcen´ı dat (lich´a nebo sud´a parita) a jeden nebo dva stop bit (log. 1). Zn´azornˇen´ı takov´eho r´amce je uvedeno na obr´azku 8.1.
Obr´ azek 8.1: Struktura asynchronn´ıho r´amce Aby byl zajiˇstˇen korektn´ı pˇr´ıjem dat na pˇrij´ımac´ı stranˇe, je nutn´e aby jak vys´ılaˇc, tak i pˇrij´ımaˇc pouˇz´ıvali shodn´e nastaven´ı r´amce. Nav´ıc je nutn´e, aby symbolov´a rychlost vys´ılaˇce byla shodn´a se symbolovou rychlost´ı pˇrij´ımaˇce. Symbolov´e rychlosti se nastavuj´ı v pevnˇe dan´ ych intervalech, pˇriˇcemˇz bˇeˇzn´e jsou tyto hodnoty: 600, 1 200, 2 400, 4 800, 9 600, 14 400, 19 200, 28 800, 38 400, . . ., 256 000Bd. Konkr´etn´ı hodnotu symbolov´e rychlosti je potˇreba pˇrepoˇc´ıtat s ohledem na ˇr´ıdic´ı frekvenci fCP U a uloˇzit do registru UBRRH:L (USART Baud Rate Registers). Jedn´a se o registrov´ y p´ar, jehoˇz hodnota je d´ana n´asleduj´ıc´ım vztahem U BRRH : L =
fCP U − 1, 16 · SR
(8.1)
kde SR je poˇzadovan´a hodnota symbolov´e rychlosti v Bd. V pˇr´ıpadˇe, ˇze zvolen´a symbolov´a rychlost je vˇetˇs´ı neˇz 2 400 a frekvence fCP U = 16M Hz, pak staˇc´ı naplnit pouze niˇzˇs´ı registr UBRRL. Jednotka UART mikrokontrol´eru ATmega16 umoˇzn ˇuje pracovat v tzv. norm´aln´ım reˇzimu (Normal mode) a v reˇzimu s dvojn´asobnou pˇrenosovou rychlost´ı (Double Speed mode). V t´eto laboratorn´ı u ´loze budeme pouˇz´ıvat pouze prvn´ı z reˇzim˚ u. Kromˇe ˇr´ıdic´ıho registru pro nastaven´ı symbolov´e rychlosti, obsahuje asynchronn´ı jednotka jeˇstˇe tˇri odliˇsn´e ˇr´ıdic´ı registry a jeden datov´ y. Datov´ y registr UDR (USART I/O Data Register) slouˇz´ı jak pro pˇrij´ımaˇc, tak i pro vys´ılaˇc s´eriov´ ych dat. Data, kter´a chceme vyslat tak staˇc´ı pouze zapsat do tohoto registru a UART jednotka jiˇz vykon´a vˇse potˇrebn´e. Na druh´e stranˇe, po dokonˇcen´ı pˇr´ıjmu je datov´e slovo uloˇzeno pr´avˇe v registru UDR. Informace o chybˇe bˇehem pˇrenosu, pˇr´ıp. o tom ˇze pˇrenos byl dokonˇcen je moˇzn´e vyˇc´ıst z ˇr´ıdic´ıho registru UCSRA (USART Control and Status Register A). Zaj´ımav´ y je bit UDRE (USART Data Register Empty), kter´ y informuje zda je datov´ y registr vys´ılaˇce jiˇz pr´azdn´ y a je tak moˇzn´e vyslat dalˇs´ı data. Zapnut´ı vys´ılaˇce a pˇrij´ımaˇce jednotky USART, povolen´ı generov´an´ı pˇreruˇsen´ı pˇri ukonˇcen´ı vys´ıl´an´ı a pˇr´ıjmu asynchronn´ıho r´amce se nastavuje v registru UCSRB (USART Control and Status Register B). Posledn´ı ˇr´ıdic´ı registr UCSRC (USART Control and Status Register C) obsahuje specifikaci struktury asynchronn´ıho r´amce, tj. poˇcet datov´ ych bit˚ u, volbu parity i poˇctet stop bit˚ u. Asynchronn´ı pˇrij´ımaˇc RxD a vys´ılaˇc TxD je u mikrokontrol´eru ATmega16 vyveden na pinech PD0 a PD1. Tyto vodiˇce jsou pˇres pˇrevodn´ık u ´rovn´ı a pˇres konektor na v´ yvojov´e desce pˇripojeny se s´eriov´ ym rozhran´ım osobn´ıho poˇc´ıtaˇce.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
8.3
41
Pokyny k zad´ an´ı
Bod 1. Vypoˇctˇete hodnoty UBRRH:L, kter´e specifikuj´ı 3 v´ami zvolen´e symbolov´e rychlosti jednotky USART. Pro jednoduchost uvaˇzujte symbolov´e rychlosti vˇetˇs´ı neˇz 2 400Bd. V datasheetu mikrokontrol´eru ATmega16 [5] vyhledejte popis ˇr´ıdic´ıch registr˚ u jednotky USART a pˇripravte si potˇrebn´e hodnoty pro spr´avnou funkci vys´ılaˇce. V registru UCSRB proto zapnˇete vys´ılaˇc USART a v registru UCSRC nastavte v´ami zvolenou strukturu asynchronn´ıho r´amce. Parametry vyb´ırejte podle moˇznost´ı programu Terminal [15] (viz. obr´ azek 8.2), pomoci nˇehoˇz budete komunikovat se s´eriov´ ym portem poˇc´ıtaˇce, tj. s mikrokontrol´erem ATmega16. Podle poˇctu datov´ ych bit˚ u v r´amci si zvolte datov´e slovo, kter´e budete cht´ıt vyslat. Nakreslete ˇcasov´ y pr˚ ubˇeh cel´eho asynchronn´ıho r´amce s tˇemito daty podle obr´azku 8.1.
Obr´ azek 8.2: Aplikace Terminal pro ovl´ad´an´ı s´eriov´eho portu poˇc´ıtaˇce
Bod 2. Vytvoˇrte nov´ y projekt v programu AVR Studio a pro mikrokontrol´er ATmega16 naprogramujte v jazyce C aplikaci, kter´a bude schopna opakovanˇe vys´ılat jeden asynchronn´ı r´amec pomoc´ı jednotky USART. Vyuˇzijte k tomu nastaven´ı ˇr´ıdic´ıch registr˚ u z pˇredchoz´ıho bodu. Nastavte poˇzadovanou rychlost komunikace (vyberte si pouze jednu) a vys´ılaˇc zapnˇete. V nekoneˇcn´e smyˇcce pak vys´ılejte v´ami zvolenou datovou posloupnost. K vysl´an´ı staˇc´ı zapsat posloupnost do datov´eho registru UDR. Pˇred samotn´ ym z´apisem, ale ˇcekejte na vypr´azdnˇen´ı vys´ılac´ıho registru (viz. bit UDRE v registru UCSRA). T´ım bude zajiˇstˇeno, ˇze nedojde ke ztr´atˇe jedin´eho r´amce. K testov´an´ı tohoto bitu vyuˇzijte nˇekter´e z funkc´ı v tabulce B.5. Na osciloskopu, kter´ y je pˇripojen na vys´ılac´ı pin jednotky USART, tj. na PD1 ovˇeˇrte tvar cel´eho asynchronn´ıho r´amce a zmˇeˇrte skuteˇcnou bitovou rychlost. Bod 3. Vytvoˇrte nov´ y projekt v prostˇred´ı AVR Studio a pro mikrokontrol´er ATmega16 naprogramujte v jazyce C aplikaci, kter´a bude pˇrij´ımat s´eriov´a data z poˇc´ıtaˇce pomoc´ı
Mikroprocesorov´a technika
42
jednotky USART a n´aslednˇe je bude pˇrepos´ılat zpˇet. Pˇr´ıjem znaku realizujte jako obsluhu pˇreruˇsen´ı pˇrij´ımaˇce USART. Parametr funkce ISR, kter´ y identifikuje zdroj pˇreruˇsen´ı naleznete v tabulce 5.1. Nezapomeˇ nte pˇridat do zdrojov´eho k´odu veˇsker´e n´aleˇzitosti, kter´e s pˇreruˇsen´ım souvis´ı. K nastaven´ı ˇr´ıdic´ıch registr˚ u jednotky USART z pˇredchoz´ıho bodu jen pˇridejte povolen´ı pˇreruˇsen´ı pˇri pˇr´ıjmu a zapnut´ı pˇrij´ımaˇce v registru UCSRB. Obsluha pˇreruˇsen´ı necht’ naˇcte obsah pˇrijat´ ych dat z datov´eho registru UDR, opˇetovn´ ym zaps´an´ım dat do tohoto registru iniciujete n´asledn´e vysl´an´ı. Pˇri vys´ıl´an´ı opˇet nejprve ˇcekejte na uvolnˇen´ı datov´eho registru vys´ılaˇce jako v pˇredeˇsl´em bodˇe. Spr´avnou funkci aplikace ovˇeˇr´ıte vys´ıl´an´ım dat z programu Terminal. Zde by se mˇely v pˇrij´ımac´ı ˇc´asti bezprostˇrednˇe zobrazovat stejn´a data, kter´a byla vysl´ana. Nezapomeˇ nte v programu Terminal nastavit shodn´ y form´at asynchronn´ıho r´amce, symbolovou rychlost a zah´ajit komunikaci tlaˇc´ıtkem Connect. Pˇri s´eriov´e komunikaci neuvaˇzujte ˇz´adn´e ˇr´ızen´ı toku, tj. Handshaking v programu Terminal nezap´ınejte. Bonus. Doplˇ nte obsluhu pˇreruˇsen´ı z pˇredeˇsl´eho bodu o podm´ınky, pomoc´ı nichˇz budete testovat hodnotu pˇrijat´eho slova. Pomoc´ı ˇc´ıslic 1 aˇz 4 napˇr´ıklad negujte stav LED diod D1 aˇz D4. Pˇridejte do projektu tak´e knihovnu pro pr´aci s LCD displejem. Zobrazujte na nˇem pˇrijat´a data a v pˇr´ıpadˇe pˇr´ıjmu ASCII k´odu kl´avesy Esc, vymaˇzte jeho obsah.
8.4
Shrnut´ı
Laboratorn´ı u ´loha umoˇznila student˚ um otestovat obousmˇernou asynchronn´ı komunikaci mezi mikrokontrol´erem ATmega16 a PC pomoc´ı jednotky UART. Studenti si osvojili dovednosti potˇrebn´e k ˇr´ızen´ı jednotky UART pomoc´ı kontroln´ıch registr˚ u, k odes´ıl´an´ı i pˇr´ıjmu znak˚ u pˇres UART a pomoc´ı osciloskopu si ovˇeˇrili strukturu asynchronn´ıho r´amce.
8.5
Kontroln´ı ot´ azky
Ot´ azka 8.1 Jak´ym zp˚ usobem vyhodnot´ı asynchronn´ı pˇrij´ımaˇc vyslan´ a data 0b1 0100, byl-li zvolen pˇrenos bez zabezpeˇcen´ı, 1 stop bit, ale symbolov´ a rychlost pˇrij´ımaˇce byla nastavena na 9 600Bd, zat´ımco rychlost vys´ılaˇce byla poloviˇcn´ı? Ot´ azka 8.2 Zjistˇete (vypoˇctˇete) jakou nejvyˇsˇs´ı pˇrenosovou rychlost lze z´ıskat s mikrokontrol´erem taktovan´ym na 1MHz. Ot´ azka 8.3 Jak´a bude struktura asynchronn´ıho r´ amce v pˇr´ıpadˇe, ˇze kontroln´ı registr UCSRC obsahuje slovo 0b1011 1010?
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
A
V´ yvojov´ a deska ATmega16
Obr´ azek A.1: Zapojen´ı v´ yvojov´e desky ATmega16
43
Mikroprocesorov´a technika
B
44
Z´ akladn´ı popis jazyka C
Jazyk C obsahuje nˇekolik tzv. rezervovan´ ych slov, kter´e nelze pouˇz´ıt k jin´emu u ´ˇcelu, neˇz k jak´emu byly urˇceny. Nelze je tedy pouˇz´ıt jako n´azvy promˇenn´ ych ˇci funkc´ı. Nejpouˇz´ıvanˇejˇs´ı rezervovan´a slova jsou n´asleduj´ıc´ı: for, return, switch, case, if, else, while, char, int, float, unsigned, void. Zdrojov´ y k´od v jazyce C se skl´ad´a v´ yhradnˇe z tzv. funkc´ı. Funkce je specifikov´ana sv´ ym n´azvem, kter´ y se skl´ad´a ze znak˚ u anglick´e abecedy, ˇc´ıslic a podtrˇz´ıtka. Funkce m˚ uˇze obsahovat libovoln´e parametry (vstupn´ı promˇenn´e), a m˚ uˇze tak´e vracet hodnotu libovoln´eho typu. Nem´a-li funkce vstupn´ı parametry, pˇr´ıp. v´ yslednou hodnotu uˇz´ıv´a se k tomu oznaˇcen´ı void. Tˇelo cel´e funkce je ohraniˇceno p´arem sloˇzen´ ych z´avorek. Kaˇzd´a aplikace mus´ı obsahovat hlavn´ı funkci s n´azvem main. Tato funkce vrac´ı hodnotu typu int a zpravidla nem´a ˇz´adn´ y vstupn´ı parametr. Jestliˇze pˇr´ıkaz, pomoci nˇehoˇz funkce vrac´ı hodnotu m´a n´azev return, vypad´a tˇelo funkce main n´asleduj´ıc´ım zp˚ usobem. int main( void ) { ; return 1 ; }
B.1
// tˇ elo hlavn´ ı funkce // funkce vrac´ ı hodnotu 1
Promˇ enn´ e a operandy
ˇ ıseln´e hodnoty lze v jazyce C uchov´avat pomoc´ı promˇenn´ C´ ych. Promˇenn´e se dˇel´ı na glob´aln´ı, kter´e se definuj´ı vnˇe jak´ekoliv funkce (zpravidla na zaˇc´atku zdrojov´eho k´odu) a lze je pouˇz´ıt v kter´emkoliv m´ıstˇe programu a na lok´aln´ı. Lok´aln´ı promˇenn´e se definuj´ı uvnitˇr funkce, pro kterou jsou urˇceny. Pro promˇennou je vyˇclenˇen pamˇet’ov´ y prostor pˇri vol´an´ı funkce a po n´avratu z n´ı je opˇet uvolnˇen. Z toho plyne, ˇze lok´aln´ı promˇennou lze pouˇz´ıt pouze uvnitˇr dan´e funkce. Kaˇzd´a promˇenn´a je charakterizov´ana sv´ ym n´azvem a vyjadˇruje hodnotu podle zvolen´eho typu. Nejpouˇz´ıvanˇejˇs´ı typy promˇenn´ ych jsou zn´azornˇeny v tabulce B.1, spoleˇcnˇe s poˇctem bit˚ u a odpov´ıdaj´ıc´ım ˇc´ıseln´ ym rozsahem. Pˇri deklaraci promˇenn´e ji lze bezprostˇrednˇe naplnit zvolenou hodnotou. N´asleduj´ıc´ı pˇr´ıklad ukazuje deklaraci promˇenn´e i, kter´a je typu neznam´enkov´eho 16bitov´eho cel´eho ˇc´ısla unsigned int a je rovna hodnotˇe 10. unsigned int i = 10 ;
V´ yˇcet aritmerick´ ych operac´ı a jejich symbolick´ y z´apis v jazyce C obsahuje tabulka B.2. V jazyce C se ˇcasto pouˇz´ıv´a zkr´acen´ y z´apis aritmerick´ ych operac´ı. Lze ho vyuˇz´ıt v pˇr´ıpadˇe, kdy do promˇenn´e, kter´a figuruje v operaci jako prvn´ı argument, je posl´eze uloˇzen tak´e v´ ysledek cel´e operace. Z´apis a += 3 tak napˇr. zkracuje rovnici a = a + 3, nebo d /= a popisuje operaci d = d / a, apod. Za zkr´acenou formu z´apisu lze tak´e povaˇzovat operace inkrementace a dekrementace, kdy napˇr. b++ odpov´ıd´a z´apisu b += 1, nebo b = b + 1. Tabulka B.3 obsahuje soupis bitov´ ych a logick´ ych operac´ı v jazyce C. Tak´e u bitov´ ych a logick´ ych operac´ı lze vyuˇz´ıt zkr´acen´eho z´apisu operace. Napˇr. a |= 3 pˇredstavuje v´ yraz a = a | 3, tj. logickou souˇcet hodnoty 3 s promˇennou a, nebo z´apis ve tvaru d = 2 zkracuje formu z´apisu bitov´eho posuvu doleva d = d 2.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
45
Tabulka B.1: Nˇekter´e typy a rozsahy hodnot promˇenn´ ych Typ Velikost [b] char 8 unsigned char 8 signed char 8 int 16 unsigned int 16 float 32
Rozsah −128 aˇz 127 0 aˇz 255 −128 aˇz 127 −32 768 aˇz 32 767 0 aˇz 65 535 ±1, 175 · 10−38 aˇz ±3, 402 · 1038
Tabulka B.2: Aritmetick´e operace Operace Operand N´asoben´ı * Dˇelen´ı / Dˇelen´ı modulo % Sˇc´ıt´an´ı + Odeˇc´ıt´an´ı Inkrementace ++ Dekrementace -Tabulka B.3: Bitov´e a logick´e operace Operace Operand Jednotkov´ y doplnˇek ∼ Bitov´ y posuv doleva Bitov´ y posuv doprava Logick´ y souˇcin AND & Logick´ y souˇcet OR | Exkluzivn´ı souˇcet EX-OR ∧
B.2
Syntaxe podm´ınky
Podm´ınka slouˇz´ı k vˇetven´ı programu, tj. k situaci, kdy je ˇc´ast k´odu vykon´ana pouze v pˇr´ıpadˇe pravdiv´e podm´ınky. Podm´ınky lze tvoˇrit pomoc´ı relaˇcn´ıch operand˚ u, kter´e jsou uvedeny v tabulce B.4. Syntaxe jednoduch´e podm´ınky vyuˇz´ıv´a pˇr´ıkazu if a je zn´azornˇena v n´asleduj´ıc´ı uk´azce. V tomto pˇr´ıpadˇe se ˇc´ast k´odu uzavˇren´a sloˇzen´ ymi z´avorkami vykon´a pouze v pˇr´ıpadˇe, ˇze hodnota promˇenn´e a je rovna konstantˇe N. if( a == N ) { ; }
Druh´ y ˇcast´ y zp˚ usob z´apisu podm´ınky je pomoc´ı kombinace rezervovan´ ych slov switch a case. Vyuˇz´ıv´a se v pˇr´ıpadˇe, ˇze promˇenn´a m˚ uˇze nab´ yvat nˇekolika m´alo hodnot. V
Mikroprocesorov´a technika
46
Tabulka B.4: Relaˇcn´ı operandy Operace Je roven Je r˚ uzn´ y od Menˇs´ı neˇz Menˇs´ı nebo roven Vˇetˇs´ı neˇz Vˇetˇs´ı nebo roven
Operand == != < <= > >=
n´asleduj´ıc´ım pˇr´ıpadˇe je testov´ana hodnota promˇenn´e b, kter´a m˚ uˇze b´ yt rovna 0, 1 nebo libovoln´emu jin´emu ˇc´ıslu. switch( b ) { case 0: ; case 1: ; default: ; }
B.3
Syntaxe cyklu
Jist´ ym druhem podm´ınky je tak´e kaˇzd´ y cyklus. Cyklus se nejˇcastˇeji programuje pˇr´ıkazem for, kter´ y vykon´a dan´ y k´od s urˇcit´ ym opakov´an´ım. N´asleduj´ıc´ı pˇr´ıklad ilustruje cyklus, kter´ y probˇehne pr´avˇe N×. for( i=0; i
Druh´ ym ˇcast´ ym zp˚ usobem opakovan´eho v´ ykonu programu je smyˇcka ˇr´ızena pˇr´ıkazem while, kter´a opakuje k´od dokud je splnˇena podm´ınka. V naˇsem pˇr´ıpadˇe je to podm´ınka dokud hodnota promˇenn´e a je r˚ uzn´a od nuly. while( a!=0 ) { ; }
Kaˇzd´ y k´od pro ˇc´ıslicov´e syst´emy obsahuje nekoneˇcnou smyˇcku, kter´a neust´ale vykon´av´a stejnou posloupnost operac´ı. Zpravidla se jedn´a o periodick´e naˇc´ıt´an´ı data ze vstupn´ıch zaˇr´ızen´ı, jejich n´asledn´e zpracov´an´ı a pˇr´ıpadn´e vysl´an´ı na v´ ystupn´ı zaˇr´ızen´ı. Existuj´ı dva jednoduch´e postupy jak naprogramovat nekoneˇcnou smyˇcku v jazyce C. Oba jsou uvedeny v n´asleduj´ıc´ım zdrojov´em k´odu.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
47
while( 1 ) { ; } for( ;; ) { ; }
V pˇr´ıpadˇe, ˇze aplikace vyuˇz´ıv´a pˇreruˇsen´ı je ˇcast´e, ˇze nekoneˇcn´a smyˇcka neobsahuje ˇz´adn´e dalˇs´ı pˇr´ıkazy. Veˇsker´e zpracov´an´ı je pak prov´adˇeno jen v r´amci obsluˇzn´ ych funkc´ı jednotliv´ ych pˇreruˇsen´ı. Pˇredeˇsl´ y zdrojov´ y k´od se pak jeˇstˇe zjednoduˇs´ı. while( 1 ) ; for( ;; ) ;
B.4
Specifika pˇ rekladaˇ ce GCC a knihovny avr-libc
Pˇrekladaˇc jazyka C, kter´ y je pouˇzit v laboratoˇri Mikroprocesorov´e techniky, tj. GCC vyuˇz´ıv´a tak´e speci´aln´ı knihovnu s n´azvem avr-libc, kter´a obsahuje nˇekter´e funkce neobsaˇzen´e ve standardu ANCI C. Nejˇcastˇeji pouˇz´ıvan´e funkce jsou uvedeny v tabulce B.5 a lze je vyuˇz´ıt pro zjednoduˇsen´ı programov´an´ı mikrokontrol´er˚ u AVR. Podrobnˇejˇs´ı informace lze nal´ezt v popisu pouˇz´ıvan´e knihovny [11]. Tabulka B.5: Speci´aln´ı funkce pro mikrokontrol´ery AVR Operace Obsluha extern´ıho pˇreruˇsen´ı Testov´an´ı bitu I/O registru
GCC, avr-libc ISR( INT0 vect ) if( bit is set( registr,bit )) if( bit is clear( registr,bit )) Cyklus s testov´an´ım bitu loop until bit is set( registr,bit ) loop until bit is clear( registr,bit ) Vloˇzen´ı instrukce do jazyka C asm( "sei" ) ;
Mikroprocesorov´a technika
C
Znakov´ a sada LCD displeje
Obr´ azek C.1: Znakov´a sada LCD displeje (obr´azek pˇrevzat z [12])
48
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
49
Reference [1] Atmel Corporation. Ofici´aln´ı str´anka firmy Atmel. [online]. 2007 - [cit. 26. z´aˇr´ı 2007]. Dostupn´e na WWW: http://www.atmel.com/ [2] V´an ˇa, V. Mikrokontrol´ery Atmel AVR, popis procesor˚ u a instrukˇcn´ı soubor. Ben, technick´a literatura, Praha, 2003. 335 stran. ISBN 80-7300-083-0. [3] Gadre, V. Programming and Customizing the AVR Microcontroller. McGraw-Hill, New York (USA), 2001. 339 stran. ISBN 0-07-134666-X. [4] Atmel Corporation. STK500. [online]. 2007 - [cit. 15. ˇr´ıjna 2007]. Dostupn´e na WWW: http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2735 [5] Atmel Corporation. 8-bit Microcontroller ATmega16. [online]. 2007 - [cit. 29. listopadu 2007]. Dostupn´e na WWW: http://www.atmel.com/dyn/resources/ prod_documents/doc2466.pdf [6] Atmel Corporation. 8-bit AVR Instruction Set. [online]. 2005 - [cit. 18. ˇr´ıjna 2007]. Dostupn´e na WWW: http://www.atmel.com/dyn/resources/prod_documents/ doc0856.pdf [7] Atmel Corporation. AVRISP mkII In-System Programmer. [online]. 2007 - [cit. 26. z´aˇr´ı 2007]. Dostupn´e na WWW: http://www.atmel.com/dyn/products/tools_ card.asp?tool_id=3808 [8] Open Standards. International standard ISO/IEC 9899:1999. [online]. 2000 - [cit. 9. listopadu 2007]. Dostupn´e na WWW: http://www.open-std.org/jtc1/sc22/ wg14/www/docs/n1124.pdf [9] GNU Project. GCC, the GNU Compiler Collection. [online]. 2007 - [cit. 9. listopadu 2007]. Dostupn´e na WWW: http://gcc.gnu.org/ [10] WinAVR. WinAVR home page. [online]. 2007 - [cit. 9. listopadu 2007]. Dostupn´e na WWW: http://winavr.sourceforge.net/ [11] C library for use with GCC on AVR. AVR Libc Home Page. [online]. 2007 - [cit. 9. listopadu 2007]. Dostupn´e na WWW: http://www.nongnu.org/avr-libc/ [12] Doveda Boys. Znakov´e LCD displeje - procesory PIC. [online]. 2007 - [cit. 6. ˇr´ıjna 2007]. Dostupn´e na WWW: http://www.cmail.cz/doveda/lcd/index.htm [13] Fleury, P. LCD Library for HD44870 based LCD’s. [online]. 2007 - [cit. 6. ˇr´ıjna 2007]. Dostupn´e na WWW: http://homepage.hispeed.ch/peterfleury/avr-software. html [14] Hitachi, Ltd. Ofici´aln´ı str´anky firmy Hitachi. [online]. 2007 - [cit. 6. ˇr´ıjna 2007]. Dostupn´e na WWW: http://www.hitachi.com/
Mikroprocesorov´a technika
50
[15] HW server. Program Terminal pro komunikaci pˇres RS232. [online]. 2007 - [cit. 29. listopadu 2007]. Dostupn´e na WWW: http://rs232.hw.cz/#Terminal