Mikroprocesorov´ a technika a embedded syst´ emy Poˇc´ıtaˇcov´a cviˇcen´ı
doc. Ing. Tom´ aˇ s Fr´ yza, Ph.D. ˇ doc. Ing. Jiˇ r´ı Sebesta, Ph.D. Ing. Zbynˇ ek Fedra, Ph.D. Ing. Petr Zelinka
´ USTAV RADIOELEKTRONIKY
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
1
Obsah 1 V´ yvojov´ e prostˇ red´ı AVR Studio, 1.1 Zad´an´ı . . . . . . . . . . . . . . 1.2 Teoretick´e poznatky . . . . . . 1.3 Pokyny k zad´an´ı . . . . . . . . 1.4 N´amˇety pro dalˇs´ı aplikace . . . 1.5 Shrnut´ı . . . . . . . . . . . . . . 1.6 Kontroln´ı ot´azky . . . . . . . .
aritmetick´ e operace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Ovl´ ad´ an´ı LED diod, vyuˇ zit´ı podprogram˚ u 2.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . 2.2 Teoretick´e poznatky . . . . . . . . . . . . 2.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . 2.4 N´amˇety pro dalˇs´ı aplikace . . . . . . . . . 2.5 Shrnut´ı . . . . . . . . . . . . . . . . . . . . 2.6 Kontroln´ı ot´azky . . . . . . . . . . . . . . 3 Obsluha pˇ reruˇ sen´ı 3.1 Zad´an´ı . . . . . . . . . . . . . . . . . . 3.2 Teoretick´e poznatky . . . . . . . . . . 3.2.1 Extern´ı poˇzadavek na pˇreruˇsen´ı 3.3 Pokyny k zad´an´ı . . . . . . . . . . . . 3.4 N´amˇety pro dalˇs´ı aplikace . . . . . . . 3.5 Shrnut´ı . . . . . . . . . . . . . . . . . . 3.6 Kontroln´ı ot´azky . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
7 7 7 8 9 9 9
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
11 11 11 12 14 14 14
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
15 15 15 16 17 18 18 18
4 Intern´ı ˇ casovaˇ c/ˇ c´ıtaˇ c, generov´ an´ı PWM sign´ alu 4.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Teoretick´e poznatky . . . . . . . . . . . . . . . . 4.2.1 Pˇreruˇsen´ı od ˇcasovaˇce/ˇc´ıtaˇce . . . . . . . . 4.2.2 Pulznˇe ˇs´ıˇrkov´a modulace . . . . . . . . . . 4.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . . . . . 4.4 N´amˇety pro dalˇs´ı aplikace . . . . . . . . . . . . . 4.5 Shrnut´ı . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Kontroln´ı ot´azky . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
19 19 19 19 20 21 22 22 23
. . . . . . . .
24 24 24 24 25 25 28 29 29
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
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 N´amˇety pro dalˇs´ı aplikace . . . . . . . . . . . 5.5 Shrnut´ı . . . . . . . . . . . . . . . . . . . . . . 5.6 Kontroln´ı ot´azky . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
2
ˇ ızen´ı komunikace s displejem 6 R´ 6.1 Zad´an´ı . . . . . . . . . . . . . 6.2 Teoretick´e poznatky . . . . . 6.3 Pokyny k zad´an´ı . . . . . . . 6.4 N´amˇety pro dalˇs´ı aplikace . . 6.5 Shrnut´ı . . . . . . . . . . . . . 6.6 Kontroln´ı ot´azky . . . . . . .
Mikroprocesorov´a technika a embedded syst´emy
. . . . . .
. . . . . .
. . . . . .
. . . . . .
7 Zpracov´ an´ı analogov´ ych sign´ al˚ u 7.1 Zad´an´ı . . . . . . . . . . . . . . . . . 7.2 Teoretick´e poznatky . . . . . . . . . 7.2.1 Analogovˇe digit´aln´ı pˇrevodn´ık 7.2.2 Z´asuvn´ y audio modul . . . . . 7.3 Pokyny k zad´an´ı . . . . . . . . . . . 7.4 N´amˇety pro dalˇs´ı aplikace . . . . . . 7.5 Shrnut´ı . . . . . . . . . . . . . . . . . 7.6 Kontroln´ı ot´azky . . . . . . . . . . . 8 S´ eriov´ y pˇ renos dat 8.1 Zad´an´ı . . . . . . . . . . . . . . 8.2 Teoretick´e poznatky . . . . . . 8.2.1 Asynchronn´ı komunikace 8.2.2 Sbˇernice I2C . . . . . . . 8.3 Pokyny k zad´an´ı . . . . . . . . 8.4 N´amˇety pro dalˇs´ı aplikace . . . 8.5 Shrnut´ı . . . . . . . . . . . . . . 8.6 Kontroln´ı ot´azky . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
30 30 30 32 34 35 35
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
36 36 36 36 37 38 39 39 39
. . . . . . . . UART . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
40 40 40 40 42 43 44 45 45
. . . . . .
46 46 46 47 51 51 52
. . . . . .
53 53 53 53 55 56 56
9 V´ yvojov´ e prostˇ red´ı Code Composer 9.1 Zad´an´ı . . . . . . . . . . . . . . . . 9.2 Teoretick´e poznatky . . . . . . . . 9.3 Pokyny k zad´an´ı . . . . . . . . . . 9.4 N´amˇety pro dalˇs´ı aplikace . . . . . 9.5 Shrnut´ı . . . . . . . . . . . . . . . . 9.6 Kontroln´ı ot´azky . . . . . . . . . .
Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 Filtrace sign´ al˚ u, implementace FIR filtru 10.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . 10.2 Teoretick´e poznatky . . . . . . . . . . . . 10.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . 10.4 N´amˇety pro dalˇs´ı aplikace . . . . . . . . . 10.5 Shrnut´ı . . . . . . . . . . . . . . . . . . . . 10.6 Kontroln´ı ot´azky . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
11 Diskr´ etn´ı Fourierova transformace 59 11.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 11.2 Teoretick´e poznatky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 11.3 Pokyny k zad´an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
3
11.4 N´amˇety pro dalˇs´ı aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 11.5 Shrnut´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 11.6 Kontroln´ı ot´azky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 12 Kombinace programov´ an´ı v jazyce 12.1 Zad´an´ı . . . . . . . . . . . . . . . 12.2 Teoretick´e poznatky . . . . . . . 12.3 Pokyny k zad´an´ı . . . . . . . . . 12.4 N´amˇety pro dalˇs´ı aplikace . . . . 12.5 Shrnut´ı . . . . . . . . . . . . . . . 12.6 Kontroln´ı ot´azky . . . . . . . . .
Ca . . . . . . . . . . . . . . . . . .
v . . . . . .
LJSA . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Literatura
64 64 64 64 67 67 67 69
A Manu´ al v´ yvojov´ eho prostˇ red´ı AVR Studio 72 A.1 Nov´ y projekt a simul´ator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 A.2 Programov´an´ı c´ılov´eho mikrokontrol´eru pomoc´ı ISP . . . . . . . . . . . . . 74 B Z´ akladn´ı popis jazyka C B.1 Promˇenn´e a operandy . . . . . . . . B.2 Podm´ınˇen´ y skok . . . . . . . . . . . . B.3 Cyklus v jazyce C . . . . . . . . . . . B.4 Specifika pˇrekladaˇce GCC a knihovny
. . . . . . . . . AVR
. . . . . . . . . Libc
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
76 76 78 79 80
C V´ yvojov´ a deska ATmega16
82
D Znakov´ a sada LCD displeje
86
4
Mikroprocesorov´a technika a embedded syst´emy
Seznam obr´ azk˚ u 2.1 4.1 4.2 5.1 5.2 6.1 6.2 6.3 7.1 8.1 8.2 8.3 9.1 9.2 10.1 10.2 11.1 11.2 A.1 A.2 A.3 A.4 A.5 B.1 C.1 D.1
Pˇripojen´ı LED diod na v´ yvojov´e desce STK500 . . . . . . . . . . . Princip tvorby PWM sign´alu . . . . . . . . . . . . . . . . . . . . . . ˇ Casov´ y diagram generov´an´ı PWM sign´alu . . . . . . . . . . . . . . V´ ybˇer program´atoru AVRISP mkII . . . . . . . . . . . . . . . . . . Aplikace AVR Wizard pro nastaven´ı ˇr´ıdic´ıch registr˚ u AVR . . . . . Pˇr´ıklad zapojen´ı 7segmentov´eho displeje . . . . . . . . . . . . . . . Zapojen´ı LCD displeje na v´ yvojov´e desce ATmega16 . . . . . . . . Novˇe definovan´e znaky pro LCD displej . . . . . . . . . . . . . . . . Obvodov´e zapojen´ı z´asuvn´eho audio modulu . . . . . . . . . . . . . Struktura asynchronn´ıho r´amce . . . . . . . . . . . . . . . . . . . . ˇ Casov´ e pr˚ ubˇehy na sbˇernici I2C . . . . . . . . . . . . . . . . . . . . Freewarov´a aplikace Terminal pro ovl´ad´an´ı s´eriov´eho portu poˇc´ıtaˇce V´ ybˇer simul´atoru sign´alov´eho procesoru TMS320C6713 . . . . . . . V´ yvojov´e prostˇred´ı Code Composer Studio firmy Texas Instruments Grafick´ y n´astroj fdatool v prostˇred´ı Matlab pro n´avrh filtr˚ u. . . . Aplikace Soundcard Scope pro generov´an´ı a anal´ yzu sign´al˚ u . . . . V´ ypoˇcet 8bodov´e FFT s vyuˇzit´ım DIF (Decimation in Frequency) . Intern´ı n´astroj CCS pro hodnocen´ı poˇcetn´ı n´aroˇcnosti algoritm˚ u . . Vytvoˇren´ı nov´eho projektu v prostˇred´ı AVR Studio . . . . . . . . . V´ ybˇer lad´ıc´ıho n´astroje a c´ılov´eho mikrokontrol´eru . . . . . . . . . V´ yvojov´e prostˇred´ı AVR Studio s vytvoˇren´ ym projektem . . . . . . Lad´ıc´ı prostˇred´ı AVR Studia . . . . . . . . . . . . . . . . . . . . . . Dialogov´e okno pro programov´an´ı mikrokontrol´eru ATmega16 . . . Anatomie programu v jazyce C . . . . . . . . . . . . . . . . . . . . Zapojen´ı v´ yvojov´e desky Development Board ATmega16 . . . . . . Znakov´a sada LCD displeje . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
12 21 21 27 28 31 31 35 37 41 42 43 47 50 55 56 60 63 72 73 73 74 75 76 82 86
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
5
Seznam tabulek 3.1 3.2 4.1 5.1 6.1 6.2 9.1 12.1 B.1 B.2 B.3 B.4 C.1
Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 . . . . . . Zp˚ usob spouˇstˇen´ı extern´ıch pˇreruˇsen´ı INTn (registr MCUCR) . . . Nastaven´ı pˇreddˇeliˇcky ˇcasovaˇce/ˇc´ıtaˇce 0 (registr TCCR0) . . . . . . Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 v jazyce C Vybran´e pˇr´ıkazy pro komunikaci s LCD displejem . . . . . . . . . . Soupis vybran´ ych funkc´ı z knihovny pro LCD . . . . . . . . . . . . Princip vyuˇzit´ı kruhov´e pamˇeti . . . . . . . . . . . . . . . . . . . . Vybran´e instrukce sign´alov´eho procesoru TMS320C6713 . . . . . . Z´akladn´ı typy a rozsahy hodnot promˇenn´ ych v jazyce C . . . . . . . Z´akladn´ı aritmetick´e operace v jazyce C . . . . . . . . . . . . . . . Bitov´e a logick´e operace v jazyce C . . . . . . . . . . . . . . . . . . Relaˇcn´ı operandy v jazyce C . . . . . . . . . . . . . . . . . . . . . . Seznam souˇca´stek v´ yvojov´e desky Development Board ATmega16 .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
16 17 20 26 32 33 51 65 77 78 78 79 83
6
Mikroprocesorov´a technika a embedded syst´emy
Seznam zdrojov´ ych k´ od˚ u 1.1 Jednoduch´a aplikace pro mikrokontrol´er AVR . . . . . . . 1.2 Pˇr´ıklad zdrojov´eho k´odu pro AVR . . . . . . . . . . . . . . 2.1 Aplikace s LED diodami pro mikrokontrol´er AVR . . . . . 2.2 Definice z´asobn´ıku . . . . . . . . . . . . . . . . . . . . . . 3.1 Kostra aplikace vyuˇz´ıvaj´ıc´ı extern´ı zdroj pˇreruˇsen´ı . . . . . 5.1 Kostra aplikace vyuˇz´ıvaj´ıc´ı extern´ı zdroj pˇreruˇsen´ı v jazyce ´ 5.2 Usek k´odu v jazyce C . . . . . . . . . . . . . . . . . . . . . 6.1 Kostra aplikace pro ovl´ad´an´ı 7segmentov´eho displeje . . . . 6.2 Kombinace v´ ypisu ˇretˇezce a hodnoty na znakov´ y displej . . ˇ 8.1 R´ızen´ı komunikace prostˇrednictv´ım s´eriov´e sbˇernice I2C . . 9.1 V´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u pro TMS320C6713 . . 9.2 Realizace kruhov´e pamˇeti . . . . . . . . . . . . . . . . . . 10.1 Realizace ˇc´ıslicov´eho filtru typu FIR . . . . . . . . . . . . 10.2 Ovl´ad´an´ı LED diod a pˇrep´ınaˇc˚ u . . . . . . . . . . . . . . . 10.3 Funkce pro ovl´ad´an´ı LED diod a pˇrep´ınaˇc˚ u. . . . . . . . . 11.1 Implementace DFT na sign´alov´ y procesor TMS320C6713 . 12.1 V´ ypoˇcet skal´arn´ıho souˇcinu v LJSA . . . . . . . . . . . . . 12.2 Implementace FFT na sign´alov´ y procesor TMS320C6713 . B.1 Hlavn´ı funkce aplikace v jazyce C . . . . . . . . . . . . . . B.2 Deklarace a plnˇen´ı promˇenn´ ych v jazyce C . . . . . . . . . B.3 Z´akladn´ı vˇetven´ı programu . . . . . . . . . . . . . . . . . . B.4 Vˇetven´ı programu pomoc´ı switch a case . . . . . . . . . . B.5 Cyklus pomoc´ı for . . . . . . . . . . . . . . . . . . . . . . B.6 Cyklus pomoc´ı while . . . . . . . . . . . . . . . . . . . . . B.7 Realizace nekoneˇcn´e smyˇcky . . . . . . . . . . . . . . . . . B.8 Realizace nekoneˇcn´e smyˇcky v aplikaci s pˇreruˇsen´ım . . . . B.9 Nejpouˇz´ıvanˇejˇs´ı funkce z knihovny AVR Libc . . . . . . . .
. . . . . . . . . . C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
8 9 13 14 17 27 29 33 34 45 51 52 57 58 58 61 65 68 77 77 78 79 79 80 80 80 81
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
1
7
V´ yvojov´ e prostˇ red´ı AVR Studio, aritmetick´ e operace
Test pˇ redchoz´ıch znalost´ı 1. Jak´e jsou hlavn´ı rozd´ıly von Neumannovy a Harvardsk´e architektury. 2. Jak´ ym zp˚ usobem lze pˇrev´adˇet hodnoty z bin´arn´ı soustavy 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, souˇcinu a rozd´ılu dvou hodnot?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je osvojen´ı si pr´ace s v´ yvojov´ ym prostˇred´ım AVR Studio. Toto prostˇred´ı je urˇcen´e pro psan´ı a ladˇen´ı aplikac´ı, stejnˇe jako pro programov´an´ı mikrokontrol´er˚ u typu AVR. Souˇcasnˇe m´a cviˇcen´ı za c´ıl umoˇznit student˚ um proniknout do zp˚ usob˚ u v´ yvoje a testov´an´ı jednoduch´ ych aplikac´ı, urˇcen´ ych pro 8bitov´ y 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´ery AVR. Vytvoˇrte aplikaci pro v´ ypoˇcet skal´arn´ıho souˇcinu dvou ~ vektor˚ u s = ~a · b v jazyce symbolick´ ych adres (JSA). 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 s poˇc´ıtaˇcov´ ym pˇrekladem. 4. Vytvoˇrte program pro realizaci souˇcinu hodnot 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 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 nejˇcastˇeji 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 pro uˇzivatele; napˇr.: hodnoty operand˚ u na 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 poloviny sedmdes´at´ ych let 20. stolet´ı, od kdy se v´ yvoj v mikroprocesorov´e technice rozdˇelil na dva proudy. 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
8
Mikroprocesorov´a technika a embedded syst´emy
potˇrebn´ ych obvod˚ u do jedin´e souˇca´stky. O mikrokontrol´erech (MCU – Microcomputer Unit) 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 (souˇc´astce). 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 [Van03]. 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 (HCS08, 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 j´adra MCU, ˇcasovaˇce/ˇc´ıtaˇce, A/D pˇrevodn´ıky a dalˇs´ı (podrobnˇeji o I/O registrech v n´asleduj´ıc´ıch poˇc´ıtaˇcov´ ych cviˇcen´ıch). ´ Aplikace pro MCU lze vyv´ıjet v jazyce symbolick´ ych adres nebo v jazyce C. Uvodn´ ı cviˇcen´ı budou zamˇeˇrena na programov´an´ı v jazyce symbolick´ ych adres. Jednoduch´a aplikace pro AVR je zobrazena ve v´ ypise 1.1. Zdrojov´ y k´ od 1.1: Jednoduch´a aplikace pro mikrokontrol´er AVR. 1
. include <m16def . inc>
; d e f i n i ˇc n´ı s o u b o r m i k r o k o n t r o l´e r u ATmega16
2
LDI LDI ADD
3 4 5
R16 , 0 xA0 R17 , 40 R16 , R17
; n a p l nˇe n´ı r e g i s t r u R16 hodnotou 160 ; R17 = 40 ; s o uˇc e t hodnot r e g i s t r˚ u : R16 = R16 + R17
6 7 8
loop : RJMP loop
1.3
; u k o nˇc e n´ı a p l i k a c e ; nekoneˇc n´a smyˇcka
Pokyny k zad´ an´ı
Bod 1. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte zdrojov´ y k´od v JSA pro mikrokontrol´er ATmega16, kter´ y umoˇzn´ı naplnˇen´ı dvou ˇctveˇric 8bitov´ ych registr˚ u – kaˇzd´a ˇctveˇrice ~ bude reprezentovat prvky vstupn´ıch vektor˚ u ~a = (a3 , a2 , a1 , a0 ) a b = (b3 , b2 , b1 , b0 ). Pro v´ ypoˇcet skal´arn´ıho souˇcinu vyuˇzijte instrukce mikrokontrol´eru ATmega16 pro aritmetick´e operace bez pˇrenosu a z d˚ uvodu zjednoduˇsen´ı neuvaˇzujte moˇznost pˇrekroˇcen´ı maxim´aln´ıho rozsahu hodnot pro 8bitov´ y v´ ysledek. Hodnoty prvk˚ u vektor˚ u zadejte v des´ıtkov´e, hexadecim´aln´ı i v bin´arn´ı podobˇe a uloˇzte je pˇr´ımo do zvolen´ ych pracovn´ıch registr˚ u! Zdrojov´ y k´od pˇreloˇzte do strojov´eho jazyka. Struˇcn´ y manu´al pro pr´aci s prostˇred´ım AVR Studio naleznete v pˇr´ıloze A. Bod 2. Korektn´ı funkci programu vyzkouˇsejte v integrovan´em simul´atoru. Pˇrepnˇete se do lad´ıc´ıho reˇzimu a krokov´an´ım programu (napˇr. kl´avesou F11 ) ovˇeˇrte spr´avnou funkci vaˇs´ı aplikace. Bod 3. Vyuˇcuj´ıc´ı v´am zad´a jednu instrukci z vaˇseho programu a pomoc´ı manu´alu instrukˇcn´ı sady mikrokontrol´er˚ u AVR [Atm02] ji ruˇcnˇe pˇreloˇzte do strojov´eho k´odu.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
9
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 naprogramujte aplikaci, kter´a bude realizovat souˇcin hodnot 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 t´ım k obt´ıˇzn´e kontrole spr´avnosti v´ ysledk˚ u. Pro kaˇzdou z komplexn´ıch ˇca´st´ı 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ˇcin dvou komplexn´ıch ˇc´ısel a a b definov´an rovnic´ı a · b = <{a} · <{b} − ={a} · ={b} + (<{a} · ={b} + ={a} · <{b}) ,
(1.1)
kde <{a} reprezentuje re´alnou ˇca´st a ={a} imagin´arn´ı ˇca´st 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ˇcinu komplexn´ıch ˇc´ısel? Jak velkou ˇc´ast pamˇeti program zab´ır´a? Kolik pracovn´ıch registr˚ u vyuˇz´ıv´ate celkem?
1.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Naprogramujte algoritmy pro vz´ajemn´ y pˇrevod mezi ˇc´ıseln´ ymi soustavami, pouˇz´ıvan´ ymi v mikroprocesorov´e technice.
1.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı bylo koncipov´ano jako u ´vod do v´ yvoje aplikac´ı pro mikrokontrol´er ATmega16. Jeho 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´ı intern´ıho simul´atoru v prostˇred´ı AVR Studio. Hlavn´ı d˚ uraz byl kladen na uˇzit´ı instrukc´ı aritmetick´ ych operac´ı a operac´ı pro pˇresun dat.
1.6
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 i s´emanticky korektn´ı? Doplˇ nte koment´aˇre k jednotliv´ym instrukc´ım.
Zdrojov´ y k´ od 1.2: Pˇr´ıklad zdrojov´eho k´odu pro AVR. 1 2 3 4 5
math : LDI LDI ADD SUB
R15 , R17 , R16 , R16 ,
1F 25 R15 R17
; ; ; ; ;
10
Mikroprocesorov´a technika a embedded syst´emy
Ot´ azka 1.3 Jak´a jsou pravidla pro psan´ı program´atorsky-pˇrehledn´ych zdrojov´ych k´od˚ u? Ot´ azka 1.4 Jak´ym zp˚ usobem se korektnˇe ukonˇc´ı program u mikrokontrol´er˚ u AVR? Ot´ azka 1.5 Do jak´ych registr˚ u se ukl´ad´a v´ysledek souˇctu a souˇcinu?.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
2
11
Ovl´ ad´ an´ı LED diod, vyuˇ zit´ı podprogram˚ u
Test pˇ redchoz´ıch znalost´ı 1. Jak lze u mikrokontrol´eru ATmega16 definovat smˇer komunikace jednotliv´ ych pin˚ u? 2. 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? 3. Jak´ ymi instrukcemi se vol´a podprogram a jak je zajiˇstˇen bezpeˇcn´ y n´avrat z nˇej? 4. Jakou funkci m´a programov´ y ˇc´ıtaˇc (Program Counter), ukazatel na z´asobn´ık (Stack Pointer) a z´asobn´ık (Stack)?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je vyuˇzit´ı mikrokontrol´er˚ u k ˇr´ızen´ı jednoduch´ ych proces˚ u prostˇrednictv´ım paraleln´ıch I/O port˚ u. D´ale je c´ılem cviˇcen´ı realizace podm´ınˇen´ ych skok˚ u a vol´an´ı podprogram˚ u v jazyce symbolick´ ych adres.
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 portu mikrokontrol´eru. 2. Vytvoˇrte 8bitov´ y bin´arn´ı ˇc´ıtaˇc a jeho hodnotu zobrazte pomoc´ı LED diod. Realizujte zpoˇzdˇen´ı chodu ˇc´ıtaˇce pomoc´ı podprogramu. 3. Ovˇeˇrte funkci z´asobn´ıku pˇri vol´an´ı podprogramu.
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. Tyto periferie jsou ve sch´ematick´em znaku definov´any popisem pinu v z´avorce; napˇr. PA0 (ADC0) oznaˇcuje nejniˇzˇs´ı pin na portu A a souˇcasnˇe nejniˇzˇs´ı kan´al intern´ıho A/D pˇrevodn´ıku. T´ımto zp˚ usobem jsou ˇreˇseny I/O obvody vˇsech mikrokontrol´er˚ u. 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): 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.
12
Mikroprocesorov´a technika a embedded syst´emy
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 vˇsak budou prozat´ım postaˇcovat v´ yˇse uveden´e registry. Pro ˇcasto se opakuj´ıc´ı u ´seky 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´ı ˇca´st 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. Po vykon´an´ı cel´eho podprogramu, ˇr´ıdic´ı jednotka zajist´ı skok na m´ısto, odkud byl podprogram vol´an – n´avrat z podprogramu. Skoky a n´avraty z podprogram˚ u 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 ˇca´st datov´e 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´ıˇsete konfiguraˇcn´ı hodnotu tak, aby pˇr´ısluˇsn´e piny dan´e I/O br´any, k nimˇz jsou LED diody pˇripojeny, 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 (viz napˇr. obr´azek 2.1).
Obr´ azek 2.1: Pˇripojen´ı LED diod na v´ yvojov´e desce STK500 [Atm06]. 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´a 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´ı).
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
13
Pro tuto poˇc´ıtaˇcovou u ´lohu bude vyuˇzita v´ yvojov´a deska STK500 firmy Atmel, pˇripojen´a k poˇc´ıtaˇci prostˇrednictv´ım s´eriov´eho rozhran´ı RS-232. Zapojen´ı desky a jej´ı popis je uveden v [Atm03]. 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 pomoc´ı propojek pˇripojovat r˚ uzn´e perifern´ı obvody. S ohledem na zad´an´ı je port B pˇripojen k sadˇe LED diod. Propojen´ı nemˇen ˇte. Ned´ılnou ˇca´st´ı 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 nutn´e 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 pˇr´ıloze A.2 je 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. 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 mikrokontrol´eru ATmega16. Zvolte si, kter´e LED rozsv´ıt´ıte. M˚ uˇzete vyuˇz´ıt kostry zdrojov´eho k´odu 2.1. Zdrojov´ y k´ od 2.1: Aplikace s LED diodami pro mikrokontrol´er AVR. 1
. include <m16def . inc>
; d e f i n i ˇc n´ı s o u b o r m i k r o k o n t r o l´e r u ATmega16
2 3 4 5 6
LDI OUT LDI OUT
... DDR ? . . . ... PORT ? . . .
; ; ; ;
d e f i n i c e vy ´ s t u p n´ıh o p o r t u p o u ˇz i j t e spr´a vn y ´ n´a zev smˇe rov´e ho r e g i s t r u r o z s v´ı c e n´ı z v o l e n y ´ c h LED d i o d p o u ˇz i j t e spr´a vn y ´ n´a zev v y ´ s t u p n´ıh o r e g i s t r u
7 8 9
loop : RJMP loop
; nekoneˇc n´a smyˇcka ; skok na n ´a v ˇe ˇs t´ı l o o p
Bod 2. Bin´arn´ı ˇc´ıtaˇc vytvoˇrte pomoc´ı nekoneˇcn´e smyˇcky, ve kter´e budete inkrementovat obsah 8bitov´e promˇenn´e, tu odes´ılejte na v´ ystupn´ı port a t´ım zobrazte 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 s vysok´ ym poˇctem opakov´an´ı. Tuto operaci vloˇzte do podprogramu. Kolik opakov´an´ı obsahuje vaˇse zpoˇzd’ovac´ı smyˇcka? Vypoˇctˇete dobu trv´an´ı podprogramu. Teorie vol´an´ı a n´avrat˚ u z podprogram˚ u byla probr´ana na pˇredn´aˇsce. Pˇripomeˇ nme jen, ˇze ke spr´avn´e funkci podprogramu mus´ı b´ yt ˇca´st datov´e pamˇeti vyhrazena pro z´asobn´ık. Definici z´asobn´ıku je moˇzn´e naprogramovat dle zdrojov´eho k´odu 2.2. Bod 3. Aplikaci z pˇredchoz´ıho bodu spust’te v simul´atoru a pˇri krokov´an´ı si poznaˇcte hodnoty ukazatele na z´asobn´ık (SP), programov´eho ˇc´ıtaˇce (PC) a n´avratovou adresu pˇred prvn´ım vol´an´ım podprogramu. Po skoku do podprogramu pak zjistˇete zmˇeny PC a SP. Jak´a data jsou uloˇzena v z´asobn´ıku? Obsah pamˇeti je moˇzn´e zobrazit volbou View→Memory.
14
Mikroprocesorov´a technika a embedded syst´emy
Zdrojov´ y k´ od 2.2: Definice z´asobn´ıku. 1 2 3 4 5
stack_definition : LDI R16 , LOW ( RAMEND ) OUT SPL , R16 LDI R16 , HIGH ( RAMEND ) OUT SPH , R16
2.4
; ; ; ; ;
d e f i n i c e z ´a s o b n´ık u na konec pamˇe ti SRAM do R16 u l oˇz n i ˇz ˇs´ı byte p o s l e d n´ı a d r e s y SRAM SPL ( n i ˇz ˇs´ı byte Stack P o i n t e r u ) = R16 R16 = v yˇs ˇs´ı byte p o s l e d n´ı a d r e s y SRAM SPH ( v yˇs ˇs´ı byte Stack P o i n t e r u ) = R16
N´ amˇ ety pro dalˇ s´ı aplikace
• Naplnˇen´ı dat do SRAM pomoc´ı direktiv. Pr´ace s tˇemito daty v hlavn´ım programu – napˇr. modifikace funkc´ı z poˇc´ıtaˇcov´eho cviˇcen´ı 1. • Vytvoˇren´ı podprogramu pro v´ ypoˇcet celoˇc´ıseln´e odmocniny s pouˇzit´ım bitov´ ych posun˚ u. • Ovˇeˇrte rozd´ıly mezi vol´an´ım podprogramu a makrem. Vytvoˇrte nov´ y projekt v JSA. Aplikace bude obsahovat hlavn´ı funkci, makro a podprogram. Makro i podprogram necht’ realizuj´ı souˇcet dvou komplexn´ıch ˇc´ısel. V hlavn´ı ˇc´asti aplikace pak definujte z´asobn´ık a postupnˇe spust’te/volejte 5× vytvoˇren´e makro a podprogram. Aplikaci otestujte v simul´atoru. Jak velkou ˇc´ast programov´e pamˇeti zab´ıraj´ı makra a jakou podprogram? Kolik cykl˚ u trv´a v´ ykon vˇsech maker a kolik cykl˚ u trv´a v´ ykon vˇsech podprogram˚ u? Pro vˇetˇs´ı pˇrehlednost je moˇzn´e v k´odu vyuˇz´ıt direktivu specifikuj´ıc´ı adresu, kde m´a b´ yt podprogram uloˇzen, napˇr. .org 0x0100 pro adresu 0x0100.
2.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı 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´ı. Rovnˇeˇz pˇredstavuje tvorbu a programov´an´ı aplikac´ı pro re´aln´e mikrokontrol´ery, vˇcetnˇe pouˇzit´ı podprogram˚ u a maker pro efektivnˇejˇs´ı z´apis zdrojov´eho k´odu.
2.6
Kontroln´ı ot´ azky
Ot´ azka 2.1 Jmenujte alespoˇ n pˇet direktiv pˇrekladaˇce a k ˇcemu konkr´etnˇe slouˇz´ı? Ot´ azka 2.2 Jak´e znaˇcky se pouˇz´ıvaj´ı pro pˇrehledn´y z´apis funkce programu prostˇrednictv´ım v´yvojov´ych diagram˚ u (zah´ajen´ı/ukonˇcen´ı, pˇriˇrazen´ı, cyklus, podm´ınka, vol´an´ı podprogramu)? Nakreslete v´yvojov´y diagram aplikace z bodu 2. Ot´ azka 2.3 Popiˇste pr˚ ubˇeh ukl´ad´an´ı n´avratov´e adresy pˇri vol´an´ı podprogramu.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
3
15
Obsluha pˇ reruˇ sen´ı
Test pˇ redchoz´ıch znalost´ı 1. 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? Jak´ y je rozd´ıl mezi I/O registry a pracovn´ımi registry? 2. Jak´e jsou rozd´ıly mezi podprogramem a obsluhou pˇreruˇsen´ı? 3. Jmenujte nutn´e podm´ınky, kter´e mus´ı b´ yt splnˇeny k zah´ajen´ı obsluhy libovoln´eho pˇreruˇsen´ı.
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je osvojen´ı si pr´ace s pˇreruˇsen´ım mikrokontrol´eru v jazyce symbolick´ ych adres. Konkr´etnˇe bude vyuˇzit extern´ı poˇzadavek na pˇreruˇsen´ı od tlaˇc´ıtka.
3.1
Zad´ an´ı
1. Seznamte se s hled´an´ım informac´ı v anglick´em katalogov´em listˇe 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. Proved’te oˇsetˇren´ı stisku tlaˇc´ıtka.
3.2
Teoretick´ e poznatky
´ Uvodn´ ı ˇca´st programov´e pamˇeti je u mikrokontrol´er˚ u zpravidla vyhrazena 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ˇca´tek 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´ezt v tabulce 3.1. Typ pˇreruˇsen´ı, kter´ y 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 extern´ım sign´alem (zpravidla n´ızkou u ´rovn´ı). 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 programy lze realizovat napˇr´ıklad instrukc´ı RJMP, jak naznaˇcuje zdrojov´ y k´od 3.1. Veˇsker´a pˇreruˇsen´ı je nutn´e pˇredem 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 jednoho pˇreruˇsen´ı ostatn´ı pˇreruˇsen´ı obecnˇe zak´az´ana. Obsluhu pˇreruˇsen´ı je nutn´e ukonˇcit pˇr´ıkazem
16
Mikroprocesorov´a technika a embedded syst´emy
Tabulka 3.1: Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16. ˇ C.
Adresa Zdroj pˇ reruˇ sen´ı
Popis pˇ reruˇ sen´ı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x000C 0x000E 0x0010 0x0012 0x0014 0x0016 0x0018 0x001A 0x001C 0x001E 0x0020 0x0022 0x0024 0x0026 0x0028
Extern´ı reset, pˇripojen´ı nap´ajen´ı, . . . Extern´ı poˇzadavek na pˇreruˇsen´ı 0. Extern´ı poˇzadavek na pˇreruˇsen´ı 1. ˇ Casovaˇ c/ˇc´ıtaˇc 2 – shoda komparace. ˇ Casovaˇ c/ˇc´ıtaˇc 2 – pˇreteˇcen´ı. ˇ Casovaˇc/ˇc´ıtaˇc 1 – zachycen´ı. ˇ Casovaˇ c/ˇc´ıtaˇc 1 – shoda s kompar´atorem A. ˇ Casovaˇc/ˇc´ıtaˇc 1 – shoda s kompar´atorem B. ˇ Casovaˇ c/ˇc´ıtaˇc 1 – pˇreteˇcen´ı. ˇ Casovaˇ c/ˇc´ıtaˇc 0 – pˇreteˇcen´ı. Dokonˇcen´ı s´eriov´eho pˇrenosu SPI. USART – kompletn´ı pˇr´ıjem dat. USART – pr´azdn´ y datov´ y registr. USART – kompletn´ı vysl´an´ı dat. ADC – dokonˇcen´ı A/D pˇrevodu. EEPROM – komunikace pˇripravena. Zmˇena v´ ystupu analogov´eho kompar´atoru. Ud´alost na s´eriov´e sbˇernici I2C. Extern´ı poˇzadavek na pˇreruˇsen´ı 2. ˇ Casovaˇ c/ˇc´ıtaˇc 0 – shoda komparace. Uloˇzen´ı do programov´e pamˇeti pˇripraveno.
RESET INT0 INT1 TIMER2 COMP TIMER2 OVF TIMER1 CAPT TIMER1 COMPA TIMER1 COMPB TIMER1 OVF TIMER0 OVF SPI, STC USART, RXC USART, UDRE USART, TXC ADC EE RDY ANA COMP TWI INT2 TIMER0 COMP SPM RDY
RETI (n´avrat na m´ısto v programu, kdy pˇriˇsel poˇzadavek na pˇreruˇsen´ı), 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 ˇca´st pamˇeti RAM, kter´a pˇredstavuje z´asobn´ık, tj. na zaˇca´tku ˇ 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. 3.2.1
Extern´ı poˇ zadavek na pˇ reruˇ sen´ı
Extern´ı zdroje pˇreruˇsen´ı jsou oznaˇcov´any jako INT0, INT1 a INT2 a mohou b´ yt pˇrivedeny na odpov´ıdaj´ıc´ı trojici konkr´etn´ıch pin˚ u mikrokontrol´eru ATmega16. 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 z´akaz dan´eho pˇreruˇsen´ı. Pro vˇsechny tˇri zdroje extern´ıho pˇreruˇsen´ı se tyto maskovac´ı bity nach´az´ı v kontroln´ım registru GICR (General Interrupt Control Register). Bit INT1 povoluje pˇreruˇsen´ı od zdroje INT1, atd. Pro povolen´ı dan´eho pˇreruˇsen´ı je tedy tˇreba nastavit odpov´ıdaj´ıc´ı maskovac´ı bit (na hodnotu 1). D´ale je nutn´e specifikovat, za jak´ ych podm´ınek se bude extern´ı pˇreruˇsen´ı
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
17
Zdrojov´ y k´ od 3.1: Kostra aplikace vyuˇz´ıvaj´ıc´ı extern´ı zdroj pˇreruˇsen´ı. 1 2 3 4 5 6
. include <m16def . inc> . cseg . org 0 x0000 RJMP reset . org 0 x0002 RJMP citac
; ; ; ; ; ;
d e f i n i ˇc n´ı s o u b o r m i k r o k o n t r o l´e r u ATmega16 pamˇet’ ov´ y segment F l a s h u l oˇz od a d r e s y 0 x0000 s k oˇc na n ´a v ˇe ˇs t´ı r e s e t a d r e s a e x t e r n´ıh o pˇr e r uˇs e n´ı INT0 s k oˇc na n ´a v ˇe ˇs t´ı c i t a c
. org 0 x002A reset : ... ... SEI
; u l oˇz od a d r e s y 0x002A ; d e f i n i c e z ´a s o b n´ık u ; n a p l nˇe n´ı I /O r e g i s t r˚ u ; g l o b ´a l n´ı p o v o l e n´ı vˇs e c h pˇr e r uˇs e n´ı
loop : RJMP loop
; nekoneˇc n´a smyˇcka ; skok na n ´a v ˇe ˇs t´ı l o o p
citac : ... RETI
; z aˇc ´ a t e k e x t e r n´ıh o pˇr e r uˇs e n´ı INT0 ; k´ o d o b s l u h y e x t e r n´ıh o pˇr e r uˇs e n´ı INT0 ; u k o nˇc e n´ı o b s l u h y pˇr e r uˇs e n´ı
7 8 9 10 11 12 13 14 15 16 17 18 19
generovat. To lze zajistit pomoc´ı bit˚ u ISCn1 a ISCn0 (”n” je oznaˇcen´ı zdroje pˇreruˇsen´ı, tj. 0, 1, nebo 2) v registru MCUCR (MCU Control Register). Chceme-li napˇr. generovat extern´ı pˇreruˇsen´ı INT1 s kaˇzdou vzestupnou hranou, je nutn´e nastavit bity ISC11 a ISC10 v tomto registru. V´ yznam jednotliv´ ych nastaven´ı je zn´azornˇen v katalogov´em listu mikrokontrol´eru, ˇci v tabulce 3.2. Tabulka 3.2: Zp˚ usob spouˇstˇen´ı extern´ıch poˇzadavk˚ u na pˇreruˇsen´ı INT0 a INT1 prostˇrednictv´ım kontroln´ıho registru MCUCR. ISCn1:0 Popis funkce 0b00 0b01 0b10 0b11
3.3
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.
Pokyny k zad´ an´ı
Bod 1. V katalogov´em listu k mikrokontrol´eru ATmega16 [Atm16] 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. Vyhledejte si v´ yznam jednotliv´ ych bit˚ u tˇechto registr˚ u a pˇripravte si bitov´a slova, kter´ ymi napln´ıte tyto registry. Ud´alost, kter´a bude pˇreruˇsen´ı spouˇstˇet si zvolte. Vyuˇzijte extern´ı pˇreruˇsen´ı INT0 nebo INT1 generovan´e tlaˇc´ıtkem na pinu PD2 nebo PD3. Nastavujte pouze bity, o kter´ ych byla ˇreˇc v´ yˇse; vˇsechny ostatn´ı ponechte v hodnotˇe ”0”. Bod 2. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt a v JSA naprogramujte
18
Mikroprocesorov´a technika a embedded syst´emy
aplikaci 8bitov´eho bin´arn´ıho ˇc´ıtaˇce, jehoˇz stav zobrazujte pomoc´ı LED diod na v´ yvojov´e desce STK500. Zmˇenu stavu ˇc´ıtaˇce realizujte pomoc´ı tlaˇc´ıtka, kter´e bude spouˇstˇet extern´ı pˇreruˇsen´ı INT0 nebo INT1. Vyuˇzijte nastaven´ı kontroln´ıch registr˚ u GICR a MCUCR z pˇredchoz´ıho bodu. Jedn´a se o I/O registry, proto k jejich naplnˇen´ı pouˇzijte kombinaci instrukc´ı LDI a OUT. Nezapomeˇ nte definovat z´asobn´ık, v´ ystupn´ı port s LED diodami a povolit glob´aln´ı pˇreruˇsen´ı. Inspirujte se zdrojov´ ym k´odem 3.1. Bod 3. Stisk mechanick´eho tlaˇc´ıtka oˇsetˇrete kr´atk´ ym zpoˇzdˇen´ım. Pro zpoˇzdˇen´ı pouˇzijte podprogram z poˇc´ıtaˇcov´eho cviˇcen´ı 2. Nakreslete v´ yvojov´ y diagram oˇsetˇren´ı ˇ ıdic´ı jednotka mikrokontrol´eru identifikuje poˇzadavek na pˇreruˇsen´ı stisku tlaˇc´ıtka. R´ prostˇrednictv´ım pˇr´ıznakov´eho bitu. Kaˇzd´ y zdroj pˇreruˇsen´ı m´a sv˚ uj jedineˇcn´ y pˇr´ıznakov´ y bit. Extern´ı poˇzadavek na pˇreruˇsen´ı je signalizov´an bitem v pˇr´ıznakov´em registru GIFR (General Interrupt Flag Register) – pozor, nepl´est s GICR! Aby bylo zabr´anˇeno opakovan´emu spuˇstˇen´ı obsluhy pˇreruˇsen´ı, je nutn´e odpov´ıdaj´ıc´ı pˇr´ıznakov´ y bit nulovat na konci obsluˇzn´e rutiny (tj. pˇred instrukc´ı RETI). Zp˚ usob nulov´an´ı pˇr´ıznakov´eho bitu nastudujte z katalogov´eho listu.
3.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Vytvoˇrte aplikaci s dvojic´ı extern´ıch zdroj˚ u pˇreruˇsen´ı reaguj´ıc´ı na n´abˇeˇznou hranu. Napiˇste obsluhy obou pˇreruˇsen´ı. Prvn´ı bude m´ıt za u ´kol zmˇenu stavu 7bitov´eho bin´arn´ıho ˇc´ıtaˇce; druh´a obsluˇzn´a rutina bude nastavovat smˇer ˇc´ıt´an´ı – ten signalizujte nevyuˇzitou LED diodou. • Aplikace oˇsetˇren´ı stisku tlaˇc´ıtka, kter´a bude schopna rozliˇsit ”kr´atk´ y” a ”dlouh´ y” stisk a na z´akladˇe toho spustit dvojici obsluˇzn´ ych funkc´ı.
3.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo 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 zdroje pˇreruˇsen´ı od tlaˇc´ıtka. Studenti mˇeli moˇznost vyzkouˇset si programov´an´ı a testov´an´ı aplikac´ı v jazyce symbolick´ ych adres.
3.6
Kontroln´ı ot´ azky
Ot´ azka 3.1 Kam a jak´ym zp˚ usobem se ukl´adaj´ı n´avratov´e adresy pˇri vol´an´ı obsluhy pˇreruˇsen´ı? Ot´ azka 3.2 Nakreslete v´yvojov´y diagram aplikac´ı z kapitoly 3.4. Ot´ azka 3.3 Jak´y je rozd´ıl mezi v´yznamem bit˚ u v kontroln´ıch registrech GICR a GIFR?
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
4
19
Intern´ı ˇ casovaˇ c/ˇ c´ıtaˇ c, generov´ an´ı PWM sign´ alu
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 ˇcasovaˇce/ˇc´ıtaˇce? 2. Jak´e hodnoty obsahuj´ı pravdivostn´ı tabulky logick´ ych oper´ator˚ u AND, OR, EXOR? Jak´ y je aritmetick´ y dopad bitov´eho posuvu vlevo a vpravo? Jak´e instrukce AVR realizuj´ı vˇsechny zm´ınˇen´e bitov´e operace? 3. Na ˇcem z´avis´ı rychlost pˇreteˇcen´ı libovoln´eho ˇcasovaˇce/ˇc´ıtaˇce? 4. Vysvˇetlete pojem ”PWM” a diskutujte moˇznosti vyuˇzit´ı.
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je nastavov´an´ı ˇr´ıdic´ıch I/O registr˚ u a hled´an´ı informac´ı v anglick´e dokumentaci. C´ıle budou vyuˇzity v aplikaci s pˇreruˇsen´ım od ˇcasovaˇce/ˇc´ıtaˇce a pˇri generov´an´ı PWM sign´alu.
4.1
Zad´ an´ı
1. Procviˇcte si hled´an´ım informac´ı v anglick´em katalogov´em listu k mikrokontrol´eru ATmega16 a vyhledejte informace pro nastaven´ı intern´ıho ˇcasovaˇce/ˇc´ıtaˇce. 2. V JSA naprogramujte aplikaci 8bitov´eho ˇc´ıtaˇce ˇr´ızen´eho pˇreruˇsen´ım od 8bitov´eho ˇcasovaˇce/ˇc´ıtaˇce. 3. Vyhledejte potˇrebn´e informace k nastaven´ı ˇcasovaˇce/ˇc´ıtaˇce 0 pro generov´an´ı PWM sign´alu a v JSA naprogramujte aplikaci generuj´ıc´ı PWM sign´al se stˇr´ıdou 1:2. 4. 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.2 4.2.1
Teoretick´ e poznatky Pˇ reruˇ sen´ı od ˇ casovaˇ ce/ˇ c´ıtaˇ ce
Mikrokontrol´er ATmega16 nab´ız´ı pomˇernˇe ˇsirokou ˇsk´alu nastaven´ı a m´od˚ u dostupn´ ych pro ˇcasovaˇce/ˇc´ıtaˇce (Timer/Counter) integrovan´e na ˇcipu. V t´eto poˇc´ıtaˇcov´e u ´loze se budeme zab´ yvat pouze ˇcasovaˇcem/ˇc´ıtaˇcem s oznaˇcen´ım ”0” (jedn´a se o 8bitov´ y ˇcasovaˇc/ˇc´ıtaˇc) a pouze jeho z´akladn´ım pouˇzit´ım. ˇ Casovaˇ c/ˇc´ıtaˇc m˚ 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 odvozen´ ym od j´adra 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 volit v kontroln´ım registru TCCR0 (Timer/Counter Control Register), jehoˇz sloˇzen´ı lze nal´ezt v [Atm16]. Pro n´as jsou zaj´ımav´e tˇri bity pro nastaven´ı pˇreddˇeliˇcky jak naznaˇcuje tabulka 4.1.
20
Mikroprocesorov´a technika a embedded syst´emy
Tabulka 4.1: Nastaven´ı pˇreddˇeliˇcky 8bitov´eho ˇcasovaˇce/ˇc´ıtaˇce 0 v kontroln´ım registru TCCR0. CS02:0 Popis funkce 0b000 0b001 0b010 0b011 0b100 0b101 0b110 0b111
Hodinov´ y sign´al odpojen, tj. ˇcasovaˇc/ˇc´ıtaˇc 0 nepracuje. Bez pˇreddˇeliˇcky; fT /C = fCP U . Pˇreddˇeliˇcka 8; fT /C = fCP U /8. Pˇreddˇeliˇcka 64; fT /C = fCP U /64. Pˇreddˇeliˇcka 256; fT /C = fCP U /256. Pˇreddˇeliˇcka 1 024; fT /C = fCP U /1 024. Extern´ı zdroj ˇr´ıdic´ıho sign´alu na pinu T0 (PB0), reakce na sestupnou hranu. Extern´ı zdroj ˇr´ıdic´ıho sign´alu na pinu T0 (PB0), reakce na n´abˇeˇznou hranu.
S tˇemito znalostmi m˚ uˇzeme nechat bˇeˇzet ˇcasovaˇc a pomoc´ı pˇreruˇsen´ı, kter´e se automaticky generuje pˇri jeho pˇreteˇcen´ı (anglicky: Overflow), 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´ı ˇcasovaˇc (napˇr. zvol´ıme pˇreddˇeliˇcku tak, aby cel´ y cyklus trval 10 ms, programem pak oˇsetˇr´ıme poˇc´ıt´an´ı do 100 a dos´ahnout tak doby 1 s). Stejnˇe jako extern´ı pˇreruˇsen´ı, m´a i pˇreruˇsen´ı od ˇcasovaˇce/ˇc´ıtaˇ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´ı pˇri pˇreteˇcen´ı. 4.2.2
Pulznˇ eˇ s´ıˇ rkov´ a modulace
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´ y. 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 tak´e intern´ı ˇcasovaˇc/ˇc´ıtaˇc mikrokontrol´eru, nastav´ıme-li ho do funkce komparace. V tomto m´odu totiˇz ˇcasovaˇc/ˇc´ıtaˇc porovn´av´a hodnotu z datov´eho registru TCNT0 (Timer/Counter Register) s hodnotou uloˇzenou v komparaˇcn´ım registru OCR0 (Output Compare Register). V pˇr´ıpadˇe rovnosti obou hodnot lze mˇenit u ´roveˇ n v´ ystupn´ıho sign´alu na pinu OC0 (PB3). Mikrokontrol´er ATmega16 umoˇzn ˇuje pouˇzit´ı nˇekolika m´od˚ u generov´an´ı sign´alu. V t´eto poˇc´ıtaˇcov´e u ´loze se zamˇeˇr´ıme pouze na m´od s oznaˇcen´ım Fast PWM. Pˇri tomto nastaven´ı ˇcasovaˇc naˇc´ıt´a hodnoty od 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 TCNT0 ˇ a OCR0 a je nastavena pˇri pˇreteˇcen´ı datov´eho registru TCNT0. Casov´ y diagram popsan´e funkce je zn´azornˇen na obr´azku 4.2. Je zˇrejm´e, ˇze perioda tOV F 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 pˇreddˇeliˇcky.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
(a)
21
(b)
Obr´ azek 4.1: Princip tvorby PWM sign´alu: (a) vstupn´ı a modulaˇcn´ı sign´al, (b) v´ ystupn´ı (tj. modulovan´ y) PWM sign´al. 255 OCR0
OCR0
TCNT0 0
OC0 (PB3) tOV F
tOV F
tOV F
tOV F
ˇ Obr´ azek 4.2: Casov´ y diagram generov´an´ı PWM sign´alu pomoc´ı 8bitov´eho ˇcasovaˇce (m´od Fast PWM).
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 jednak pˇreteˇcen´ı ˇcasovaˇce/ˇc´ıtaˇce a tak´e ud´alost shody mezi datov´ ym a komparaˇcn´ım registrem ˇcasovaˇce. Obˇe tato pˇreruˇsen´ı se povoluj´ı v kontroln´ım registru TIMSK (Timer/Counter Interrupt Mask Register).
4.3
Pokyny k zad´ an´ı
Bod 1. Ze znalosti frekvence hodinov´eho sign´alu fCP U (u STK500 je vybr´an intern´ı oscil´ator s frekvenc´ı fCP U = 1 MHz) vypoˇctˇete dobu, za kterou dojde k pˇreteˇcen´ı 8bitov´eho ˇcasovaˇce/ˇc´ıtaˇce 0. V´ ypoˇcet proved’te pro vˇsechny hodnoty pˇreddˇeliˇcky z tabulky 4.1. V katalogov´em listu k mikrokontrol´eru ATmega16 [Atm16] vyhledejte kapitolu zab´ yvaj´ıc´ı se 8bitov´ ym ˇcasovaˇcem/ˇc´ıtaˇcem 0 (anglicky: 8-bit Timer/Counter0). K jeho nastaven´ı je nutn´e naplnit dva ˇr´ıdic´ı registry, konkr´etnˇe TCCR0 (Timer/Counter Control Register) a TIMSK (Timer/Counter Interrupt Mask Register). V katalogov´em listu si vyhledejte v´ yznam jednotliv´ ych bit˚ u tˇechto registr˚ u a pˇripravte si bitov´a slova, kter´ ymi je napln´ıte: hodnotu pˇreddˇeliˇcky si zvolte a povolte pˇreruˇsen´ı pˇri pˇreteˇcen´ı. 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 zobrazte pomoc´ı LED diod. Zmˇenu stavu ˇc´ıtaˇce realizujte pomoc´ı pˇreruˇsen´ı od pˇreteˇcen´ı ˇcasovaˇce/ˇc´ıtaˇce 0. Vyuˇzijte k tomu
22
Mikroprocesorov´a technika a embedded syst´emy
nastaven´ı registr˚ u TCCR0 a TIMSK z pˇredeˇsl´eho bodu. Bod 3. V katalogov´em listu k mikrokontrol´eru ATmega16 [Atm16] vyhledejte ˇca´st zab´ yvaj´ıc´ı se generov´an´ım PWM sign´alu pomoc´ı komparace u ˇcasovaˇce/ˇc´ıtaˇce 0. K nastaven´ı ˇcasovaˇce/ˇc´ıtaˇce 0 je nutn´e naplnit ˇr´ıdic´ı registr TCCR0. V katalogov´em listu 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 vyberte tzv. Fast m´od PWM, neinvertovanou formu v´ ystupn´ıho sign´alu a vhodnou hodnotu pˇreddˇeliˇcky. Ostatn´ı bity ˇr´ıdic´ıho registru ponechte beze zmˇeny. 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´ı ˇcasovaˇce/ˇc´ıtaˇce 0 generov´an PWM sign´al). 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´ı, tud´ıˇz ani definici z´asobn´ıku. Zaps´an´ı hodnot do vˇsech I/O registr˚ u staˇc´ı prov´est jen jednou. Nezapomeˇ nte v´aˇs program ukonˇcit nekoneˇcnou smyˇckou, kter´a tedy nebude obsahovat ˇz´adn´e dalˇs´ı instrukce. Vypoˇctˇete periodu generovan´eho sign´alu a ovˇeˇrte ji odeˇcten´ım hodnoty na osciloskopu (jehoˇz sonda je pochopitelnˇe pˇripojena na pin PB3), pˇr´ıp. pomoc´ı programu Scope [Sco09], kter´ y komunikuje se zvukovou kartou poˇc´ıtaˇce. 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 ˇca´st´ı k´odu z pˇredeˇsl´ ych poˇc´ıtaˇcov´ ych cviˇcen´ı. Snaˇzte se o optimalizaci vaˇseho programu z hlediska obsazenosti programov´e pamˇeti. Bod 4. 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, plynule od hodnoty 10 po 245 a zpˇet. 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 vizu´alnˇe pozorovat vliv zmˇeny stˇr´ıdy tak´e na v´ ystupn´ı LED diodˇe.
4.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Postupn´e rozsvˇecen´ı a zhas´ın´an´ı LED diod ve stylu Knight Ridera. • Aplikace oˇsetˇren´ı stisku tlaˇc´ıtka, kter´a bude schopna rozliˇsit ”kr´atk´ y” a ”dlouh´ y” stisk. K rozliˇsen´ı vyuˇzijte intern´ıho ˇcasovaˇce.
4.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo 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 ˇcasovaˇce pˇri pˇreteˇcen´ı i komparaci. T´eto funkce lze snadno vyuˇz´ıt pˇri generov´an´ı v´ ystupn´ıho sign´alu s promˇennou stˇr´ıdou.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
4.6
23
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 ˇcasovaˇc/ˇc´ıtaˇc vyuˇzit ke komparaci hodnot v norm´aln´ım m´odu (non-PWM), souˇcasnˇe nulovat v´ystupn´ı u ´roveˇ n pˇri komparaci a inkrementace ˇcasovaˇce m´a b´yt zpomalena 8×? Ot´ azka 4.3 Jakou posloupnost´ı instrukc´ı AVR napln´ıte registr TCCR0 ˇr´ıdic´ım slovem z pˇredeˇsl´e ot´azky? Ot´ azka 4.4 Sestavte v´yvojov´y diagram aplikace Knight Ridera (kapitola 4.4).
24
Mikroprocesorov´a technika a embedded syst´emy
5
Programov´ an´ı v jazyce C, obsluha pˇ reruˇ sen´ı
Test pˇ redchoz´ıch znalost´ı 1. V jak´em typu pamˇeti a od jak´ ych adres se nach´az´ı vektory pˇreruˇsen´ı u AVR? 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 poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je osvojen´ı si programov´an´ı mikrokontrol´er˚ u ve vyˇsˇs´ım programovac´ım jazyce C pomoc´ı voln´eho pˇrekladaˇce GCC 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 pro v´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u s = ~a · ~b. 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 16bitov´ ym ˇcasovaˇcem/ˇc´ıtaˇcem. 3. Seznamte se s aplikac´ı AVR Wizard pro generov´an´ı kostry zdrojov´eho k´odu. 4. K aplikaci bin´arn´ıho ˇc´ıtaˇce pˇridejte obsluˇzn´a tlaˇc´ıtka a generujte extern´ı poˇzadavky na pˇreruˇsen´ı.
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 zpravidla v´ıce m´ısta v pamˇeti a jeho v´ ykon je tak 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´ı, ˇcasto 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 20. stolet´ı. Pˇrestoˇze byl tento standard n´aslednˇe 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 (podzim 2011) je platn´a verze z roku 1999 s oznaˇcen´ım ISO/IEC 9899:1999 [Ans99], doplnˇen´a jiˇz tˇret´ı korekc´ı z roku 2007 (ISO/IEC 9899:1999 Cor. 3:2007(E)). Pracovn´ı skupina WG14, kter´a
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
25
pˇripravuje standardizaci jazyka C, vˇsak dokonˇcuje nov´ y standard s oznaˇcen´ım ISO/IEC 9899:201x [Ans1x]. Kr´atk´e pˇribl´ıˇzen´ı struktury jazyka C je uvedeno v pˇr´ıloze B a na pˇredn´aˇsce. 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) [Gcc09]. 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´er˚ u 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 [Win08]. 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 Studio. V prostˇred´ı Linux je moˇzn´e vyuˇz´ıt n´astroje avra pro pˇreklad aplikac´ı z jazyka symbolick´ ych adres, bal´ıˇcky avr-gcc a avr-binutils pro pˇreklad aplikac´ı z jazyka C, d´ale avr-libc s knihovnami pro AVR a napˇr. avrdude pro naprogramov´an´ı c´ılov´eho mikrokontrol´eru. 5.2.2
Obsluha pˇ reruˇ sen´ı v jazyce C
V´ yznam a pouˇzit´ı pˇreruˇsen´ı v jazyce symbolick´ ych adres popisuje poˇc´ıtaˇcov´e cviˇcen´ı 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 jednoduˇsˇs´ı. Staˇc´ı vytvoˇrit obsluˇzn´e makro s n´azvem ISR (Interrupt Service Routine), jehoˇ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´ı ˇc. 0 je t´ımto parametrem 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´ı je zobrazena ve v´ ypise 5.1. Tento k´od je ekvivalentem zdrojov´eho k´odu v jazyce symbolick´ ych adres 3.1. Ostatn´ı 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 [Lib09].
5.3
Pokyny k zad´ an´ı
Bod 1. 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, proto mˇejte na pamˇeti, ˇze ve zdrojov´em k´odu mus´ıte pouˇz´ıvat pr´avˇe tento z´apis. Obdobnˇe jako v poˇc´ıtaˇcov´em cviˇcen´ı 1 naprogramujte v´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u ~a = (a7 , a6 , . . . , a1 , a0 ) a ~b = (b7 , b6 , . . . , b1 , b0 ). Aplikace bude kromˇe hlaviˇckov´eho souboru obsahovat deklaraci a naplnˇen´ı dvou pol´ı (pouˇz´ıvejte typ unsigned char), jedinou funkci main(), kter´a obsahuje cyklus s pˇr´ısluˇsn´ ym poˇctem opakov´an´ı. K prvk˚ um pol´ı pˇristupujte pomoc´ı indexu prvku, ˇci pomoc´ı ukazatele. Zkontrolujte, zda jsou vypnuty optimalizace pˇri pˇrekladu z jazyka C: spust’te Project→Configuration Options a v dialogov´em oknˇe zmˇen ˇte parametr optimalizace Optimization na -O0.
26
Mikroprocesorov´a technika a embedded syst´emy
Tabulka 5.1: Pˇrehled vektor˚ u pˇreruˇsen´ı pro mikrokontrol´er ATmega16 v jazyce C. ˇ C.
Adresa Parametr v C (GCC) Popis pˇ reruˇ sen´ı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
0x0000 0x0002 0x0004 0x0006 0x0008 0x000A 0x000C 0x000E 0x0010 0x0012 0x0014 0x0016 0x0018 0x001A 0x001C 0x001E 0x0020 0x0022 0x0024 0x0026 0x0028
INT0 vect INT1 vect TIMER2 COMP vect TIMER2 OVF vect TIMER1 CAPT vect TIMER1 COMPA vect TIMER1 COMPB vect TIMER1 OVF vect TIMER0 OVF vect SPI STC vect USART RXC vect USART UDRE vect USART TXC vect ADC vect EE RDY vect ANA COMP vect TWI vect INT2 vect TIMER0 COMP vect SPM RDY vect
Extern´ı reset, pˇripojen´ı nap´ajen´ı, . . . Extern´ı poˇzadavek na pˇreruˇsen´ı 0. Extern´ı poˇzadavek na pˇreruˇsen´ı 1. ˇ Casovaˇ c/ˇc´ıtaˇc 2 – shoda komparace. ˇ Casovaˇ c/ˇc´ıtaˇc 2 – pˇreteˇcen´ı. ˇ Casovaˇc/ˇc´ıtaˇc 1 – zachycen´ı. ˇ Casovaˇ c/ˇc´ıtaˇc 1 – shoda s kompar´atorem A. ˇ Casovaˇc/ˇc´ıtaˇc 1 – shoda s kompar´atorem B. ˇ Casovaˇ c/ˇc´ıtaˇc 1 – pˇreteˇcen´ı. ˇ Casovaˇ c/ˇc´ıtaˇc 0 – pˇreteˇcen´ı. Dokonˇcen´ı s´eriov´eho pˇrenosu SPI. USART – kompletn´ı pˇr´ıjem dat. USART – pr´azdn´ y datov´ y registr. USART – kompletn´ı vysl´an´ı dat. ADC – dokonˇcen´ı A/D pˇrevodu. EEPROM – komunikace pˇripravena. Zmˇena v´ ystupu analogov´eho kompar´atoru. Ud´alost na s´eriov´e sbˇernici I2C. Extern´ı poˇzadavek na pˇreruˇsen´ı 2. ˇ Casovaˇ c/ˇc´ıtaˇc 0 – shoda komparace. Uloˇzen´ı do programov´e pamˇeti pˇripraveno.
Spr´avnou ˇcinnost aplikace ovˇeˇrte v simul´atoru. Hodnoty promˇenn´ ych lze zobrazit v oknˇe Watch (View→Watch Alt++), kde v prvn´ım sloupci zadejte n´azev poˇzadovan´e promˇenn´e. Bod 2. Pro naˇsi dalˇs´ı pr´aci v poˇc´ıtaˇcov´ ych 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 a embedded syst´emy. Zapojen´ı desky a soupis souˇc´astek je uveden v pˇr´ıloze C. J´adrem desky je mikrokontrol´er ATmega16-16AU s extern´ım krystalem o frekvenci 16 MHz. K I/O bran´am procesoru lze pomoc´ı 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´ y sbˇernic´ı I2C. Pr´ace s perifern´ımi zaˇr´ızen´ımi je podstatou mikroprocesorov´ ych aplikac´ı a bude n´apln´ı dalˇs´ıch poˇc´ıtaˇcov´ ych cviˇcen´ı. Ve v´ yvojov´em prostˇred´ı AVR Studio vytvoˇrte nov´ y projekt a 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 ˇcasovaˇce/ˇc´ıtaˇce 1 (16-bit Timer/Counter1). Stav ˇc´ıtaˇce zobrazte pomoc´ı LED diod, kter´e jsou pˇripojeny k horn´ı polovinˇe portu D. Pro
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
27
Zdrojov´ y k´ od 5.1: Kostra aplikace vyuˇz´ıvaj´ıc´ı extern´ı zdroj pˇreruˇsen´ı v jazyce C. 1 2
#include
#include
// h l a v iˇc k o v y ´ s o u b o r pro m i k r o k o n t r o l´e r // h l a v iˇc k o v y ´ s o u b o r pro pˇr e r uˇs e n´ı
ISR ( INT0_vect ) { ... }
// o b s l u h a e x t e r n´ıh o pˇr e r uˇs e n´ı INT0 // k´o d o b s l u h y pˇr e r uˇs e n´ı
int main ( void ) { ... sei ( ) ; while ( 1 ) ;
// // // //
3 4 5 6 7 8 9 10 11
h l a v n´ı f u n k c e k´o d h l a v n´ı f u n k c e g l o b ´a l n´ı p o v o l e n´ı vˇs e c h pˇr e r uˇs e n´ı nekoneˇc n´a smyˇcka
12
return ( 1 ) ;
13 14
// h l a v n´ı f u n k c e v r a c´ı hodnotu 1
}
spr´avnou funkci staˇc´ı nastavit v´ ystupn´ı port D, d´ale 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 katalogov´em listu [Atm16]. Nezapomeˇ nte, ˇze ˇc´ıtaˇc je pouze 4bitov´ y, a na kter´e ˇca´sti portu jsou LEDky pˇripojeny. Vypoˇctˇete doby pˇreteˇcen´ı ˇcasovaˇce/ˇc´ıtaˇce 1 pro vˇsechny hodnoty pˇreddˇeliˇcky v pˇr´ıpadˇe, ˇze frekvence hodinov´eho sign´alu mikrokontrol´eru na v´ yvojov´e desce ˇ ıdic´ı registry naplˇ je fCP U = 16 MHz. R´ nujte zp˚ usobem kombinov´an´ı bitov´eho posuvu doleva << a logick´eho souˇctu |, uk´azan´ ym na pˇredn´aˇsk´ach. Vytvoˇrenou aplikaci naprogramujte do 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 [Atm04], 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.1.
Obr´ azek 5.1: V´ ybˇer programov´an´ı mikrokontrol´eru prostˇrednictv´ım AVRISP mkII, pˇripojen´em prostˇrednictv´ı USB portu.
Bod 3. Spust’te aplikaci AVR Wizard [Sev08] a vytvoˇrte v nˇem nov´ y projekt (Project→ New Project F2 ) pro mikrokontrol´er ATmega16. Tlaˇc´ıtkem Continue se otevˇre okno, pomoc´ı nˇehoˇz lze snadno vyb´ırat a nastavovat poˇzadovan´e perif´erie, jak ukazuje obr´azek 5.2. Aplikace AVR Wizard obsahuje celkem osm z´aloˇzek pro ovl´ad´an´ı vstupnˇe/v´ ystupn´ıch
28
Mikroprocesorov´a technika a embedded syst´emy
Obr´ azek 5.2: Aplikace AVR Wizard pro nastaven´ı ˇr´ıdic´ıch registr˚ u mikrokontrol´er˚ u AVR [Sev08].
port˚ u, ˇcasovaˇce/ˇc´ıtaˇce, watchdogu, A/D pˇrevodn´ıku a kompar´atoru, vnˇejˇs´ıho pˇreruˇsen´ı, s´eriov´e komunikace pomoc´ı UART, TWI a SPI. Posledn´ı z´aloˇzka Libraries umoˇzn ˇuje vkl´ad´an´ı uˇzivatelsk´ ych knihoven a maker. Cel´ y projekt je moˇzn´e uloˇzit stisknut´ım tlaˇc´ıtka Save Project, vr´atit se na v´ ybˇer mikrokontrol´eru tlaˇc´ıtkem Back, ale pˇredevˇs´ım vygenerovat zdrojov´ y k´od v jazyce C (tlaˇc´ıtko Gen. code). Po stisknut´ı tohoto tlaˇc´ıtka se v hlavn´ım oknˇe aplikace vygeneruje kostra zdrojov´eho k´odu pro pˇrekladaˇc GCC. Tento k´od je n´aslednˇe moˇzn´e zkop´ırovat do projektu v prostˇred´ı AVR Studio. Seznamte se s moˇznostmi a s ovl´ad´an´ım programu AVR Wizard. Nastavte ˇcasovaˇc/ˇc´ıtaˇc 1 a port D dle pˇredchoz´ıho bodu a vygenerovan´ y k´od s nastaven´ım ˇr´ıdic´ıch registr˚ u zkontrolujte s ruˇcnˇe z´ıskan´ ymi hodnotami. Bod 4. K aplikaci bin´arn´ıho ˇc´ıtaˇce pˇridejte obsluhy extern´ıch poˇzadavk˚ u na pˇreruˇsen´ı INT0 a INT1, ˇr´ızen´e tlaˇc´ıtky. Jedna obsluha necht’ resetuje stav bin´arn´ıho ˇc´ıtaˇce a druh´a at’ mˇen´ı smˇer ˇc´ıt´an´ı. 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? Pouˇzijte nastaven´ı ˇr´ıdic´ıch registr˚ u z poˇc´ıtaˇcov´eho cviˇcen´ı 3, nebo z programu AVR Wizard.
5.4
N´ amˇ ety pro dalˇ s´ı aplikace
• V jazyce C naprogramujte aplikaci, kter´a generuje periodickou zmˇenu dvou t´on˚ u (ˇcist´a kvarta). Pro odmˇeˇrov´an´ı potˇrebn´ ych ˇcasov´ ych interval˚ u vyuˇzijte pˇreteˇcen´ı intern´ıch ˇcasovaˇc˚ u/ˇc´ıtaˇ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.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
5.5
29
Shrnut´ı
Poˇc´ıtaˇcov´a 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 ˇcasovaˇce/ˇc´ıtaˇce a extern´ı poˇzadavek na pˇreruˇsen´ı od tlaˇc´ıtka.
5.6
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 posledn´ıho bodu zad´an´ı. Ot´ azka 5.3 Jakou funkci m´a k´od 5.2? Pˇreloˇzte tento k´od do jazyka symbolick´ych adres mikrokontrol´eru AVR. Kolik byt˚ u pˇreloˇzen´y program zab´ır´a?
´ Zdrojov´ y k´ od 5.2: Usek k´odu v jazyce C. 1 2 3 4
DDRD = 0 xF0 ; PORTD = 0 ; TCCR1B = ( 1<<2 ) | ( 1<<1 ) ; sei ( ) ;
// // // //
30
Mikroprocesorov´a technika a embedded syst´emy
ˇ ızen´ı komunikace s displejem R´
6
Test pˇ redchoz´ıch znalost´ı 1. Nakreslete v´ ystupn´ı charakteristiky bipol´arn´ıch tranzistor˚ u NPN a PNP. 2. Jak´e ˇr´ıdic´ı sign´aly v mikroprocesorov´e technice ovl´adaj´ı operaci ˇcten´ı/z´apis? 3. Co je to ASCII tabulka a jak´e u ´daje obsahuje? 4. 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 poˇ c´ıtaˇ cov´ eho cviˇ cen´ı Poˇc´ıtaˇcov´e cviˇcen´ı si klade za c´ıl sezn´amit studenty s moˇznost´ı pˇripojen´ı 7segmentov´eho displeje a LCD znakov´eho displeje k I/O portu(˚ um) mikrokontrol´eru AVR. Vyuˇzito bude multiplexov´an´ı 7segmentov´eho displeje a 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, jej´ıˇz autor je Peter Fleury [Fle06].
6.1
Zad´ an´ı
1. Realizujte aplikaci pro komunikaci se 7segmentov´ ym displejem. 2. Seznamte se s knihovnou pro vyuˇzit´ı LCD displeje v jazyce C. 3. Realizujte bin´arn´ı ˇc´ıtaˇc, kter´ y bude ovl´ad´an 16bitov´ ym ˇcasovaˇcem a jeho stav zobrazte pomoc´ı displeje.
6.2
Teoretick´ e poznatky
Z´akladn´ım zobrazovac´ım (indikuj´ıc´ım) prvkem v mikroprocesorov´e technice je LED dioda. Ovl´ad´an´ı LED diod bylo procviˇceno v pˇredeˇsl´ ych poˇc´ıtaˇcov´ ych cviˇcen´ıch. Seskupen´ım sedmi svˇeteln´ ych segment˚ u vznikne 7segmentov´ y displej, umoˇzn ˇuj´ıc´ı zobrazen´ı ˇsestn´acti symbol˚ u hexadecim´aln´ı soustavy. Sdruˇzen´ım v´ıce takov´ ych displej˚ u, lze zobrazit hodnoty o vˇetˇs´ım poˇctu symbol˚ u. Necht’ je displej tvoˇren ˇsesti symboly. Pro pˇr´ım´e propojen´ı vˇsech sv´ıtic´ıch segment˚ u s mikrokontrol´erem by bylo potˇreba 48 v´ ystupn´ıch pin˚ u (6 symbol˚ u × 8 segment˚ u – vˇc. desetinn´e teˇcky). Toto propojen´ı se nepouˇz´ıv´a. Efektivn´ım propojen´ım je multiplexov´an´ı jednotliv´ ych symbol˚ u. Datov´e vodiˇce pro symboly jsou totoˇzn´e, ale v ˇcasov´em multiplexu se sp´ın´a vˇzdy jen jeden symbol. Je-li pˇrep´ın´an´ı dostateˇcnˇe rychl´e, lidsk´e okno jej nezaznamen´a. Tento zp˚ usob propojen´ı je pouˇzit tak´e na v´ yvojov´e desce ATmega16 (viz obr´azek 6.1). Pro ˇsest symbol˚ u tak postaˇc´ı 14 v´ ystupn´ıch pin˚ u (6 symbol˚ u; port C + 8 segment˚ u, vˇc. desetinn´e teˇcky; port A). ´ cinn´ Uˇ y zp˚ usob zobrazen´ı informac´ı v cel´e ˇradˇe ˇr´ıdic´ıch aplikac´ı je pomoc´ı LCD displeje. Toto poˇc´ıtaˇcov´e cviˇcen´ı je zamˇeˇreno 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
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
PC7
31
PC2
PA3
PA3
PA4 A1
PA2
PA4 A1
PA2
PA7
PA5
PA7
PA5
A6
PA0
A6
PA0
Obr´ azek 6.1: Zapojen´ı 7segmentov´eho displeje v laboratoˇri Mikroprocesorov´e techniky. [Hit08], pˇr´ıp. jeho ekvivalent˚ u. Tento ˇradiˇc je normou pro komunikaci s LCD displeji. Zpravidla se vyr´ab´ı 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 podsv´ıcen´ı. 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 s LCD displejem na v´ yvojov´e desce, jak naznaˇcuje obr´azek 6.2. 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.2: 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´ı do/z LCD displeje (R/W = 0: z´apis, R/W = 1: ˇcten´ı). Sestupn´a hrana kladn´eho pulzu sign´alu E (Enable) oznaˇcuje okamˇzik, kdy jsou ˇctena data z datov´e a ˇr´ıdic´ı sbˇernice. Proces 4bitov´e 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 alespoˇ n 3 hodinov´e cykly. 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. Jedn´a se vˇzdy o 1bytov´e slovo doplnˇen´e o ˇr´ıdic´ı sign´aly RS a R/W . Podrobn´ y soupis
32
Mikroprocesorov´a technika a embedded syst´emy
vˇsech instrukc´ı je moˇzn´e nal´ezt v literatuˇre, napˇr. v [Dov07]. Tabulka 6.1: Vybran´e pˇr´ıkazy HD44780 pro komunikaci s LCD displejem. RS
R/W
0 0 0
0 0 0
0000 0001 0000 001x 0000 01IS
0
0
0000 1DCB
0
0
001L NFxx
0 1
0 0
01 cgram data
1
1
data
6.3
DB7 : DB0 Popis instrukce Smaz´an´ı displeje. N´avrat kurzoru na pozici (0,0). Nastaven´ı posuvu kurzoru. I: inkrementace pozice kurzoru. S: posuv displeje. Zapnut´ı displeje/kurzoru. D: zapnut´ı displeje. C: zobrazen´ı kurzoru. B: blik´an´ı kurzoru. Nastaven´ı rozliˇsen´ı. L=1(0): nastaven´ı 8(4)bitov´e komunikace. N=1(0): dva(jeden) ˇra´dky displeje. F=1(0): velikost fontu 5×10(5×7). Nastaven´ı adresy cgram v CGRAM segmentu. Z´apis dat do pamˇeti CGRAM. Zobrazen´ı znaku z adresy data. ˇ ı dat z pamˇeti CGRAM. Cten´ ˇ ı dat z adresy data. Cten´
Pokyny k zad´ an´ı
Bod 1. V jazyce C naprogramujte komunikaci mezi mikrokontrol´erem ATmega16 a 7segmentov´ ym displejem na v´ yvojov´e desce ATmega16. (Zapojen´ı displeje na zobrazeno na obr´azku 6.1). Vzhledem k tomu, ˇze 7segmentov´ y displej vyuˇz´ıv´a port A, kde je pˇripojen tak´e LCD displej, zkontrolujte (pˇrepojte) jumpery od LCD na 7segmentov´ y displej. K multiplexov´an´ı mezi jednotliv´ ymi symboly vyuˇzijte 8mi ˇci 16ti bitov´ y ˇcasovaˇc, se kter´ ym jste ˇ se sezn´amili ve cviˇcen´ıch 4 a 5. Casov´ e intervaly mˇen ˇte pomoc´ı odpov´ıdaj´ıc´ıch pˇreddˇeliˇcek. Jak´a je maxim´aln´ı doba multiplexov´an´ı, kterou lidsk´e oko nepostˇrehne? Vzhledem k propojen´ı jednotliv´ ych sv´ıtic´ıch segment˚ u naprogramujte funkci, kter´a bude realizovat zobrazen´ı v´ami zadan´e ˇc´ıslice na poˇzadovanou pozici na displeji. Sv´ıtic´ı segmenty jsou v zapojen´ı se spoleˇcnou anodou. V n´avrhu kostry cel´e aplikace (k´od 6.1) je tato funkce nazv´ana showSeg() a m´a dva parametry. Prvn´ı pˇredstavuje hodnotu, kterou chceme zobrazit, druh´ y parametr pak obsahuje pozici symbolu v cel´em displeji. Tˇelo samotn´e funkce m˚ uˇze b´ yt tvoˇreno napˇr. kombinac´ı pˇr´ıkaz˚ u switch a case. Bod 2. Odpojte jumpery, kter´e propojuj´ı 7segmentov´ y displej s portem A, a k tomuto portu pˇripojte LCD znakov´ y displej. 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 aplikaci, kter´a vyp´ıˇse textov´ y ˇretˇezec na displeji. Upravenou knihovnu, jej´ıˇz p˚ uvodn´ım autorem byl Peter Fleury [Fle06], si st´ahnˇete z internetov´ ych str´anek pˇredmˇetu [Fry01]. Jedn´a se o dva soubory s n´azvem lcd c.c a lcd h.h. Oba zkop´ırujte do adres´aˇre, kde se nach´az´ı zdrojov´ y soubor vaˇs´ı aplikace. Soubor s koncovkou *.c je taky 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 ˇc´asti AVR Studia
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
33
Zdrojov´ y k´ od 6.1: Kostra aplikace pro ovl´ad´an´ı 7segmentov´eho displeje. 1 2
#include #include
// h l a v iˇc k o v y ´ s o u b o r pro m i k r o k o n t r o l´e r // h l a v iˇc k o v y ´ s o u b o r pro pˇr e r uˇs e n´ı
3 4 5
// p r o t o t y p f u n k c e z o b r a z u j´ı c´ı j e d e n symbol na poˇz adovan´e p o z i c i int showSeg ( char , char ) ;
6 7 8 9 10
int main ( void ) { ... sei ( ) ; while ( 1 ) ;
// // // //
h l a v n´ı f u n k c e k´o d h l a v n´ı f u n k c e g l o b ´a l n´ı p o v o l e n´ı vˇs e c h pˇr e r uˇs e n´ı nekoneˇc n´a smyˇcka
11
return ( 1 ) ;
12 13
// h l a v n´ı f u n k c e v r a c´ı hodnotu 1
}
14 15 16 17 18 19
ISR ( . . . ) { // o b s l u h a pˇr e r uˇs e n´ı pˇr i pˇr e t e ˇc e n´ı ˇc a s o v aˇc e ... // k´o d o b s l u h y pˇr e r uˇs e n´ı // z o b r a z e n´ı jednoho symbolu ” symbol ” na p o z i c i ” p o s i t i o n ” showSeg ( symbol , position ) ; }
20 21 22 23 24 25 26 27
int showSeg ( char symbol , char position ) { switch ( symbol ) { case 0 : // z o b r a z symbol ”0” ... // d o p l n ˇ t e k´o d c e l ´e f u n k c e } return ( 0 ) ; // n ´a v r a t o v ´a hodnota f u n k c e }
a vloˇzte soubor lcd c.c. Hlaviˇckov´ y soubor lcd h.h se jiˇz vloˇz´ı do projektu automaticky pˇri pˇrekladu. Knihovna pro komunikaci s LCD displejem, kterou jste vloˇzili do projektu, obsahuje veˇsker´a 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´ı ˇza´dnou hodnotu. Tabulka 6.2: Soupis vybran´ ych funkc´ı z knihovny pro LCD. N´ azev funkce lcd lcd lcd lcd lcd lcd lcd
Popis funkce
init() ; Inicializace LCD displeje. clrscr() ; Smaz´an´ı obsahu LCD displeje. gotoxy( 0,2 ) ; Pˇresun kurzoru na pozici (0,2), tj. 1. sloupec, 3. ˇra´dek. putc( ’A’ ) ; Zobrazen´ı znaku ”A”. puts( "BMPT") ; Zobrazen´ı ˇretˇezce znak˚ u ”BMPT”. command( 0x40 ) ; Z´apis 1bytov´e instrukce do LCD displeje. data( 0x0A ) ; Z´apis 1bytov´ ych dat do LCD displeje.
Naprogramujte aplikaci, kter´a vyuˇzije prvn´ıch pˇet funkc´ı z tabulky 6.2. Nezapomeˇ nte
34
Mikroprocesorov´a technika a embedded syst´emy
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.h". V hlavn´ı funkci aplikace inicializujte LCD displej a n´aslednˇe na r˚ uzn´e pozice vypiˇste libovoln´e znaky a ˇretˇezce. V´ ystupn´ı port A, ke kter´emu je LCD displej pˇripojen nen´ı potˇreba nastavovat – to je jiˇz provedeno ve inicializaˇcn´ı funkci displeje. Aplikaci ukonˇcete pr´azdnou nekoneˇcnou smyˇckou. Bod 3. 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 ˇcasovaˇce. Toto pˇreruˇsen´ı bude inkrementovat stav 4bitov´eho bin´arn´ıho ˇc´ıtaˇce (viz poˇc´ıtaˇcov´e cviˇcen´ı 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 funkce lcd puts(). Konkr´etn´ı pouˇzit´ı a syntaxi uveden´ ych pˇr´ıkaz˚ u ukazuje zdrojov´ y k´od 6.2. Zdrojov´ y k´ od 6.2: Kombinace v´ ypisu ˇretˇezce a celoˇc´ıseln´e hodnoty na znakov´ y displej. 1 2 3 4 5 6
#include <s t d i o . h> // s t a n d a r d n´ı I /O knihovna ( nutn´e pro s p r i n t f ) ... char buffer [ 1 6 ] ; // g l o b . promˇenn´a ˇr e t ˇe z c e k z o b r a z . na d i s p l e j i ... // n a p l nˇe n´ı ˇr e t ˇe z c e b u f f e r pˇr´ıs l uˇs n y ´ m textem sprintf ( buffer , ” Hodnota = \%d ” , temp ) ;
7
// z o b r a z e n´ı ˇr e t ˇe z c e na d i s p l e j i lcd_puts ( buffer ) ; ...
8 9 10
6.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Na LCD displeji realizujte jednoduch´e menu, ve kter´em se budete pohybovat pomoc´ı tlaˇc´ıtek. • Vytvoˇrte dvojici nov´ ych znak˚ u, kter´e bude moˇzn´e zobrazit na LCD displeji. Dostupn´a znakov´a sada LCD displeje je zobrazena v pˇr´ıloze D. 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 0 do adresy 7. Tento u ´sek pamˇeti se naz´ yv´a 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 ˇra´dek). Pˇr´ıklad novˇe definovan´ ych symbol˚ u je zn´azornˇen na obr´azku 6.3. Do podobn´e matice si postupnˇe zn´azornˇete dva znaky, kter´e chcete nadefinovat. Nov´ y znak m´a smysl uloˇzit do pamˇeti CGRAM na sam´em zaˇca´tku aplikace. Pozor, po odpojen´ı nap´ajen´ı LCD displeje budou znaky ztraceny. 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 pˇr´ıjem 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, tedy lcd clrscr(). Zobrazit znak, uloˇzen´ y
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
0b01110 0b11111 0b11111 0b11111 0b11111 0b11111 0b11111 0b11111
(a) 100 %
0b01110 0b11111 0b10001 0b10001 0b10001 0b11111 0b11111 0b11111
(b) 40 %
35
0b01110 0b11111 0b10001 0b10001 0b10001 0b10001 0b10001 0b11111
(c) 0 %
Obr´ azek 6.3: Novˇe definovan´e znaky pro LCD displej – indik´ator nabit´ı baterie. na adrese 0 lze pomoc´ı funkce lcd putc( 0 ). Na LCD displeji souˇcasnˇe zobrazte vaˇse dva nov´e znaky.
6.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı pˇredstavuje moˇznost propojen´ı 7segmentov´eho displeje a LCD displeje s mikrokontrol´erem AVR. Pro zobrazen´ı hodnot na 7segmentov´em displeji byla pouˇzita metoda multiplexov´an´ı. Pro vz´ajemnou komunikaci s LCD byla pouˇzita 4bitov´a verze datov´e komunikace a knihovna funkc´ı v jazyce C, dostupn´a na Internetu [Fle06]. Studenti si tak osvojili vol´an´ı pomocn´ ych funkc´ı z knihovny.
6.6
Kontroln´ı ot´ azky
Ot´ azka 6.1 Vysvˇetlete pojem “multiplexov´an´ı” 7segmentov´eho displeje. Ot´ azka 6.2 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.3 V bin´arn´ı podobˇe zapiˇste matici, reprezentuj´ıc´ı znak ”A” ve znakov´e sadˇe LCD displeje.
36
Mikroprocesorov´a technika a embedded syst´emy
7
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 mikrokontrol´eru ATmega16 jeden A/D pˇrevod? 3. Liˇs´ı se nˇejak n´asleduj´ıc´ı zp˚ usoby vkl´adan´ı knihovny v jazyce C: #include a #include "nazev knihovny.h"?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je pouˇzit´ı intern´ıho A/D pˇrevodn´ıku mikrokontrol´eru ATmega16 ke zpracov´an´ı analogov´ ych sign´al˚ u. Dalˇs´ım c´ılem cviˇcen´ı je aplikace PWM sign´alu pˇri D/A pˇrevodu a zobrazen´ı dat na LCD displeji. Studenti si osvoj´ı ovl´ad´an´ı intern´ıch perif´eri´ı pomoc´ı pˇr´ısluˇsn´ ych kontroln´ıch registr˚ u.
7.1
Zad´ an´ı
1. S pomoc´ı katalogov´eho listu ATmega16 si pˇripravte potˇrebn´ y obsah ˇr´ıdic´ıch registr˚ u A/D pˇrevodn´ıku. 2. Vytvoˇrte aplikaci s intern´ım A/D pˇrevodn´ıkem. 3. Naprogramujte aplikaci kombinuj´ıc´ı A/D pˇrevod a generov´an´ı audio sign´alu.
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. N´asleduj´ıc´ı poˇc´ıtaˇcov´e cviˇcen´ı je vˇenov´ano A/D pˇrevodn´ıku a aplikaci PWM sign´alu (obdoba poˇc´ıtaˇcov´eho cviˇcen´ı 4). 7.2.1
Analogovˇ e digit´ aln´ı pˇ revodn´ık
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 audio sign´alu, velikost mˇeˇren´eho napˇet´ı, apod. Analogovˇe digit´aln´ı pˇrevod je ve sv´e podstatˇe ot´azkou proporc´ı, tj. jak velkou hodnotu m´a vstupn´ı sign´al vzhledem k maxim´aln´ımu (referenˇcn´ımu) rozsahu pˇrevodn´ıku. Napˇr´ıklad, pokud m´a vstupn´ı analogov´ y sign´al hodnotu 2 V a maxim´aln´ı rozsah pˇrevodn´ıku je 5 V, reprezentuje v´ ystupn´ı digit´aln´ı hodnota 40 % pln´eho rozsahu. Pouˇzijeme-li jin´e 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´ı hodnota A/D pˇrevodn´ıku je reprezentov´ana posloupnost´ı bit˚ u. Poˇcet tˇechto bit˚ u specifikuje mnoˇzstv´ı 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´ı.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
37
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 registrov´ y p´ar s digit´aln´ı hodnotou pˇreveden´eho analogov´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, kter´ y ˇr´ıd´ı A/D pˇrevodn´ık a za 13 cykl˚ u pro vˇsechny n´asleduj´ıc´ı vzorky. Uv´aˇz´ıme-li, ˇze doporuˇcen´a frekvence hodinov´eho sign´alu A/D pˇrevodn´ıku mikrokontrol´eru ATmega16 mus´ı b´ yt v rozmez´ı od 50 kHz do 200 kHz, je moˇzn´e dos´ahnout rychlosti pˇrevodu aˇz 15,3 kSPS (Samples Per Second). A/D pˇrevodn´ık obsaˇzen´ y v ATmega16 je 10bitov´ y. 7.2.2
Z´ asuvn´ y audio modul
Pro generov´an´ı analogov´ ych sign´al˚ u bude vyuˇzit z´asuvn´ y modul, jehoˇz obvodov´e zapojen´ı je zobrazeno na obr´azku 7.1. Modul obsahuje dvojici zdroj˚ u: prvn´ı (pˇrep´ınaˇc S1 v poloze 3) pˇriv´ad´ı na pin PA0 periodick´ y sign´al troj´ uheln´ıkov´eho tvaru, generovan´ y dvojic´ı operaˇcn´ıch zesilovaˇc˚ u TLC272. Jeho periodu i napˇet’ov´e u ´rovnˇe zjist´ıte pˇri ˇreˇsen´ı bodu 2.
Obr´ azek 7.1: Obvodov´e zapojen´ı z´asuvn´eho audio modulu. Druhou moˇznost´ı z´asuvn´eho modulu (pˇrep´ınaˇc S1 v poloze 1, viz obr´azek 7.1) je vyuˇzit´ı audio pamˇeti ISD1730 firmy Nuvoton [Nuv10]. Tento integrovan´ y obvod umoˇzn ˇuje
38
Mikroprocesorov´a technika a embedded syst´emy
nahr´at a n´aslednˇe pˇrehr´avat cca 30 s audio sign´alu se vzorkovac´ı frekvenc´ı danou extern´ım rezistorem R5 (v naˇsem pˇr´ıpadˇe fs = 8 kHz).
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´ı katalogov´eho listu [Atm16], nebo programu AVR Wizard [Sev08] si pˇripravte hodnoty obou ˇr´ıdic´ıch registr˚ u. V registru ADMUX nastavte nap´ajec´ı napˇet´ı AVCC jako referenˇcn´ı a 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´ı 50 kHz aˇz 200 kHz (max. 250 kHz). 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 16 MHz. Bod 2. Naprogramujte aplikaci pro mikrokontrol´er ATmega16 v jazyce C, kter´a opakovanˇe vzorkuje vstupn´ı sign´al, generovan´ y z´asuvn´ ym modulem. Pro pˇripojen´ı tohoto sign´alu pˇrepnˇete pˇrep´ınaˇc na modulu do doln´ı polohy. 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 z internetov´ ych str´anek pˇredmˇetu, nebo pouˇzijte z poˇc´ıtaˇcov´eho cviˇcen´ı 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 poˇc´ıtaˇcov´em cviˇcen´ı). Vzhledem k situaci, ˇze intern´ı A/D pˇrevodn´ık je 8kan´alov´ y a vyuˇz´ıv´a piny PA0 (ADC0) aˇz PA7 (ADC7) um´ıstˇen´e na portu A (ke kter´emu je ovˇsem pˇripojen tak´e LCD displej, viz sch´ema zapojen´ı na obr´azku 6.2), 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). 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. Naprogramujte obsluhu pˇreruˇsen´ı, kter´a se spust´ı po dokonˇcen´ı A/D pˇrevodu. Zobrazte hodnotu A/D pˇrevodu na LCD displeji. Pˇreveden´a hodnota je uloˇzena ve dvou datov´ ych registrech ADCH:L (ADC Data Register). V jazyce C je tento registrov´ y p´ar sjednocen do jedin´e 16bitov´e promˇenn´e ADCW, kterou m˚ uˇzete v aplikaci vyuˇz´ıt. Pomoc´ı LED diod vytvoˇrte tzv. bar graf, kdy poˇcet rozsv´ıcen´ ych LED diod koresponduje s u ´rovn´ı analogov´eho sign´alu. Bod 3. Naprogramujte jednoduch´ y audio gener´ator. Pˇrep´ınaˇc na z´asuvn´em modulu pˇrepnˇete do horn´ı polohy. Nyn´ı je vstupn´ı kan´al A/D pˇrevodn´ıku mikrokontrol´eru spojen s v´ ystupem audio pamˇeti ISD1730. Ta obsahuje pˇribliˇznˇe 30 s zvukov´eho sign´alu, kter´ y neust´ale pˇrehr´av´a. Hodnoty vzork˚ u lze vyuˇz´ıt k nastavov´an´ı komparaˇcn´ı u ´rovnˇe ˇcasovaˇce/ˇc´ıtaˇce, tj. ke generov´an´ı PWM sign´alu. Je-li vhodnˇe nastavena perioda PWM sign´alu (frekvence mus´ı b´ yt nˇekolikan´asobnˇe vyˇsˇs´ı neˇz je vzorkovac´ı frekvence audio sign´alu), lze jeho pˇriveden´ım na akustick´ y mˇeniˇc generovat melodii (hudbu)!
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
39
Prostudujte si zapojen´ı v´ yvojov´e desky ATmega16 (viz pˇr´ıloha C). Ke kter´emu pinu mikrokontrol´eru je pˇripojen reproduktor? Kter´ y z intern´ıch ˇcasovaˇc˚ u/ˇc´ıtaˇc˚ u pro generov´an´ı melodie tedy pouˇzijete? Ze znalosti doby trv´an´ı A/D pˇrevodu vyberte pˇreddˇeliˇcku hodinov´eho sign´alu, aby byl vstupn´ı sign´al vzorkov´an pˇribliˇznˇe 8 kHz. Pro generov´an´ı PWM sign´alu pouˇzijte Fast PWM, inverting mode a co nejvyˇsˇs´ı frekvenci generovan´eho sign´alu. Vyuˇzijte pˇreruˇsen´ı po dokonˇcen´ı A/D pˇrevodu, kter´e zajist´ı plnˇen´ı komparaˇcn´ıho registru ˇcasovaˇce/ˇc´ıtaˇce. Pouˇzijte k tomu pˇr´ımo hodnotu A/D pˇrevodu, kterou je ovˇsem potˇreba zmenˇsit z 10bitov´e hodnoty na 8bitovou. Nepouˇz´ıv´ate-li free-running m´od A/D pˇrevodn´ıku, nezapomeˇ nte na konci obsluhy pˇreruˇsen´ı opˇet zah´ajit dalˇs´ı A/D pˇrevod. Je d˚ uleˇzit´e, aby doba v´ ykonu pˇreruˇsen´ı byla co nejkratˇs´ı, proto v t´eto aplikaci nepouˇz´ıvejte LCD displej. Komunikace s n´ım totiˇz trv´a des´ıtky aˇz stovky milisekund.
7.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Rozˇsiˇrte aplikaci z bodu 2 o mˇeˇren´ı periody vzorkovan´eho sign´alu, pˇrip. zobrazte na LCD displeji hodnotu napˇet´ı VP −P . • Navrhnˇete aplikaci, vyuˇz´ıvaj´ıc´ı intern´ı kompar´ator mikrokontrol´eru.
7.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo 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 PWM gener´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´ı poˇc´ıtaˇcov´eho cviˇcen´ı by studenti mˇeli b´ yt schopni pouˇz´ıt obˇe intern´ı perif´erie a ˇr´ıdit tak A/D pˇrevod nebo generovat akustick´ y sign´al prostˇrednictv´ım PWM.
7.6
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´ı a jak´e pˇri pouˇzit´ı extern´ıho zdroje 5 V? Ot´ azka 7.2 Na ˇcem z´avis´ı pˇresnost mˇeˇren´ı periody analogov´eho sign´alu z bodu 2? Ot´ azka 7.3 Proˇc mus´ı b´yt v bodˇe 3 splnˇena podm´ınka fs fP W M ?
40
Mikroprocesorov´a technika a embedded syst´emy
8
S´ eriov´ y pˇ renos dat
Test pˇ redchoz´ıch znalost´ı 1. Jak´a je struktura asynchronn´ıho r´amce? Co je to paritn´ı bit a jak´ ym zp˚ usobem se vypoˇcte? 2. Jak´a je struktura adresn´ıho a datov´eho r´amce na sbˇernici I2C? 3. Jak´ ymi zp˚ usoby je moˇzn´e v jazyce C snadno naprogramovat cyklus typu: opakuj dokud i 6= 0?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem poˇc´ıtaˇcov´eho cviˇcen´ı je sezn´amit studenty s ˇr´ızen´ım s´eriov´e komunikace pomoc´ı UART a sbˇernice I2C. Oba tyto zp˚ usoby s´eriov´e komunikace podporuj´ı intern´ı perif´erie mikrokontrol´eru ATmega16 s oznaˇcen´ım USART a TWI. To umoˇzn´ı program´atorovi snadnou implementaci s´eriov´e komunikace pro embedded aplikace.
8.1
Zad´ an´ı
1. Seznamte se se strukturou asynchronn´ıho r´amce. 2. V jazyce C sestavte program pro mikrokontrol´er ATmega16, kter´ y vyˇsle datov´ y r´amec pomoc´ı jednotky USART. 3. V jazyce C sestavte program, kter´ y bude pˇrepos´ılat pˇrijat´a s´eriov´a data zpˇet do poˇc´ıtaˇce. 4. V jazyce C vytvoˇrte program pro ˇr´ızen´ı s´eriov´e komunikace po sbˇernici I2C.
8.2 8.2.1
Teoretick´ e poznatky Asynchronn´ı komunikace UART
Pod oznaˇcen´ım UART (Universal Asynchronous Receiver and Transmitter) se skr´ yv´a integrovan´ y hardware realizuj´ıc´ı asynchronn´ı 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. U asynchronn´ı komunikace mohou b´ yt data vysl´ana po s´eriov´e lince v libovoln´em okamˇziku. Na rozd´ıl od komunikace synchronn´ı, nen´ı u asynchronn´ıho zp˚ usobu pˇren´aˇsena informace o ˇcasov´e 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 start 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 zabezpeˇcen´ı dat (lich´a – Odd, nebo sud´a – Even parita) a jeden nebo dva stop bity (log. 1). M´od UART r´amce je moˇzn´e zapsat zkr´acenˇe: napˇr. 8N2 pro r´amec s 8 datov´ ymi bity, ˇza´dnou paritou a 2 stop bity. Uk´azka jednoho
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
0
1
1
neˇcinn´ y stav start LSB
0
1
0
0
1
0
1
MSB parita stop
41
1 stop neˇcinn´ y stav
TB
Obr´ azek 8.1: Struktura asynchronn´ıho r´amce pro m´od 7E2 (7 datov´ ych bit˚ u, sud´a parita, 2 stop bity).
r´amce v m´odu 7E2 a datov´e slovo 0b1001011 je zn´azornˇena na obr´azku 8.1. (TB ud´av´a bitovou periodu.) 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 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 hodnot´ach, pˇriˇcemˇz bˇeˇzn´e jsou hodnoty 9 600, 19 200, ˇci 38 400 Bd. Pro mikrokontrol´ery AVR je potˇreba konkr´etn´ı hodnotu symbolov´e rychlosti pˇrepoˇc´ıtat s ohledem na ˇr´ıdic´ı frekvenci mikrokontrol´eru 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 fCP U −1 , (8.1) UBRRH:L = round 16 · SR kde SR je poˇzadovan´a hodnota symbolov´e rychlosti v Bd a funkce round() realizuje zaokrouhlen´ı. V pˇr´ıpadˇe, ˇze zvolen´a symbolov´a rychlost je vˇetˇs´ı neˇz 2 400 a frekvence fCP U = 16 MHz, pak staˇc´ı naplnit pouze niˇzˇs´ı registr UBRRL; vyˇsˇs´ı registr UBRRH obsahuje nuly. 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ˇcet 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 pomoc´ı pˇrevodn´ıku u ´rovn´ı a konektoru na v´ yvojov´e desce v laboratoˇri spojeny se s´eriov´ ym rozhran´ım osobn´ıho poˇc´ıtaˇce.
42
8.2.2
Mikroprocesorov´a technika a embedded syst´emy
Sbˇ ernice I2C
Sbˇernice I2C (Inter-Integrated Circuit) byla vyvinuta firmou Philips Semiconductor pro komunikaci mezi d´ılˇc´ımi bloky v r´amci jednoho zaˇr´ızen´ı. Tato sbˇernice je tvoˇrena dvojic´ı sign´al˚ u, pˇredstavuj´ıc´ı datov´ y kan´al SDA (Synchronous Data) a hodinov´ y sign´al SCL (Synchronous Clock). Komunikace reprezentuje hierarchick´e spojen´ı nadˇrazen´eho zaˇr´ızen´ı ´ (Master) a podˇr´ızen´ ych obvod˚ u (Slave). Ukolem nadˇrazen´ ych obvod˚ u je ˇr´ızen´ı cel´e komunikace, vzn´aˇsen´ı poˇzadavk˚ u a generov´an´ı hodinov´eho sign´alu. Kaˇzd´ y podˇr´ızen´ y obvod m´a implementov´anu svou jedineˇcnou adresu, pomoc´ı n´ıˇz je adresov´an. Komunikace po sbˇernici je ˇr´ızena komunikaˇcn´ım protokolem, kter´ y popisuje zah´ajen´ı komunikace (Start Condition), strukturu adresn´ıho a datov´eho paketu, d´ale popisuje zp˚ usoby potvrzov´an´ı pˇrijat´ ych paket˚ u (Acknowledge) a ukonˇcen´ı komunikace (Stop Condition). Klidov´a u ´roveˇ n na obou link´ach sbˇernice I2C je v log. 1 a datovou linku sm´ı ovl´adat vˇzdy jen jedno zaˇr´ızen´ı. Pro u ´roveˇ n sign´alu na datov´e lince SDA plat´ı, ˇze mus´ı b´ yt nemˇenn´a v okamˇziku vysok´e u ´rovnˇe hodinov´eho sign´alu SCL. To neplat´ı pouze u startovac´ı a ukonˇcovac´ı podm´ınky. Adresn´ı paket se skl´ad´a ze 7bitov´e adresy podˇr´ızen´eho obvodu, d´ale z bitu urˇcuj´ıc´ı n´asledn´e ˇcten´ı nebo z´apis z/do obvodu. Paket je ukonˇcen potvrzovac´ım bitem ACK (Acknowledge) od podˇr´ızen´eho obvodu. Je-li hodnota tohoto bitu v log. 0, je potvrzen´ı platn´e, z˚ ustane-li v log. 1, potvrzen´ı neprobˇehlo a komunikace nebyla nav´az´ana. Adresa je zapisov´ana v poˇrad´ı od MSB k LSB. Datov´ y paket obsahuje 8bitov´e datov´e slovo, rovnˇeˇz v poˇrad´ı od MSB k LSB a je ukonˇcen potvrzovac´ım bitem ACK s aktivn´ı u ´rovn´ı v log. 0. Pˇr´ıklad komunikace mezi mikrokontrol´erem ATmega16 (Master) a expand´erem portu PCF8574 (Slave) je zn´azornˇen na obr´azku 8.2. Adresa podˇr´ızen´eho obvodu je 0b0100000 a datov´e slovo, kter´e bylo zaps´ano do expand´eru m´a hodnotu 0b01000011.
ˇ Obr´ azek 8.2: Casov´ e pr˚ ubˇehy na sbˇernici I2C pˇri komunikaci s expand´erem portu PCF8574. Mikrokontrol´er ATmega16 obsahuje intern´ı perif´erii, pomoc´ı n´ıˇz je moˇzn´e ovl´adat komunikaci na sbˇernici I2C. Jedn´a se o jednotku s n´azvem TWI (Two-wire Serial Interface).
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
43
Pro z´akladn´ı obsluhu jednotky je nutn´e vyuˇz´ıt pˇredevˇs´ım datov´ y registr pro vys´ıl´an´ı i pˇr´ıjem dat TWDR (TWI Data Register), d´ale ˇr´ıdic´ı registr TWCR (TWI Control Register) a registr TWBR (TWI Bit Rate Register) pro nastaven´ı frekvence hodinov´eho sign´alu fSCL . Ta se zpravidla pohybuje do 400 kHz. Pro danou frekvenci hodinov´eho sign´alu mikrokontrol´eru fCP U a pˇreddˇeliˇcku hodinov´eho sign´alu jednotky TWPS = 1, je frekvence generovan´eho sign´alu SCL d´ana n´asleduj´ıc´ım vztahem fSCL =
fCP U . 16 + 2 · TWBR
(8.2)
Ze vztahu (8.2) je patrn´e, ˇze frekvenci fSCL je moˇzn´e mˇenit pouze hodnotou, uloˇzenou v registru TWBR (TWI Bit Rate Register).
8.3
Pokyny k zad´ an´ı
Bod 1. Dle vztahu (8.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 400 Bd. Parametry vyb´ırejte podle moˇznost´ı programu Terminal [Ter09] (viz obr´azek 8.3), pomoci kter´eho budete kontrolovat vyslan´a data. Zvolte si form´at r´amce a datov´e slovo, kter´e budete cht´ıt vyslat. Nakreslete ˇcasov´ y pr˚ ubˇeh takov´eho asynchronn´ıho r´amce podle obr´azku 8.1.
Obr´ azek 8.3: Freewarov´a aplikace Terminal pro ovl´ad´an´ı s´eriov´eho portu poˇc´ıtaˇce [Ter09].
Bod 2. V prostˇred´ı AVR Studio naprogramujte v jazyce C aplikaci pro mikrokontrol´er ATmega16, kter´a bude schopna vys´ılat asynchronn´ı r´amec pomoc´ı jednotky USART. V katalogov´em listu mikrokontrol´eru ATmega16 [Atm16], pˇr´ıp. pomoc´ı programu AVR Wizard 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 ˇ ıdic´ı registry UBRRH UCSRC nastavte v´ami zvolenou strukturu asynchronn´ıho r´amce. R´ a UCSRC sd´ıl´ı stejn´ y pamˇet’ov´ y prostor. Pro rozliˇsen´ı z´apisu do registru UCSRC je nutn´e
44
Mikroprocesorov´a technika a embedded syst´emy
vˇzdy nastavit bit URSEL. Pro vysl´an´ı datov´eho r´amce staˇc´ı byte zapsat 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 vys´ılan´eho r´amce. K testov´an´ı tohoto bitu vyuˇzijte nˇekterou z funkc´ı uveden´ ych v pˇr´ıloze B.4. 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 symbolovou 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´ı 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 makra 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ˇela v pˇrij´ımac´ı ˇca´sti 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. Bod 4. Vytvoˇrte nov´ y projekt v prostˇred´ı AVR Studio a pro mikrokontrol´er ATmega16 naprogramujte v jazyce C aplikaci, kter´a umoˇzn´ı nav´az´an´ı komunikace s obvodem expand´eru portu PCF8574, kter´ y je pˇripojen ke sbˇernici I2C. Mikrokontrol´er bude ve funkci ˇr´ıdic´ıho obvodu Master a expand´er v podˇr´ızen´e funkci Slave. V ˇr´ıdic´ıch registrech jednotky TWI nastavte bitov´e slovo odpov´ıdaj´ıc´ı frekvenci hodinov´eho sign´alu fSCL = 100 kHz dle rovnice (8.2), pˇreddˇeliˇcku hodinov´eho sign´alu ponechte na hodnotˇe 1. Popis ˇr´ıdic´ıch registr˚ u naleznete v katalogov´em listu [Atm16], ˇca´st Two-wire Serial Interface. Pokud pouˇzijete k nastaven´ı ˇr´ıdic´ıch registr˚ u pomocn´ y n´astroj AVR Wizard, nezapomeˇ nte, ˇze maxim´aln´ı frekvence mikrokontrol´eru, kterou lze pomoc´ı t´eto aplikace pouˇz´ıt je < 16 MHz! Struktura zdrojov´eho k´odu je naznaˇcena v pˇr´ıkladˇe 8.1. Knihovna pro komunikaci s jednotkou TWI byla vytvoˇrena podle [Atm16] a je dostupn´a na internetov´ ych str´ank´ach pˇredmˇetu. Nezapomeˇ nte vloˇzit hlaviˇckov´ y soubor t´eto knihovny do vaˇs´ı aplikace (ˇra´dek 2). Hlavn´ı funkce aplikace obsahuje nastaven´ı TWI perif´erie (ˇra´dek 5), d´ale je na sbˇernici I2C zah´ajena komunikace (ˇra´dek 6), vysl´ana adresa obvodu expand´eru SLA+W (ˇr´adek 7), n´asleduje vysl´an´ı datov´eho slova (ˇra´dek 8), a nakonec je komunikace ukonˇcena (ˇra´dek 9). Zobrazte si ˇcasov´e pr˚ ubˇehy obou sign´al˚ u sbˇernice I2C na osciloskopu (datov´ y sign´al SDA je pˇr´ıtomen na pinu PC1, hodinov´ y sign´al SCL na pinu PC0). Ovˇeˇrte spr´avnost generovan´ ych dat a frekvence hodinov´eho sign´alu.
8.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Naprogramujte aplikaci pro s´eriov´ y pˇrenos dat mezi mikrokontrol´erem ATmega16 a obvodem re´aln´eho ˇcasu PCF8583. Vytvoˇrte aplikaci, kter´a pˇrepos´ıl´a data mezi obvodem re´aln´eho ˇcasu (RTC – Real
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
45
ˇ ızen´ı komunikace prostˇrednictv´ım s´eriov´e sbˇernice I2C. Zdrojov´ y k´ od 8.1: R´ 1 2
#include #include ” t w i h . h”
// h l a v iˇc k o v y ´ s o u b o r pro m i k r o k o n t r o l´e r // knihovna pro s b ˇe r n i c i I2C (TWI)
int main ( void ) { ... twi_start ( ) ; twi_address_w ( . . . ) ; twi_write ( . . . ) ; twi_stop ( ) ; ... }
// // // // // // //
3 4 5 6 7 8 9 10 11
h l a v n´ı f u n k c e a p l i k a c e d o p iˇs t e n a s t a v e n´ı ˇr´ı d i c´ı c h r e g i s t r˚ u TWI v y s l ´a n´ı s t a r t o v a c´ı podm´ınky v y s l ´a n´ı a d r e s y SLA+W v y s l ´a n´ı datov´e ho paketu v y s l ´a n´ı u k o nˇc o v a c´ı podm´ınky d o p iˇs t e t ˇe l o h l a v n´ı f u n k c e
Time Clock) PCF8583 a mikrokontrol´erem ATmega16 pomoc´ı sbˇernice I2C. Strukturu datov´ ych registr˚ u RTC naleznete v katalogov´em listˇe [Rtc97]. Kromˇe adresace samotn´e souˇc´astky je potˇreba prov´est tak´e v´ ybˇer jednotliv´ ych datov´ ych registr˚ u obvodu RTC. Na LCD displeji si zobrazte u ´daje o minut´ach a sekund´ach. Knihovnu pro komunikaci se sbˇernic´ı I2C z pˇredeˇsl´eho pˇr´ıkladu je nutn´e doplnit o funkce realizuj´ıc´ı vysl´an´ı adresy SLA+R a ˇcten´ı datov´ ych slov z podˇr´ızen´eho obvodu.
8.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo student˚ um testovat asynchronn´ı komunikaci mezi mikrokontrol´erem ATmega16 a PC pomoc´ı jednotky UART. D´ale byla vyzkouˇsena komunikace mezi obvody Master a Slave po sbˇernici I2C. Studenti si osvojili dovednosti potˇrebn´e k ˇr´ızen´ı intern´ıch jednotek UART a TWI pomoc´ı kontroln´ıch registr˚ u a pouˇz´ıv´an´ı extern´ıch knihoven v jazyce C.
8.6
Kontroln´ı ot´ azky
Ot´ azka 8.1 Jak´ym zp˚ usobem vyhodnot´ı asynchronn´ı pˇrij´ımaˇc vyslan´a data 0b10100, bylli zvolen m´od 5N1, ale symbolov´a rychlost pˇrij´ımaˇce byla nastavena oproti vys´ılaˇci jako dvojn´asobn´a? Ot´ azka 8.2 Jak´e napˇet’ov´e u ´rovnˇe vyuˇz´ıv´a UART, RS-232 a I2C? Ot´ azka 8.3 Naznaˇcte poˇrad´ı r´amc˚ u na sbˇernici I2C pˇri komunikaci dle zad´an´ı z kapitoly 8.4.
46
Mikroprocesorov´a technika a embedded syst´emy
9
V´ yvojov´ e prostˇ red´ı Code Composer Studio
Test pˇ redchoz´ıch znalost´ı 1. Jak´ ymi prostˇredky je doc´ıleno paraleln´ıho zpracov´an´ı instrukc´ı a dat u sign´alov´ ych procesor˚ u? 2. Jak´e jsou praktick´e dopady programov´an´ı sign´alov´ ych procesor˚ u ve vyˇsˇs´ım programovac´ım jazyce, v jazyce symbolick´ ych adres a v line´arn´ım jazyce symbolick´ ych adres. 3. Jak´ ym zp˚ usobem lze v jazyce C naplnit jednorozmˇern´e pole jiˇz pˇri deklaraci?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem tohoto poˇc´ıtaˇcov´eho cviˇcen´ı je sezn´amen´ı se s v´ yvojov´ ym prostˇred´ım Code Composer Studio, kter´e slouˇz´ı k programov´an´ı mikrokontrol´er˚ u a sign´alov´ ych procesor˚ u firmy Texas Instruments. Pˇredevˇs´ım budou pˇredstaveny z´akladn´ı moˇznosti tohoto prostˇred´ı pro ladˇen´ı vyv´ıjen´ ych aplikac´ı. Sezn´amen´ı bude provedeno prostˇrednictv´ım modifikovan´e verze tutori´alu Code Composer Studio IDE, Developing a Simple Program [Tex01].
9.1
Zad´ an´ı
1. Seznamte se s v´ yvojov´ ym prostˇred´ı Code Composer Studio, urˇcen´e pro v´ yvoj a testov´an´ı aplikac´ı pro sign´alov´e procesory firmy Texas Instruments. 2. Naprogramujte aplikaci pro v´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u. 3. Pro simul´ator sign´alov´eho procesoru TMS3206713 naprogramujte kruhovou pamˇet’, vyuˇzitelnou pro implementaci FIR filtru.
9.2
Teoretick´ e poznatky
Sign´alov´e procesory slouˇz´ı k efektivn´ı realizaci algoritm˚ u ˇc´ıslicov´eho zpracov´an´ı sign´al˚ u. K tomu je uzp˚ usobena tak´e jejich vnitˇrn´ı struktura. V´ yvoj sign´alov´ ych procesor˚ u smˇeˇruje k paraleln´ım syst´em˚ um, kter´e umoˇzn ˇuj´ı souˇcasn´ y v´ ykon nˇekolika proces˚ u (instrukc´ı) a tak´e souˇcasn´ y v´ ykon nˇekolika nez´avisl´ ych datov´ ych tok˚ u. Tato struktura je podle [Fly66] oznaˇcov´ana jako MI/MD (Multiple Instruction Stream/Multiple Data Stream). Pro zv´ yˇsen´ı poˇcetn´ıho v´ ykonu je vyuˇzito nˇekolik funkˇcn´ıch jednotek, kter´e jsou navz´ajem nez´avisl´e a mohou pracovat souˇcasnˇe. Strukturu MI/MD vyuˇz´ıvaj´ı tak´e 32bitov´e sign´alov´e procesory firmy Texas Instruments s oznaˇcen´ım TMS320C6000. ˇ Rada TMS320C6000 obsahuje celkem tˇri rodiny sign´alov´ ych procesor˚ u. Nejstarˇs´ı ˇradou je C62xx, vyuˇz´ıvaj´ıc´ı pouze paraleln´ıho zpracov´an´ı instrukc´ı. Na ni navazuje mnohem v´ ykonnˇejˇs´ı rodina s oznaˇcen´ım C64xx, kter´a jiˇz umoˇzn ˇuje tak´e paraleln´ı zpracov´an´ı dat. Obˇe rodiny jsou tvoˇreny procesory s pevnou ˇr´adovou ˇc´arkou (fixed-point). Z´astupci procesor˚ u s plovouc´ı ˇra´dovou ˇc´arkou (floating-point) jsou vyr´abˇeny pod oznaˇcen´ım C67xx. Architektura vˇsech tˇechto sign´alov´ ych procesor˚ u je oznaˇcov´ana jako VLIW (Very Long Instruction Word).
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
47
V poˇc´ıtaˇcov´ ych cviˇcen´ıch budeme vyuˇz´ıvat sign´alov´ y procesor s plovouc´ı ˇra´dovou ˇca´rkou TMS320C6713, kter´ y je obecnˇe vhodn´ y pro sezn´amen´ı se s programov´an´ım algoˇ ıseln´a reprezentace s plovouc´ı ˇra´dovou ˇca´rkou totiˇz ritm˚ u pro ˇc´ıslicov´e zpracov´an´ı dat. C´ vykazuje obrovsk´ y dynamick´ y rozsah a prakticky odpad´a nutnost uvaˇzov´an´ı pˇreteˇcen´ı hodnot pouˇzit´ ych promˇenn´ ych. Rovnˇeˇz pro sezn´amen´ı se s programov´an´ım aplikac´ı pro sign´alov´e procesory je vhodn´e vyuˇz´ıt vyˇsˇs´ıho programovac´ıho jazyka a nikoliv jazyka symbolick´ ych adres. Vzhledem k moˇznostem optimalizaˇcn´ıch n´astroj˚ u pˇrekladaˇc˚ u zdrojov´eho k´odu, velikostem pamˇet´ı a hodnotˇe ˇr´ıdic´ıho hodinov´eho sign´alu, je v mnoh´ ych aplikac´ıch programov´an´ı v jazyce C naprosto dostaˇcuj´ıc´ı. Proto je u ´vodn´ı cviˇcen´ı se sign´alov´ ymi procesory zamˇeˇreno v´ yhradnˇe na programov´an´ı v tomto jazyce. V poˇc´ıtaˇcov´ ych cviˇcen´ıch budeme vyuˇz´ıvat n´astroj Code Composer Studio verze 3.1.
9.3
Pokyny k zad´ an´ı
Bod 1. Sestavte a v simul´atoru odlad’te aplikaci realizuj´ıc´ı zes´ılen´ı vstupn´ıho harmonick´eho sign´alu. Nastaven´ı CCS
Spust’te program Setup CCStudio v.3.1, jehoˇz z´astupce je na ploˇse. V lev´e doln´ı ˇca´sti otevˇren´eho okna stisknˇete tlaˇc´ıtko Remove All. T´ım odstran´ıte veˇsker´a nastaven´ı aplikace. Pot´e kliknˇete na z´aloˇzku Factory Boards a z nab´ıdky vyberte poloˇzku C6713 Device Cycle Accurate Simulator a v´ ybˇer potvrd’te tlaˇc´ıtkem << Add. V ˇca´sti System Configuration se tato volba zobraz´ı (viz obr´azek 9.1). Aplikaci ukonˇcete stiskem tlaˇc´ıtka Save & Quit a volbou Yes, v n´asleduj´ıc´ım dialogov´em oknˇe, m˚ uˇzete spustit v´ yvojov´e prostˇred´ı Code Composer Studio.
Obr´ azek 9.1: V´ ybˇer simul´atoru sign´alov´eho procesoru TMS320C6713 pro prostˇred´ı Code Composer Studio.
Vytvoˇ ren´ı projektu
Vytvoˇrte nov´ y projekt (Project→New...), zadejte jeho n´azev, um´ıstˇen´ı na lok´aln´ım disku, Project Type ponechte Executable (.out) a c´ılovou rodinu procesoru
48
Mikroprocesorov´a technika a embedded syst´emy
Target zvolte TMS320C67XX. Tlaˇc´ıtkem Finish dokonˇc´ıte tvorbu nov´eho projektu. Vytvoˇren´ y projekt m´a pˇr´ıponu .pjt. Z internetov´ ych str´anek pˇredmˇetu si st´ahnˇete zdrojov´e k´ody uk´azkov´e aplikace zesileni c soubory.zip a nakop´ırujte je do vytvoˇren´eho adres´aˇre. Jedn´a se o soubory simulator cmd.cmd, obsahuj´ıc´ı popis obsazen´ı pamˇeti sign´alov´eho procesoru, d´ale datov´ y soubor sine.dat se vzorky harmonick´eho sign´alu a pˇredevˇs´ım zdrojov´ y soubor main c.c, obsahuj´ıc´ı hlavn´ı funkci vyv´ıjen´e aplikace. Pomoc´ı pˇr´ıkazu Project→Add Files to Project... postupnˇe vloˇzte zdrojov´ y soubor .c a konfiguraˇcn´ı .cmd do vytvoˇren´eho projektu. V lev´e ˇca´sti v´ yvojov´eho prostˇred´ı, v tzv. inspektoru projektu (kter´ y sdruˇzuje vˇsechny pouˇzit´e soubory a knihovny) si y zdrove sloˇzce Source otevˇrete vloˇzen´ y zdrojov´ y soubor main c.c. Projdˇete si cel´ jov´ y k´od a ujasnˇete si funkci jednotliv´ ych pˇr´ıkaz˚ u. Obsah projektu uloˇzte pˇr´ıkazem Project→Save. Kompilace projektu
Bˇ eh programu
Breakpointy
Spust’te kompilaci cel´eho projektu pˇr´ıkazem Project→Rebuild All, nebo pˇr´ısluˇsn´ ym tlaˇc´ıtkem. Vˇsechny zdrojov´e soubory tak budou pˇrekompilov´any, pˇrevedeny do strojov´eho jazyka procesoru a budou pˇrilinkov´any vˇsechny potˇrebn´e knihovny. V´ ystup procesu je zobrazen v doln´ı ˇca´sti prostˇred´ı v z´aloˇzce Build, vˇcetnˇe identifikace pˇr´ıpadn´ ych chyb a upozornˇen´ı. Pˇr´ıkazem File→Load Program... Ctrl+L nahrajete z adres´aˇre Debug pr´avˇe pˇrekompilovan´ y k´od .out do pamˇeti sign´alov´eho procesoru – v tomto pˇr´ıpadˇe simul´atoru. (Pozn.: Automatick´e naˇc´ıt´an´ı pˇreloˇzen´eho k´odu do pamˇeti je moˇzn´e nastavit pomoc´ı Option→Customize..., na z´aloˇzce Program/Project Load a zatrˇzen´ım checkboxu Load Program After Build.) Naprogramovanou aplikaci spust’te pˇr´ıkazem Debug→Go Main Ctrl+M. V´ ykon aplikace se zastav´ı na zaˇca´tku hlavn´ı funkce programu. Aplikaci je moˇzn´e krokovat pˇr´ıkazem Debug→Step Into F11, spustit Debug→Run F5 a zastavit pˇr´ıkazem Debug→Halt Shift+F5. Vˇsechny pˇr´ıkazy pro ˇr´ızen´ı bˇehu aplikace maj´ı tak´e sv´a tlaˇc´ıtka se sch´ematick´ ymi ikonami vlevo od inspektora projektu. Pˇri spuˇstˇen´ı aplikace se v z´aloˇzce Stdout v doln´ı ˇca´sti prostˇred´ı vyp´ıˇse text Start aplikace. Zastavte chod aplikace. Dalˇs´ı ˇc´ast pr´ace s prostˇred´ım bude zamˇeˇrena na vkl´ad´an´ı breakpoint˚ u, krokov´an´ı programu a zobrazen´ı hodnot promˇenn´ ych. Znovunaˇctˇete pˇreloˇzenou aplikaci do pamˇeti procesoru File→Reload Program Ctrl+Shift+L. Dvoj´ım kliknut´ı na u si ho znovu zobrazte n´azev zdrojov´eho souboru main c.c v inspektoru projekt˚ v hlavn´ı ˇc´asti v´ yvojov´eho prostˇred´ı. Um´ıstˇete kurzor na ˇra´dek puts( "zpracov´ an´ ı dat...OK" ) ; v nekoneˇcn´e smyˇcce hlavn´ı funkce. Na toto m´ısto vloˇzte breakpoint pomoc´ı pˇr´ısluˇsn´eho tlaˇc´ıtka, zobrazuj´ıc´ı dlaˇ n, nebo kl´avesou F9. (Vlevo od zaˇca´tku ˇra´dku se objev´ı ˇcerven´a znaˇcka signalizuj´ıc´ı, ˇze v tomto m´ıstˇe se v´ ykon programu vˇzdy pˇreruˇs´ı.) Otevˇrete oblast zobrazuj´ıc´ı hodnoty promˇenn´ ych View→Watch Window. Zde se za bˇehu programu zobrazuj´ı hodnoty zvolen´ ych promˇenn´ ych. Spust’te aplikaci pˇr´ıkazem Debug→Go Main Ctrl+M a n´aslednˇe Debug→Run F5. V´ ykon programu se skuteˇcnˇe pˇreruˇsil na vloˇzen´em breakpointu. V prav´e doln´ı ˇca´sti prostˇred´ı vyberte z´aloˇzku Watch 1. Po kliknut´ı na ikonu na zaˇc´atku ˇr´adku, je moˇzn´e zadat n´azev libovoln´e promˇenn´e, jej´ıˇz hodnotu chceme analyzovat. Zadejte identifik´ator zes´ılen´ı gain, kter´ y obsahuje hodnotu definovanou
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
49
na zaˇca´tku zdrojov´eho souboru jako MINGAIN. V z´aloˇzce Watch Locals se automaticky zobrazuj´ı pouze promˇenn´e, kter´e jsou pouˇzity v dan´e funkci. Vyzkouˇsejte si to krokov´an´ım programu pˇr´ıkazem Debug→Step Into F11. Testovac´ı data
Vizualizace dat
V n´asleduj´ıc´ım textu je pops´an zp˚ usob naˇc´ıt´an´ı testovac´ıch dat ze souboru pomoc´ı tzv. probe points a jejich vizualizace v prostˇred´ı CCS. Znovunaˇctˇete pˇreloˇzenou aplikaci do pamˇeti procesoru File→Reload Program Ctrl+Shift+L a ve zdrojov´em souboru opˇet nastavte kurzor na ˇra´dek s pˇr´ıkazem puts( "zpracov´ an´ ı dat...OK" ) ;. Kliknˇete na tlaˇc´ıtko Toggle Probe Point (ve stejn´e ˇca´sti jako breakpointy), coˇz se projev´ı svˇetle modrou znaˇckou u zaˇc´atku ˇr´adku. Zvolte pˇr´ıkaz File→File I/O..., kter´ y slouˇz´ı k nastaven´ı vˇsech pˇr´ıstupov´ ych bod˚ u. V z´aloˇzce File Input vloˇzte datov´ y soubor se vzorky harmonick´eho sign´alu – kliknˇete na tlaˇc´ıtko Add File a v domovsk´em adres´aˇri vaˇseho programu otevˇrete soubor sine.dat. V dialogov´em oknˇe File I/O nastavte v z´aloˇzce File Input adresu, kam se maj´ı ych vzorky sign´alu ze souboru kop´ırovat (Address: inp buffer), poˇcet naˇc´ıtan´ vzork˚ u (Length: 100), a jejich opakovan´e znovunaˇcten´ı (zatrhnout checkbox Wrap Around). Kliknˇete na tlaˇc´ıtko Add Probe Point, v otevˇren´em dialogov´em oknˇe d´ale kliknˇete na ˇra´dek zaˇc´ınaj´ıc´ı main c.c line ... a v roletce Connect To zvolte poloˇzku zaˇc´ınaj´ıc´ı FILE IN:.... Kliknˇete na tlaˇc´ıtko Replace a pouˇzit´ı sondy definitivnˇe potvrd´ıte postupn´ ym stiskem dvou tlaˇc´ıtek OK. T´ım je zajiˇstˇeno, ˇze do promˇenn´e inp buffer, pˇredstavuj´ıc´ı buffer se vstupn´ımi vzorky zpracov´avan´eho sign´alu, se bude periodicky naˇc´ıtat vˇzdy 100 vzork˚ u z datov´eho souboru sine.dat. V´ yvojov´e prostˇred´ı CCS umoˇzn ˇuje jednoduch´e grafick´e zobrazen´ı zpracov´avan´ ych dat. Pˇr´ıkazem View→Graph→Time/Frequency... otevˇrete dialogov´e okno, ve kter´em nastavte n´asleduj´ıc´ı vlastnosti. Titulek okna Graph Title zmˇen ˇte na Vstupn´ ı sign´ al, adresu pamˇeti Start Address, od kter´e se budou vzorky naˇc´ıtat ych Acquisition Buffer Size a zobrazozmˇen ˇte na inp buffer, poˇcet naˇc´ıtan´ van´ ych Display Data Size vzork˚ u nastavte na 100, vypnˇete automatickou zmˇenu mˇeˇr´ıtka Autoscale a maxim´aln´ı hodnotu v ose y Maximum Y-value sniˇzte na 1 000. Tlaˇc´ıtkem OK se v´am otevˇre nov´e okno pro zobrazen´ı ˇcasov´eho pr˚ ubˇehu vstupn´ıho sign´alu. Kliknˇete na toto okno prav´ ym tlaˇc´ıtkem a v kontextov´em menu vyberte Float In Main Window. Jeˇstˇe jednou spust’te pˇr´ıkaz View→Graph→Time/Frequency... a nastavte parametry Graph Title a Start Address tak´e pro v´ ystupn´ı sign´al, kter´ y je v pamˇeti ukl´ad´an od adresy out buffer. Opˇet pˇrerovnejte okna v hlavn´ı ˇca´sti prostˇred´ı kliknut´ım prav´ ym tlaˇc´ıtkem a pˇr´ıkazem Float In Main Window. Ujistˇete se, ˇze m´ate st´ale nastaven´ y breakpoint a probe na ˇra´dku s pˇr´ıkazem puts.... Spust’te chod aplikace pˇr´ıkazem Debug→Animate Alt+F5. Tento pˇr´ıkaz m´a podobnou funkci jako Debug→Run F5, tj. zastav´ı v´ ykon programu na pozici breakpointu, ale po aktualizaci vˇsech hodnot a promˇenn´ ych, automaticky pokraˇcuje ve v´ ykonu programu d´ale. V´ ykon programu pozastavte pˇr´ıkazem Debug→Halt Shift+F5. V z´aloˇzce Watch 1 zmˇen ˇte hodnotu promˇenn´e gain a program opˇetovnˇe spust’te Debug→Animate Alt+F5. T´ımto zp˚ usobem je moˇzn´e velmi u ´ˇcelnˇe ladit zdrojov´ y k´od vyv´ıjen´e aplikace, jak napov´ıd´a obr´azek 9.2. Pozn.: Vˇsechny breakpointy je moˇzn´e vypnout tlaˇc´ıtkem Remove all breakpoints a vˇsechny pˇr´ıstupov´e body tlaˇc´ıtkem Remove all Probe Points.
50
Mikroprocesorov´a technika a embedded syst´emy
Obr´ azek 9.2: V´ yvojov´e prostˇred´ı Code Composer Studio firmy Texas Instruments. Bod 2. Vytvoˇrte nov´ y projekt a v jazyce C naprogramujte aplikaci realizuj´ıc´ı v´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u. Do projektu si vloˇzte konfiguraˇcn´ı soubor simulator cmd.cmd z pˇredeˇsl´eho u ´kolu. Zdrojov´ y soubor .c si vytvoˇrte nov´ y – n´azev souboru m˚ uˇze b´ yt libovoln´ y a jeho struktura m˚ uˇze b´ yt dle 9.1. (Nezapomeˇ nte vytvoˇren´ y zdrojov´ y soubor rovnˇeˇz vloˇzit do projektu.) Necht’ je velikost obou vektor˚ u N = 2n , kde n si zvol´ıte. Hodnoty vektor˚ u si nadefinujte jiˇz pˇri deklaraci obou promˇenn´ ych. (Typ promˇenn´e zvolte float.) Hlavn´ı funkce d´ale obsahuje cyklus pro v´ ypoˇcet skal´arn´ıho souˇcinu a funkce pro v´ ypis informac´ı do konzoly Stdout v doln´ı ˇca´sti v´ yvojov´eho prostˇred´ı. Pro zobrazen´ı hodnoty promˇenn´e pouˇz´ıvejte funkci printf() (ˇr´adek 11), kter´a je definov´ana v knihovnˇe stdio.h (ˇr´adek 2). Aplikace mus´ı b´ yt korektnˇe zakonˇcena. Aplikaci pˇreloˇzte, odstraˇ nte pˇr´ıpadn´e chyby ˇci upozornˇen´ı a pˇreloˇzen´ y k´od nahrajte do procesoru. Otevˇrete si okno pro sledov´an´ı hodnot promˇenn´ ych (View→Watch Window ) a krokov´an´ım ovˇeˇrte spr´avn´ y chod vaˇs´ı aplikace. Bod 3. Vytvoˇrte nov´ y projekt v prostˇred´ı Code Composer Studio, vloˇzte do nˇej konfiguraˇcn´ı soubor, ˇr´ıdic´ı linkov´an´ı cel´eho projektu (tj. soubor simulator cmd.cmd). D´ale vytvoˇrte nov´ y zdrojov´ y soubor .c, kter´ y nezapomeˇ nte rovnˇeˇz pˇridat do projektu. Naprogramujte funkci tzv. kruhov´e pamˇeti (anglicky: Circular Buffer). Kruhov´a pamˇet’ pˇredstavuje jednorozmˇern´e pole, do kter´eho se postupnˇe zapisuj´ı nov´a data (napˇr. vzorky z A/D pˇrevodn´ıku). Jakmile se zap´ıˇse vzorek na posledn´ı pozici v kruhov´e pamˇeti, n´asleduj´ıc´ı vzorek je uloˇzen jiˇz od prvn´ı pozice. Dojde tak k pˇreps´an´ı nejstarˇs´ıho vzorku. Pozici v pamˇeti pro n´asleduj´ıc´ı vzorek je moˇzn´e specifikovat lok´aln´ı promˇennou ve funkci uka-
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
51
Zdrojov´ y k´ od 9.1: V´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u pro TMS320C6713. 1 2
#define N . . . #include <s t d i o . h>
// z v o l t e s i v e l i k o s t v s t u p n´ıc h v e k t o r˚ u // s t a n d a r d n´ı I /O knihovna
void main ( void ) { ... . . . ii ;
// d o p l n ˇ t e d e k l a r a c i v s t u p n´ıc h v e k t o r˚ u // d o p l n ˇ t e typ sumaˇc n´ıho indexu
3 4 5 6 7
f o r ( ii =0; ii
8 9 10 11 12 13 14
}
zatele. Princip pohybov´an´ı se v kruhov´e pamˇeti je naznaˇcen v tabulce 9.1. Tabulka 9.1: Princip vyuˇzit´ı kruhov´e pamˇeti o velikosti M + 1. Pozice v pamˇ eti
Vstupn´ı data Oznaˇ cen´ı vzorku
0 1 .. .
x(n − px) x(n − px + 1) .. .
px − 1 px px + 1 .. .
x(n − 1) x(n) x(n − M ) .. .
M −1 M
x(n − px − 2) x(n − px − 1)
pˇredeˇsl´ y vzorek aktu´aln´ı vzorek nejstarˇs´ı vzorek
Zvolte si poˇcet prvk˚ u ve vaˇs´ı pamˇeti a nejprve naprogramujte cyklus pro ukl´ad´an´ı libovoln´ ych dat. Spr´avnou funkci ovˇeˇrte krokov´an´ım v simul´atoru. N´aslednˇe doprogramujte tak´e v´ yˇcet vˇsech dat v pamˇeti od pˇredeˇsl´eho vzorku aˇz po nejstarˇs´ı dle tabulky 9.1 (viz k´od 9.2). Spr´avnou funkci opˇet ovˇeˇrte pomoc´ı simul´atoru. Kruhov´a pamˇet’ bude vyuˇzita v poˇc´ıtaˇcov´em cviˇcen´ı 10, proto je nutn´e tento bod zad´an´ı dokonˇcit!
9.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Realizace kruhov´e pamˇeti prostˇrednictv´ım adresov´an´ı modulo – v katalogov´em listu sign´alov´eho procesoru zjistˇete nastaven´ı pˇr´ısluˇsn´ ych ˇr´ıdic´ıch registr˚ u.
9.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo student˚ um sezn´amit se s v´ yvojov´ ym prostˇred´ım Code Composer Studio firmy Texas Instruments, kter´e slouˇz´ı k v´ yvoji a testov´an´ı aplikac´ı pro
52
Mikroprocesorov´a technika a embedded syst´emy
Zdrojov´ y k´ od 9.2: Realizace kruhov´e pamˇeti pro TMS320C6713. 1 2 3
#define M . . . #include <s t d i o . h> ...
// z v o l t e s i ˇr ´a d f i l t r u // s t a n d a r d n´ı I /O knihovna // p r o t o t y p y p o uˇz i t y ´ c h f u n k c´ı
void main ( void ) { ... while ( 1 ) {
// d e k l a r a c e promˇe nn´ y ch // nekoneˇc n´a smyˇcka
4 5 6 7 8
// v l o ˇz e n´ı jednoho vzorku ” v a l u e ” do kruhov´e pamˇe ti store_one_sample ( value ) ;
9 10 11
// v y p s ´ a n´ı vˇs e c h prvk˚ u kruhov´e pamˇe ti print_all_samples ( ) ;
12 13
}
14 15 16
} ...
ˇc´ıslicov´e syst´emy t´eto firmy. Pˇrestoˇze zm´ınˇen´e prostˇred´ı umoˇzn ˇuje tak´e v´ yvoj aplikac´ı v niˇzˇs´ıch jazyc´ıch, bylo toto cviˇcen´ı zamˇeˇreno pouze na programov´an´ı aplikac´ı v jazyce C. Studenti by mˇeli b´ yt schopni vytvoˇrit nov´ y projekt, prov´est jeho kompilaci a odladˇen´ı pomoc´ı intern´ıch n´astroj˚ u prostˇred´ı CCS.
9.6
Kontroln´ı ot´ azky
Ot´ azka 9.1 Jak´ym zp˚ usobem je v CCS moˇzn´e sledovat obsah vˇsech promˇenn´ych uvnitˇr libovoln´e funkce? Ot´ azka 9.2 Jak lze naprogramovat ukonˇcen´ı re´aln´e aplikace na DSP? Ot´ azka 9.3 Nakreslete v´yvojov´y diagram popisuj´ıc´ı pr´aci s kruhovou pamˇet´ı (ukl´ad´an´ı jednoho vzorku, v´yˇcet vˇsech uloˇzen´ych).
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
10
53
Filtrace sign´ al˚ u, implementace FIR filtru
Test pˇ redchoz´ıch znalost´ı 1. Co oznaˇcuj´ı zkratky FIR a IIR? 2. Jak´ ym zp˚ usobem prob´ıh´a adresov´an´ı modulo u sign´alov´ ych procesor˚ u? 3. Matematicky popiˇste funkci ˇc´ıslicov´eho filtru v ˇcasov´e a frekvenˇcn´ı oblasti. 4. Co je to doplˇ nkov´ y k´od (dvojkov´ y doplnˇek)?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem tohoto poˇc´ıtaˇcov´eho cviˇcen´ı je z´ıskat zkuˇsenosti s implementac´ı jednoduch´ ych algoritm˚ u na re´aln´ y sign´alov´ y procesor. Konkr´etnˇe je c´ılem vytvoˇrit FIR filtr a prakticky ovˇeˇrit jeho spr´avnou funkci.
10.1
Zad´ an´ı
1. Ovˇeˇrte funkci programu Scope, kter´ y umoˇzn ˇuje generov´an´ı, zobrazen´ı a frekvenˇcn´ı anal´ yzu sign´al˚ u prostˇrednictv´ım zvukov´e karty poˇc´ıtaˇce. 2. Pomoc´ı v´ yvojov´e desky TMS320C6713 DSK realizujte FIR filtr.
10.2
Teoretick´ e poznatky
ˇ ıslicov´e Mezi z´akladn´ı algoritmy pro ˇc´ıslicov´e zpracov´an´ı sign´al˚ u patˇr´ı bezesporu filtrace. C´ filtry se dˇel´ı na filtry s koneˇcn´ ym poˇctem vzork˚ u impulzn´ı odezvy (FIR – Finite Impulse Response) a s nekoneˇcn´ ym poˇctem (IIR – Infinite Impulse Response) [Jan01]. V tomto poˇc´ıtaˇcov´em cviˇcen´ı se budeme zab´ yvat pouze typem FIR. V´ ystupn´ı sign´al FIR filtru y(·) je d´an konvoluc´ı vzork˚ u vstupn´ıho sign´alu s vzorky impulzn´ı odezvy samotn´eho filtru, dle n´asleduj´ıc´ıho vztahu
y(n) =
M X
h(m) · x(n − m)
m=0
= h(0) · x(n) + h(1) · x(n − 1) + . . . + h(M ) · x(n − M ),
(10.1)
kde x(·) pˇredstavuje vstupn´ı vzorky filtrovan´eho sign´alu, h(·) jsou koeficienty filtru (vzorky impulzn´ı odezvy) a M je ˇra´d filtru.
10.3
Pokyny k zad´ an´ı
Bod 1. C´ılem u ´kolu je sezn´amit se s implementac´ı aplikac´ı na re´aln´ y sign´alov´ y procesor a vyuˇzit´ı funkc´ı pro naˇc´ıt´an´ı a ukl´ad´an´ı re´aln´ ych dat z/do analogov´eho kan´alu v´ yvojov´e desky TMS320C6713 DSP Starter Kit (DSK). Tato deska obsahuje 32bitov´ y sign´alov´ y procesor s plovouc´ı ˇra´dovou ˇc´arkou TMS320C6713 firmy Texs Instruments. J´adro procesoru je tvoˇreno VLIW (Very Long Instruction Word) architekturou a ˇr´ızeno hodinov´ ym
54
Mikroprocesorov´a technika a embedded syst´emy
sign´alem o frekvenci 225 MHz. Analogov´a data jsou pˇr´ıstupn´a prostˇrednictv´ım 32bitov´eho stereo kodeku TVL320AIC23 (AIC23) [Aic23], kter´ y umoˇzn ˇuje A/D a D/A pˇrevod. Podporovan´e vzorkovac´ı frekvence jsou 8, 16, 24, 32, 44,1, 48, a 96 kHz, kter´e lze softwarovˇe volit. Kodek zajiˇst’uje propojen´ı mezi 3,5 mm audio jackem a TMS320C6713 DSP dvojic´ı s´eriov´ ych kan´al˚ u McBSP (Multi-channel Buffered Serial Port). Kan´al McBSP0 je vyuˇz´ıv´an jako jednosmˇern´ y pro pos´ıl´an´ı 16bitov´ ych pˇr´ıkaz˚ u pro kodek, zat´ımco McBSP1 slouˇz´ı jako obousmˇern´ y kan´al pro pˇr´ıjem a vys´ıl´an´ı stereo sign´al˚ u. Hodnoty obou kan´al˚ u jsou reprezentov´any 16bitov´ ymi ˇc´ısly ve dvojkov´eho doplˇ nku. Kodek AIC23 je ovl´ad´an ych str´ank´ach pˇredmˇetu funkcemi z knihovny aic23 c.c, kter´a je dostupn´a na internetov´ a obsahuje funkce AIC23 init(), AIC23 read() a AIC23 write(). Pro snadnˇejˇs´ı pouˇzit´ı byly vzorky stereo sign´alu pˇrevedeny do form´atu s plovouc´ı ˇra´dovou ˇc´arkou. Spust’te konfiguraˇcn´ı aplikaci Setup CCStudio 3.1. Tlaˇc´ıtkem Remove All odstraˇ nte pˇr´ıpadn´e nastaven´ı simul´atoru a v z´aloˇzce Factory Boards vyberte C6713 DSK. Tlaˇc´ıtkem << Add jej potvrd’te a aplikaci ukonˇcete tlaˇc´ıtkem Save & Quit. Souˇcasnˇe m˚ uˇzete pˇr´ımo spustit aplikaci Code Composer Studio. Vytvoˇrte nov´ y projekt a do jeho adres´aˇre nakop´ırujte soubory dsk cmd.cmd, ych str´ank´ach pˇredmˇetu). aic23 c.c, aic23 h.h a copy main c.c (dostupn´e na internetov´ Konfiguraˇcn´ı soubor .cmd obsahuje nastaven´ı pˇrekladaˇce pro v´ yvojovou desku a zdrojov´ y k´od copy main c.c obsahuje zdrojov´ y k´od aplikace, kter´a pˇrij´ım´a stereo sign´al prostˇrednictv´ım AIC23 kodeku a vzorky pˇrepos´ıl´a zpˇet do PC. Do projektu vloˇzte soubory u. .cmd a .c. Projdˇete si obsah souboru copy main c.c a ujasnˇete si ˇcinnost vˇsech pˇr´ıkaz˚ Navaˇzte komunikaci s v´ yvojovou deskou: Debug→Connect Alt+C. Pˇr´ıkazem Project→Build Option... je nutn´e nastavit parametry pˇrekladu cel´e aplikace. Na z´aloˇzce Compiler, v kategorii Basic nastavte Target Version na C671x (-mv6710) a v kategorii Preprocessor pˇridejte cestu Include Search Path (-i) k adres´aˇri ˇte Pre-Defined Symbol (-d) $(Install dir)\c6000\dsk6713\include. Rovnˇeˇz zmˇen na CHIP 6713. Nastavov´an´ı ukonˇcete a projekt uloˇzte. Spust’te pˇreklad cel´e aplikace a pˇreloˇzen´ y k´od nahrajte do pamˇeti sign´alov´eho procesoru a spust’te ho (viz postup ze cviˇcen´ı 9). Analogov´e vstupy a v´ ystupy v´ yvojov´e desky jsou propojeny se zvukovou kartou poˇc´ıtaˇce, pomoc´ı kter´e budete generovat a analyzovat analogov´a data. Spust’te program Soundcard Scope [Sco09] um´ıst’en´ y na ploˇse. Pomoc´ı gener´atoru, osciloskopu, pˇr´ıp. frekvenˇcn´ı anal´ yzy si ovˇeˇrte spr´avnou funkci aplikace v DSP. Seznamte se s moˇznostmi tohoto programu. Bod 2. C´ılem u ´kolu je implementace FIR filtru typu doln´ı propust s vyuˇzit´ım kruhov´e pamˇeti z poˇc´ıtaˇcov´eho cviˇcen´ı 9. Prvn´ım krokem je generace impulzn´ı odezvy takov´eho filtru. Vyuˇzijeme k tomu intern´ıch funkc´ı programu MATLAB. Program obsahuje celou ˇradu funkc´ı pro n´avrh a testov´an´ı filtrace sign´al˚ u. Pro generov´an´ı koeficient˚ u FIR filtru typu doln´ı propust s vyuˇzit´ım Hammingova okna, je moˇzn´e vyuˇz´ıt funkci fir1( M, fmez ), kde M urˇcuje ˇra´d filtru a fmez ud´av´a mezn´ı frekvenci, pˇriˇcemˇz plat´ı ˇze fmez ∈ h0; 1i ˇ ad filtru si zvolte. Vygenerovan´e a fmez = 1, je-li rovna polovinˇe vzorkovac´ı frekvence. R´ koeficienty (tj. impulzn´ı odezvu filtru), jejichˇz poˇcet je M + 1 si poznaˇcte. Frekvenˇcn´ı charakteristiku v´ami zvolen´eho filtru si v Matlabu m˚ uˇzete prohl´ednout napˇr. pomoc´ı uˇzivatelsky pˇr´ıjemn´eho n´astroje fdatool, jak naznaˇcuje obr´azek 10.1. Parametry Fs a Fc urˇcuj´ı vzorkovac´ı frekvenci a mezn´ı frekvenci navrˇzen´eho filtru. (Vzorkovac´ı frekvence pˇrevodn´ık˚ u na v´ yvojov´e desce TMS320C6713 DSK je nastavena na
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
55
16 kHz.) Koeficienty navrhovan´eho filtru lze z´ıskat tak´e t´ımto n´astrojem. Pomoc´ı pˇr´ıkazu File→Export... Ctrl+E bude vektor s koeficienty vyexportov´an do promˇenn´e Num.
Obr´ azek 10.1: Grafick´ y n´astroj fdatool v prostˇred´ı Matlab pro n´avrh filtr˚ u. V prostˇred´ı CCS vytvoˇrte nov´ y projekt. Do vytvoˇren´eho adres´aˇre si nakop´ırujte soubory dsk cmd.cmd a knihovnu pro komunikaci s obvodem AIC23: aic23 c.c, aic23 h.h. Do projektu staˇc´ı vloˇzit soubory .cmd a .c. Vytvoˇrte nov´ y zdrojov´ y soubor .c, jehoˇz kostra m˚ uˇze b´ yt dle 10.1 a rovnˇeˇz jej vloˇzte do projektu. Jak je patrn´e ze zdrojov´eho k´odu, pˇrenos dat z/do stereo kan´alu obsahuje vˇzdy dvˇe y z pˇreˇcten´ ych/zapsan´ ych vol´an´ı funkce AIC23 read() a AIC23 write(). Poˇrad´ı, kter´ vzork˚ u je z lev´eho, nebo prav´eho kan´alu, zde nen´ı d˚ uleˇzit´e. Podstatou filtraˇcn´ıho algoritmu je konvoluce mezi vzorky impulzn´ı odezvy FIR filtru a naˇcten´ ymi datov´ ymi vzorky dle vztahu (10.1) uvnitˇr funkce processing() na ˇra´dku 24, jej´ıˇz tˇelo m´ate naprogramovat. Pro ukl´ad´an´ı vzork˚ u vyuˇzijte kruhovou pamˇet’ z poˇc´ıtaˇcov´eho cviˇcen´ı 9. Filtrujte pouze sign´al z jednoho vstupn´ıho kan´alu. V´ ystupn´ı kan´aly necht’ pak obsahuj´ı p˚ uvodn´ı sign´al a sign´al filtrovan´ y. Aplikaci pˇreloˇzte, nahrajte do DSP a spust’te. Spr´avnou funkci navrˇzen´eho filtru ovˇeˇrte filtrac´ı obd´eln´ıkov´eho sign´alu z gener´atoru (viz obr´azek 10.2). Jakou frekvenci obd´eln´ıkov´eho sign´alu zvol´ıte?
10.4
N´ amˇ ety pro dalˇ s´ı aplikace
• S vyuˇzit´ım knihoven pro TMS320C6713 DSK naprogramujte jednoduchou aplikaci ovl´adaj´ıc´ı LED diody a pˇrep´ınaˇce. Vytvoˇrte nov´ y projekt v CCS a naprogramujte jednoduchou aplikaci, ovl´adaj´ıc´ı LED diody D7 aˇz D10, pˇr´ıp. pˇrep´ınaˇce SW1, kter´e jsou um´ıstˇeny na v´ yvojov´e desce DSK. Do projektu vloˇzte konfiguraˇcn´ı soubor dsk cmd.cmd. Knihovny pro DSK jsou souˇca´st´ı prostˇred´ı CCS. Kostra aplikace, vˇcetnˇe potˇrebn´ ych knihoven, m˚ uˇze b´ yt dle 10.2.
56
Mikroprocesorov´a technika a embedded syst´emy
Obr´ azek 10.2: Aplikace Soundcard Scope pro generov´an´ı a anal´ yzu sign´al˚ u prostˇrednictv´ım zvukov´e karty [Sco09].
Ve vloˇzen´ ych knihovn´ach jsou definov´any nˇekter´e funkce, kter´e m˚ uˇzete vyuˇz´ıt (viz v´ ypis 10.3). Promˇenn´e ledNum a dipNum identifikuj´ı LED diodu, resp. pˇrep´ınaˇc a nab´ yvaj´ı hodnot 0 aˇz 3. Funkce DSK6713 DIP get() vrac´ı stav pˇrep´ınaˇce (0 nebo 1) a promˇenn´a delay ud´av´a dobu zpoˇzdˇen´ı v mikrosekund´ach.
10.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo student˚ um vytvoˇrit re´alnou aplikaci FIR filtru, otestovat jeho spr´avnou funkci na generovan´ ych sign´alech a prakticky si tak ovˇeˇrit z´avˇery z teorie sign´al˚ u. Ke generov´an´ı a anal´ yze analogov´ ych sign´al˚ u byla pouˇzita aplikace Soundcard Scope.
10.6
Kontroln´ı ot´ azky
Ot´ azka 10.1 Jak souvis´ı ˇr´ad FIR filtru s dobou v´ykonu filtraˇcn´ıho algoritmu a s velikost´ı alokovan´e datov´e pamˇeti? Ot´ azka 10.2 Jak´e jsou hlavn´ı rozd´ıly mezi analogov´ymi a ˇc´ıslicov´ymi filtry? Ot´ azka 10.3 Co mus´ı platit pro vzorkovac´ı frekvenci stereo kodeku AIC23 a dobu v´ykonu funkce processing() z bodu 2, aby bylo dosaˇzeno zpracov´an´ı sign´al˚ u v re´aln´em ˇcase?
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
57
Zdrojov´ y k´ od 10.1: Realizace ˇc´ıslicov´eho filtru typu FIR pomoc´ı v´ yvojov´e desky TMS320C6713 DSK. 1 2
#define M . . . #include ” a i c 2 3 h . h”
// z v o l t e s i ˇr ´a d f i l t r u // knihovna pro komun . s AIC23 a deskou DSK
void main ( void ) { f l o a t sample_in ; f l o a t sample_out ; f l o a t fir ; f l o a t x [ M+1] = {0} ; f l o a t h [ M+1] = { . . . } ; ...
// // // // // // //
3 4 5 6 7 8 9 10
h l a v n´ı f u n k c e v s t u p n´ı v z o r e k vy ´ s t u p n´ı v z o r e k filtrovany ´ vzorek vzorky v s t u p n´ıh o s i g n ´a l u dopln ˇ t e i m p u l z n´ı odezvu vaˇs eho FIR f i l t r u pˇr´ıp a d n´e d a l ˇs´ı d e k l a r a c e
11 12 13
DSK6713_init ( ) ; AIC23_init ( ) ;
// i n i c i a l i z a c e v y ´ v o j o v´e desky // i n i c i a l i z a c e obvodu AIC23
while ( 1 ) {
// nekoneˇc n´a smyˇcka
14 15 16
// n a ˇc t e n´ı vzorku z l e v´e h o kan´a lu AIC23 sample_in = AIC23_read ( ) ;
17 18 19
// z ´ a l o h a n aˇc t e n´e h o vzorku sample_out = sample_in ;
20 21 22
// naprogramujte f u n k c i FIR f i l t r u fir = processing ( ) ;
23 24 25
// z a p s ´ a n´ı f i l t r o v a n ´e h o vzorku na l e v y ´ k a n ´a l AIC23 AIC23_write ( fir ) ;
26 27 28
// n a ˇc t e n´ı jednoho vzorku z prav´e ho kan´a lu // v z o r e k j e zahozen − FIR f i l t r p r a c u j e pouze s prav´ y m kan´a lem sample_in = AIC23_read ( ) ;
29 30 31 32
// z a p s ´ a n´ı jednoho vzorku na prav´ y vy ´ s t u p n´ı k a n ´a l AIC23 // do prav´e ho s t e r e o kan´a lu j e zaps´a n p˚ u vodn´ı , v s t u p n´ı v z o r e k AIC23_write ( sample_out ) ;
33 34 35
}
36 37
}
58
Mikroprocesorov´a technika a embedded syst´emy
Zdrojov´ y k´ od 10.2: Ovl´ad´an´ı LED diod a pˇrep´ınaˇc˚ u na v´ yvojov´e desce TMS320C6713 DSK. 1 2 3
#include ” dsk6713 . h” #include ” d s k 6 7 1 3 l e d . h” #include ” d s k 6 7 1 3 d i p . h”
// knihovna pro TMS320C6713 DSK // knihovna pro LED diody // knihovna pro pˇr e p´ın aˇc e
void main ( ) { DSK6713_init ( ) ; DSK6713_LED_init ( ) ; DSK6713_DIP_init ( ) ;
// // // //
4 5 6 7 8
h l a v n´ı f u n k c e i n i c i a l i z a c e vy ´ v o j o v´e desky i n i c i a l i z a c e LED d i o d i n i c i a l i z a c e pˇr e p´ın aˇc˚ u
9
while ( 1 ) { ... }
10 11 12 13
// nekoneˇc n´a smyˇcka // d o p l n ˇ t e v´a ˇs k´o d
}
Zdrojov´ y k´ od 10.3: Funkce pro ovl´ad´an´ı LED diod a pˇrep´ınaˇc˚ u na v´ yvojov´e desce TMS320C6713 DSK. 1 2 3 4 5
void DSK6713_LED_on ( Uint32 ledNum ) ; void DSK6713_LED_off ( Uint32 ledNum ) ; void DSK6713_LED_toggle ( Uint32 ledNum ) ; Uint32 DSK6713_DIP_get ( Uint32 dipNum ) ; void DSK6713_waitusec ( Uint32 delay ) ;
// // // // //
r o z s v´ı c e n´ı LED diody z h a s n u t´ı LED n e g o v ´a n´ı s t a v u LED n a ˇc t e n´ı s t a v u pˇr e p´ın aˇc e z p oˇz dˇe n´ı v us
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
11
59
Diskr´ etn´ı Fourierova transformace
Test pˇ redchoz´ıch znalost´ı 1. Jak´ y je rozd´ıl mezi DFT a FFT? 2. Co je to bitovˇe reverzn´ı poˇrad´ı a kde se pouˇz´ıv´a? 3. Jak lze v jazyce C pˇred´avat informaci o adrese jednorozmˇern´eho pole mezi funkcemi.
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem tohoto poˇc´ıtaˇcov´eho cviˇcen´ı je detailn´ı sezn´amen´ı s pˇrevodem sign´al˚ u z ˇcasov´e do frekvenˇcn´ı oblasti, prostˇrednictv´ım diskr´etn´ı Fourierovy transformace a rychl´eho v´ ypoˇctu pomoc´ı FFT. D´ale je c´ılem osvojen´ı si n´astroj˚ u pro evaluaci n´aroˇcnosti jednotliv´ ych ˇca´st´ı zdrojov´eho k´odu v prostˇred´ı Code Composer Studio.
11.1
Zad´ an´ı
1. Naprogramujte algoritmus diskr´etn´ı Fourierovy transformace a ovˇeˇrte jej v simul´atoru sign´alov´eho procesoru TMS320C6713. 2. Pomoc´ı intern´ıho n´astroje prostˇred´ı Code Composer Studio, zjistˇete poˇcetn´ı n´aroˇcnost DFT. 3. Naprogramujte algoritmus pro rychl´ y v´ ypoˇcet Fourierovy transformace (FFT) v jazyce C a porovnejte jeho poˇcetn´ı n´aroˇcnost s DFT.
11.2
Teoretick´ e poznatky
Diskr´etn´ı Fourierova transformace (DFT – Discrete Fouriere Transform) vstupn´ı sekvence x(n) o d´elce N je definov´ana n´asleduj´ıc´ım zp˚ usobem [Cha05] X(k) =
N −1 X
x(n) · W nk ,
(11.1)
n=0
kde W nk je oznaˇcov´ana jako twiddle konstanta a je definov´ana vztahem W nk = e−2πnk/N .
(11.2)
Index k = 0, 1, . . ., N − 1. S vyuˇzit´ım rovnosti e· = cos(·) + sin(·) m˚ uˇze b´ yt definiˇcn´ı vztah DFT rozdˇelen na re´alnou a imagin´arn´ı ˇca´st dle rovnic (11.3).
< {X(k)} = = {X(k)} =
N −1 X n=0 N −1 X n=0
x(n) · cos(2πnk/N ) x(n) · sin(−2πnk/N ).
(11.3)
60
Mikroprocesorov´a technika a embedded syst´emy
Proces v´ ypoˇctu diskr´etn´ı Fourierovy transformace je optimalizov´an pomoc´ı rychl´eho algoritmu (FFT – Fast Fourier Transform). Existuje nˇekolik verz´ı tohoto algoritmu. Z´akladn´ı dˇelen´ı je podle poˇctu prvk˚ u: pro tzv. radix 2 plat´ı, ˇze N = 2n , pro radix 4 plat´ı N = 4n . V obou pˇr´ıpadech je v´ ypoˇcet frekvenˇcn´ıch koeficient˚ u postupn´ y. V´ ypoˇcet N bod˚ u DFT je postupnˇe rozdˇelen na dvˇe DFT pro N/2 bod˚ u, n´aslednˇe na ˇctyˇri DFT pro N/4 bod˚ u, atd. Celkov´a poˇcetn´ı n´aroˇcnost se tak znaˇcnˇe sn´ıˇz´ı. Podle pozice, kdy doch´az´ı k rozdˇelen´ı DFT mluv´ıme o tzv. decimaci v ˇcasov´e (DIT – Decimation in Time), nebo ve frekvenˇcn´ı (DIF – Decimation in Frequency) oblasti. Postup v´ ypoˇctu osmi frekvenˇcn´ıch koeficient˚ u pomoc´ı DIF je zn´azornˇen na obr´azku 11.1. Spojen´ı dvou ˇsipek pˇredstavuje souˇcet hodnot. Je-li u ˇsipky hodnota “−1”, je realizov´an rozd´ıl dvou hodnot. Konstantami W n komplexnˇe n´asob´ıme pˇr´ısluˇsn´e hodnoty. F´ aze 1
F´ aze 2
0
x(0)
x (0)
x(1)
x (1)
00
F´ aze 3
x (0)
0
X(0)
00
W0
x (1)
X(4)
−1
W0
x(2)
X(2)
−1
W2
x(3)
W0 −1
−1
W0
x(4)
X(6) X(1)
−1
W0
W1
x(5) −1
W0
W2
x(6) −1
X(3)
−1
W3
x(7)
X(5)
−1
W0
W2
−1
−1
X(7)
−1
Obr´ azek 11.1: V´ ypoˇcet 8bodov´e FFT s vyuˇzit´ım DIF (Decimation in Frequency). Jak je z obr´azku patrn´e, v´ ypoˇcet frekvenˇcn´ıch koeficient˚ u se prov´ad´ı ve tˇrech postupn´ ych f´az´ıch. V´ ypoˇcet prvn´ı f´aze lze zapsat pomoc´ı rovnic (11.4), druh´a f´aze je pak vyj´adˇrena rovnicemi (11.5). Komplexn´ı twiddle konstanty W n lze vyˇc´ıslit pomoc´ı vztahu W n = e−2πn/N . Tj. <{W 0 } = 1, ={W 0 } = 0, <{W 1 } = 0,7071, ={W 1 } = -0,7071, atd.
x(0) + x(4) x(1) + x(5) x(2) + x(6) x(3) + x(7) [x(0) − x(4)] · W 0 [x(1) − x(5)] · W 1 [x(2) − x(6)] · W 2 [x(3) − x(7)] · W 3
→ → → → → → → →
0
x (0) 0 x (1) 0 x (2) 0 x (3) 0 x (4) 0 x (5) 0 x (6) 0 x (7)
(11.4)
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
0
0
x (0) + x (2) 0 0 x (1) + x (3) h 0 i 0 x (0) − x (2) · W 0 h 0 i 0 x (1) − x (3) · W 2 0
0
x (4) + x (6) 0 0 x (5) + x (7) h 0 i 0 x (4) − x (6) · W 0 h 0 i 0 x (5) − x (7) · W 2
11.3
00
→ x (0) 00 → x (1)
61
(11.5)
00
→ x (2) 00
→ x (3) 00
→ x (4) 00 → x (5) 00
→ x (6) 00
→ x (7)
Pokyny k zad´ an´ı
Bod 1. Nakonfigurujte v´ yvojov´e prostˇred´ı Code Composer Studio pro pr´aci se simul´atorem TMS320C6713 (viz poˇc´ıtaˇcov´e cviˇcen´ı 9). Vytvoˇrte nov´ y projekt, vloˇzte do nˇej konfiguraˇcn´ı soubor, ˇr´ıdic´ı linkov´an´ı cel´eho projektu (soubor simulator cmd.cmd, dostupn´ y na internetov´ ych str´ank´ach pˇredmˇetu [Fry01]). D´ale vytvoˇrte nov´ y zdrojov´ y soubor .c, kter´ y nezapomeˇ nte rovnˇeˇz pˇridat do projektu (Project→Add Files to Project...). Kostra zdrojov´eho souboru je zobrazena ve v´ ypise 11.1. Zdrojov´ y k´ od 11.1: Implementace DFT na sign´alov´ y procesor TMS320C6713. 1 2
#define N . . . #include <math . h>
// z v o l t e s i p oˇc e t prvk˚ u DFT // knihovna matematick´ y ch f u n k c´ı ( goniom . f c e )
3 4 5 6 7
float float float float
pi = 3 . 1 4 1 6 ; x[N] = { ... } ; y_re [ N ] ; y_im [ N ] ;
// // // //
PI z v o l t e s i t e s t o v a c´ı vzorky v s t u p n´ıh o s i g n ´a l u r e ´a l n ´a ˇc ´a s t DFT k o e f i c i e n t˚ u i m a g i n ´a r n´ı ˇc ´a s t DFT k o e f i c i e n t˚ u
8 9 10 11 12 13
// p r o t o t y p f u n k c e pro v y ´ p oˇc e t DFT // ∗px − u k a z a t e l na v s t u p n´ı data // ∗ p r e − u k a z a t e l na r e ´ a l n ´e ˇc ´a s t i f r e k v e n ˇc n´ıc h k o e f i c i e n t˚ u // ∗pim − u k a z a t e l na i m a g i n ´ a r n´ı ˇc ´a s t i f r e k v e n ˇc n´ıc h k o e f i c i e n t˚ u void dft ( f l o a t ∗px , f l o a t ∗pre , f l o a t ∗ pim ) ;
14 15
void main ( void ) {
// h l a v n´ı f u n k c e
16
// v y ´ p oˇc e t Nbodov´e DFT dft ( &x [ 0 ] , &y_re [ 0 ] , &y_im [ 0 ] ) ;
17 18 19
while ( 1 ) ;
20 21
// nekoneˇc n´a smyˇcka
}
22 23 24 25
void dft ( f l o a t ∗px , f l o a t ∗pre , f l o a t ∗ pim ) { ... // naprogramujte v y ´ p oˇc e t Nbodov´e DFT d l e ( 11.3 ) }
62
Mikroprocesorov´a technika a embedded syst´emy
Zvolte si poˇcet prvk˚ u transformace DFT (ˇra´dek 1). Knihovna matematick´ ych funkc´ı (ˇr´adek 2) obsahuje v´ ypoˇcet goniometrick´ ych funkc´ı sinus a kosinus. S ohledem na velikost N si naplˇ nte tak´e vektor testovac´ıch vzork˚ u vstupn´ıho sign´alu (ˇr´adek 5). Vaˇsim u ´kolem bude naprogramovat algoritmus DFT dle vztah˚ u (11.3) a v´ ysledky uloˇzit do promˇenn´ ych u tˇechto promˇenn´ ych, spoleˇcnˇe s adresou prvn´ıho prvku y re a y im. Adresy prvn´ıch prvk˚ testovac´ıch dat jsou pˇred´av´any do funkce dft(), viz ˇra´dek 18. Aplikaci pˇreloˇzte (Project→Rebuild All ), nahrajte do simul´atoru (File→Load Program... Ctrl+L) a spust’te ji (Debug→Run F5 ). Hodnoty koeficient˚ u si zobrazte pomoci pˇr´ıkazu View→Memory... V dialogov´em oknˇe nastavte adresu, od kter´e jsou uloˇzeny re´aln´e ˇc´asti frekvenˇcn´ıch koeficient˚ u Address: ˇte na plovouc´ı ˇra´dovou ˇc´arku 32-Bit Floating y re a form´at zobrazen´ı hodnot zmˇen Point. Spust’te program MATLAB a pomoc´ı funkce fft a vaˇseho testovac´ıho vektoru vstupn´ıch dat z ˇra´dku 5 si ovˇeˇrte v´ami dosaˇzen´e v´ ysledky. Bod 2. Zjistˇete poˇcetn´ı n´aroˇcnost funkce pro v´ ypoˇcet DFT. Vyuˇzijte k tomu intern´ı n´astroj prostˇred´ı CCS. Pˇreloˇzte cel´ y projekt. Spust’te nastaven´ı “profilovac´ıho” n´astroje Profile→Setup. Samotn´e profilov´an´ı se povoluje ikonou stopek (Enable/Disable Profiling). Pˇrepnˇete se do druh´e z´aloˇzky Ranges a rozbalte seznam vˇsech dostupn´ ych funkc´ı (Functions). Funkce, kter´e chcete profilovat staˇc´ı myˇs´ı pˇret´ahnout z poloˇzky Disabled do Enabled. V´ ysledky profilov´an´ı se zobrazuj´ı v oknˇe Profiler→Viewer na z´aloˇzce Profiler. Na chv´ıli spust’te v´ ykon aplikace a zase ji zastavte. Pˇribliˇzn´ y poˇcet strojov´ ych cykl˚ u, potˇrebn´ ych pro v´ ykon vybran´ ych funkc´ı je zobrazen ve sloupci cycle. Total: Incl. Total, poˇcet opakov´an´ı funkc´ı ve sloupci Access Count (viz obr´azek 11.2). Bod 3. Z obr´azku 11.1 si vyj´adˇrete rovnice pro v´ ypoˇcet koneˇcn´e f´aze algoritmu FFT, kter´e dopln´ı vztahy (11.4) a (11.5). Vypoˇctˇete komplexn´ı hodnoty twiddle konstant W 0 aˇz W 3 . V prostˇred´ı CCS naprogramujte v jazyce C funkci, kter´a bude obsahovat postupnˇe vˇsechny rovnice pro v´ ypoˇcet 8mi bodov´e FFT prostˇrednictv´ım DIF a aplikujte ji na testovac´ı data z bodu 1. Rovnice pro poˇcetn´ı operace s komplexn´ımi ˇc´ısly byly uvedeny v poˇc´ıtaˇcov´em cviˇcen´ı 1. Dosaˇzen´e v´ ysledky porovnejte s hodnotami z´ıskan´ ymi prostˇrednictv´ım DFT. Liˇs´ı se tyto hodnoty? Zjistˇete poˇcetn´ı n´aroˇcnost tohoto algoritmu.
11.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Naprogramov´an´ı rychl´eho algoritmu Fourierovy transformace pro N = 16, pˇr´ıp. 32 vzork˚ u.
11.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo student˚ um praktick´e sezn´amen´ı s v´ ypoˇctem Fourierovy transformace. Konkr´etnˇe byly srovn´any algoritmy diskr´etn´ı Fourierovy transformace a rychl´ y v´ ypoˇcet pomoc´ı FFT. V r´amci poˇc´ıtaˇcov´eho cviˇcen´ı byla tak´e pˇredstavena metoda zjiˇst’ov´an´ı poˇcetn´ı n´aroˇcnosti jednotliv´ ych funkc´ı.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
63
Obr´ azek 11.2: Intern´ı n´astroj CCS pro hodnocen´ı poˇcetn´ı n´aroˇcnosti algoritm˚ u.
11.6
Kontroln´ı ot´ azky
Ot´ azka 11.1 Jak´y vztah plat´ı pro n´ar˚ ust poˇcetn´ı n´aroˇcnosti DFT pˇri zvyˇsov´an´ı poˇctu bod˚ u N? Ot´ azka 11.2 Jak´ym zp˚ usobem lze rozˇs´ıˇrit v´ypoˇcet 8mi bodov´e FFT pro N = 16? Ot´ azka 11.3 Uved’te z´aklady pr´ace s ukazateli v jazyce C.
64
Mikroprocesorov´a technika a embedded syst´emy
12
Kombinace programov´ an´ı v jazyce C a v line´ arn´ım jazyce symbolick´ ych adres
Test pˇ redchoz´ıch znalost´ı 1. Jak´ ym zp˚ usobem lze pˇred´avat parametry mezi zdrojov´ ym k´odem v jazyce C a jazykem symbolick´ ych adres? 2. V ˇcem se liˇs´ı programov´an´ı sign´alov´ ych procesor˚ u v JSA a v line´arn´ım jazyce symbolick´ ych adres? 3. Jak´ ym zp˚ usobem se ve v´ yvojov´em prostˇred´ı CCS zobraz´ı obsah pamˇeti, ˇci hodnota promˇenn´e?
C´ıle poˇ c´ıtaˇ cov´ eho cviˇ cen´ı C´ılem tohoto poˇc´ıtaˇcov´eho cviˇcen´ı je osvojit si v´ yvoj aplikac´ı pro sign´alov´e procesory pomoc´ı tzv. line´arn´ıho jazyka symbolick´ ych adres (LJSA) a pˇredevˇs´ım prakticky si ovˇeˇrit v´ yhody a nev´ yhody tohoto zp˚ usobu programov´an´ı.
12.1
Zad´ an´ı
1. Seznamte se s v´ yvojem aplikac´ı pro sign´alov´e procesory TMS320C6000 pomoc´ı line´arn´ıho jazyka symbolick´ ych adres a ovˇeˇrte poˇcetn´ı n´aroˇcnost funkc´ı v jazyce C a LJSA. 2. Seznamte se s optimalizaˇcn´ımi n´astroji v´ yvojov´eho prostˇred´ı CCS. 3. Realizujte algoritmus Fourierovy transformace pomoc´ı v´ yvojov´e desky TMS320C6713 DSK.
12.2
Teoretick´ e poznatky
V´ yvoj aplikac´ı v tzv. line´arn´ım jazyce symbolick´ ych adres (LJSA) pˇredstavuje mezikrok mezi programov´an´ım ve vyˇsˇs´ım jazyce C a pˇr´ımo v jazyce symbolick´ ych adres (JSA). Oproti JSA, obsahuje LJSA nˇekter´a zjednoduˇsen´ı. Pˇredevˇs´ım nen´ı potˇreba specifikovat konkr´etn´ı funkˇcn´ı jednotky. D´ale se program´ator nemus´ı starat o korektn´ı ˇcasov´an´ı v´ ykonu jednotliv´ ych instrukc´ı a pˇredevˇs´ım nen´ı nutn´e pouˇz´ıvat konkr´etn´ı pracovn´ı registry, a to ani pˇri pˇred´av´an´ı parametr˚ u mezi funkcemi v jazyce C a v LJSA. Zdrojov´ y k´od v LJSA je pˇr´ımo tvoˇren instrukcemi vybran´eho sign´alov´eho procesoru a makry, kter´e ˇr´ıd´ı pˇreklad cel´eho k´odu. Vybran´e instrukce pro sign´alov´ y procesor TMS320C6713 jsou uvedeny v tabulce 12.1. Kompletn´ı popis vˇsech instrukc´ı lze nal´ezt v manu´alu instrukˇcn´ı sady [Tex07].
12.3
Pokyny k zad´ an´ı
Bod 1. V prostˇred´ı Code Composer Studio vytvoˇrte v jazyce C aplikaci, kter´a vol´a jednoduchou funkci, naprogramovanou v line´arn´ım jazyce symbolick´ ych adres. Zdrojov´e soubory si st´ahnˇete z internetov´ ych str´anek pˇredmˇetu [Fry01]. Tento u ´kol bude testov´an pouze v simul´atoru, proto do projektu vloˇzte pˇr´ısluˇsn´ y ˇr´ıdic´ı soubor .cmd. Do projektu
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
65
Tabulka 12.1: Vybran´e instrukce sign´alov´eho procesoru TMS320C6713. Instrukce ADD src1,src2,dst ADDSP src1,src2,dst B label LDB src,dst LDH src,dst LDW src,dst MPY src1,src2,dst MPYSP src1,src2,dst MV src,dst STB src,dst STH src,dst STW src,dst SUB src1,src2,dst SUBSP src1,src2,dst ZERO dst
Popis instrukce Souˇcet znam´enkov´ ych ˇc´ısel. Souˇcet Single-Precision hodnot. Skok na n´avˇeˇst´ı. Naˇcten´ı 1 bytu z pamˇeti. Naˇcten´ı 2 byt˚ u z pamˇeti. Naˇcten´ı 4 byt˚ u z pamˇeti. N´asoben´ı 16bitov´ ych znam´enkov´ ych hodnot. N´asoben´ı Single-Precision hodnot. Pˇresun dat mezi registry. Uloˇzen´ı 1 bytu do pamˇeti. Uloˇzen´ı 2 byt˚ u do pamˇeti. Uloˇzen´ı 4 byt˚ u do pamˇeti. Rozd´ıl znam´enkov´ ych ˇc´ısel. Rozd´ıl Single-Precision hodnot. Nulov´an´ı hodnoty v registru.
Cykly 1 3 6 5 5 5 2 4 1 4 4 4 1 5 1
vloˇzte tak´e zdrojov´ y soubor v jazyce C .c a zdrojov´ y soubor v LJSA .sa. Zdrojov´ y soubor .c obsahuje deklaraci (prototyp) funkce sop sa(), kter´a je naprogramov´ana pomoc´ı LJSA. K´od v LJSA obsahuje opakovan´e naˇcten´ı dvou operand˚ u z pamˇeti, jejich souˇcin s akumulac´ı a n´asledn´e vr´acen´ı v´ ysledn´e hodnoty do hlavn´ı funkce v jazyce C. Souˇc´ast´ı zdrojov´eho k´odu je uk´azka cyklu a podm´ınˇen´eho skoku. Projdˇete si zdrojov´e k´ody a ujasnˇete si funkci kaˇzd´e instrukce. Zdrojov´ y k´ od 12.1: V´ ypoˇcet skal´arn´ıho souˇcinu (Sum of Product) v line´arn´ım jazyce symbolick´ ych adres sign´alov´eho procesoru TMS320C6000. 1 2 3 4 5 6 7 8 9 10 11 12
. def _sop_sa _sop_sa : . cproc pa , pb , n . reg v1 , v2 , prod , sum ZERO sum loop : LDW ∗pa++,v1 LDW ∗pb++,v2 MPYSP v1 , v2 , prod ADDSP prod , sum , sum SUB n ,1 ,n [n] B loop . return sum . endproc
; ; ; ; ; ; ; ; ; ; ;
z aˇc ´a t e k funkce , d e k l . v s t . promˇe nn´ y ch d e k l . pomocn´ y ch promˇe nn´ y ch ( r e g i s t r˚ u) sum = 0 n a ˇc t e n´ı jednoho prvku 1 . v e k t o r u n a ˇc t e n´ı jednoho prvku 2 . v e k t o r u prod = v1 x v2 sum = prod + sum n = n − 1 s k oˇc na l o o p pokud n != 0 f u n k c e v r a c´ı hodnotu SoP konec f u n k c e v l i n e ´a r n´ım JSA
Projekt pˇreloˇzte a odkrokujte pomoc´ı simul´atoru. Vˇsimnˇete si odsazen´ı vˇsech ˇra´dk˚ u s makry a instrukcemi pomoc´ı tabul´atoru. V tomto pˇr´ıpadˇe, to nen´ı pouze zn´amkou pˇrehledn´eho programov´an´ı, ale tak´e nutnou podm´ınkou spr´avn´e interpretace pˇrekladaˇcem.
66
Mikroprocesorov´a technika a embedded syst´emy
V LJSA totiˇz mohou b´ yt od zaˇc´atku ˇra´dk˚ u uvedena pouze n´avˇeˇst´ı, ˇci podm´ınky pro vˇetven´ı programu. K´od, vytvoˇren´ y pˇrekladaˇcem je moˇzn´e zobrazit pˇr´ıkazem View→Mixed Source/ASM. Informace o pouˇzit´ ych instrukc´ıch lze pak zobrazit kliknut´ım na poˇzadovanou instrukci a stiskem kl´avesy F1. Vypnut´ı kombinovan´eho zobrazen´ı lze prov´est opˇetovnou volbou pˇr´ıkazu View→Mixed Source/ASM. Doprogramujte funkci pro v´ ypoˇcet skal´arn´ıho souˇcinu vektor˚ u dle rovnice (12.1) tak´e v jazyce C. y=
N −1 X
a(n) · b(n).
(12.1)
n=0
V simul´atoru ovˇeˇrte spr´avnou funkci cel´e aplikace. Zjistˇete a porovnejte poˇcetn´ı n´aroˇcnost obou vytvoˇren´ ych funkc´ı (postup viz poˇc´ıtaˇcov´e cviˇcen´ı 11). Bod 2. V tomto u ´kolu budou vyuˇzity intern´ı n´astroje prostˇred´ı CCS pro optimalizaci zdrojov´ ych k´od˚ u. Konkr´etnˇe budeme optimalizovat pouze k´od v LJSA. V inspektoru projektu (z´aloˇzka File View v lev´e ˇca´sti aplikace) kliknˇete prav´ ym tlaˇc´ıtkem na n´azev souboru .sa a v kontextov´em menu vyberte poloˇzku File Specific Options ... Zobraz´ı se dialogov´e okno, zn´am´e z nastavov´an´ı parametr˚ u pˇrekladu cel´e aplikace. Zde se zvolen´e nastaven´ı t´ yk´a pouze souboru .sa. Optimalizace se zad´av´a v Category: Basic. Volbou Opt Speed vs Size: Speed Most Critical (no -ms) nastavte optimalizaci s ohledem ´ na v´ yslednou rychlost programu. Uroveˇ n, na kter´e se bude optimalizace prov´adˇet Opt Level: nastavte na nejvyˇsˇs´ı, tj. File (-o3). Pˇreloˇzte znovu celou aplikaci a zjistˇete poˇcetn´ı n´aroˇcnost takto optimalizovan´e aplikace. K´od si prohl´ednˇete pˇr´ıkazem View→Mixed Source/ASM. V ˇcem se vytvoˇren´ y k´od liˇs´ı? Bod 3. Pˇripojte nap´ajen´ı k v´ yvojov´e desce. Spust’te CCS pro pr´aci s TMS320C6713 DSK. S vyuˇzit´ım zdrojov´ ych k´od˚ u z poˇc´ıtaˇcov´eho cviˇcen´ı 11, realizujte na v´ yvojov´e desce TMS320C6713 DSK v´ ypoˇcet Fourierovy transformace re´aln´eho sign´alu, generovan´em pomoc´ı programu Soundcard Scope [Sco09]. Gener´atorem sign´alu vytvoˇrte v jednom kan´ale harmonick´ y sign´al o frekvenci 1 aˇz 7 kHz (vzorkovac´ı frekvence pˇrevodn´ık˚ u je 16 kHz). Tento sign´al je pˇriveden do analogov´eho vstupu na v´ yvojov´e desce, n´aslednˇe zpracov´an audio kodekem TLV320AIC23 [Aic23] a pˇred´an sign´alov´emu procesoru TMS320C6713. Vaˇs´ım u ´kolem bude na tento sign´al aplikovat algoritmus rychl´e Fourierovy transformace a moduly v´ ysledn´ ych koeficient˚ u poslat prostˇrednictv´ım jednoho kan´alu sluch´atkov´eho v´ ystupu v´ yvojov´e desky. Druh´ y kan´al necht’ tvoˇr´ı p˚ uvodn´ı sign´al z PC. Budete tak moct v aplikaci Soundcard Scope souˇcasnˇe pozorovat sign´al v ˇcasov´e i frekvenˇcn´ı oblasti. Kostra zdrojov´eho k´odu je zobrazena ve v´ ypise 12.2. Potˇrebn´e funkce pro komunikaci s v´ yvojovou deskou TMS320C6713 DSK, vˇcetnˇe oby k´od d´ale obvodu audio kodeku AIC23 obsahuje knihovna aic23 h.h (ˇr´adek 3). Zdrojov´ sahuje deklaraci vektoru vstupn´ıch vzork˚ u (ˇr´adek 7), re´aln´e a imagin´arn´ı ˇca´sti v´ ystupn´ıch frekvenˇcn´ıch koeficient˚ u (ˇra´dky 8 a 9) a vektor komplexn´ıch hodnot twiddle koeficient˚ u (ˇr´adky 12 a 13). Nekoneˇcn´a smyˇcka aplikace opakovanˇe naˇc´ıt´a vzorky vstupn´ıho sign´alu prostˇrednictv´ım obvodu AIC23. Opˇet je potˇreba naˇc´ıst dva vzorky – lev´ y a prav´ y kan´al stereo
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
67
vstupu (ˇr´adek 26). Na v´ ystupn´ı dva kan´aly zapisujte vˇzdy jeden pˇrijat´ y vzorek a modul vypoˇcten´eho frekvenˇcn´ıho koeficientu (ˇra´dek 33). Ty se vypoˇctou a uloˇz´ı do pˇr´ısluˇsn´ ych vektor˚ u kaˇzd´ ych 8 vzork˚ u (podm´ınka na ˇra´dku 42). Pro v´ ypoˇcet 8 frekvenˇcn´ıch koeficient˚ u vyuˇzijte jiˇz hotovou funkci z poˇc´ıtaˇcov´eho cviˇcen´ı 11. Aby bylo moˇzn´e v programu Soundcard Scope identifikovat pozici koeficientu reprezentuj´ıc´ı stejnosmˇernou sloˇzku, je tento koeficient z´amˇernˇe zmˇenˇen (viz ˇra´dek 51). Pozn.: Pouˇzit´a funkce pro v´ ypoˇcet modulu frekvenˇcn´ıch koeficient˚ u ukl´ad´a v´ ysledky do vektoru y re[·]. Pˇreklad projektu nastavte pˇr´ıkazem Project→Build Options... takto: • Category: Basic, Target Version: C671x (-mv6710) • Category: Preprocessor, Include Search Path (-i): $(Install dir)\c6000\dsk6713\include • Category: Preprocessor, Pre-Define Symbol (-d): CHIP 6713 Projekt pˇreloˇzte a otestujte na v´ yvojov´e desce. Odpov´ıd´a v´ ystupn´ı sign´al vaˇsim pˇredpoklad˚ um? Jak´ y vliv m´a poˇcet frekvenˇcn´ıch koeficient˚ u Fourierovy transformace na rozliˇsovac´ı schopnost frekvenˇcn´ı anal´ yzy?
12.4
N´ amˇ ety pro dalˇ s´ı aplikace
• Vytvoˇren´ı matematick´ ych funkc´ı, pracuj´ıc´ıch s komplexn´ımi ˇc´ısly v LJSA. • Pˇreprogramov´an´ı funkce pro v´ ypoˇcet 8bodov´e FFT z jazyka C pomoc´ı line´arn´ıho jazyka symbolick´ ych adres. • Aplikace v´ıce-bodov´e FFT pro N = 16, 32, . . .
12.5
Shrnut´ı
Poˇc´ıtaˇcov´e cviˇcen´ı umoˇznilo student˚ um srovn´an´ı dvou pˇr´ıstup˚ u pˇri v´ yvoji aplikac´ı pro sign´alov´ y procesor. Prvn´ım pˇr´ıstupem byl v´ yvoj ve vyˇsˇs´ım programovac´ım jazyce C. Druh´ ym pak vyuˇzit´ı tzv. line´arn´ıho jazyka symbolick´ ych adres. Kromˇe sloˇzitosti v´ yvoje samotn´e aplikace, mohli studenti porovnat tak´e efektivitu v´ ysledn´eho k´odu.
12.6
Kontroln´ı ot´ azky
Ot´ azka 12.1 Jak´e frekvence reprezentuj´ı Fourierovy koeficienty X(0) a X(N − 1)? Ot´ azka 12.2 Liˇs´ı je poˇcetn´ı n´aroˇcnost instrukc´ı pracuj´ıc´ıch v pevn´e a plovouc´ı ˇr´adov´e ˇc´arce? Ot´ azka 12.3 Vytvoˇrte v´yvojov´y diagram aplikace z bodu 3.
68
Mikroprocesorov´a technika a embedded syst´emy
Zdrojov´ y k´ od 12.2: Implementace FFT na sign´alov´ y procesor TMS320C6713. 1 2 3 4
#define N 8 #include <math . h> #include ” a i c 2 3 h . h” ...
// // // //
p oˇc e t prvk˚ u FFT knihovna matematick´ y ch f u n k c´ı ( goniom . f c e ) knihovna pro komun . s AIC23 a deskou DSK dopln ˇ t e p r o t o t y p y v aˇs i c h f u n k c´ı
// // // //
PI vzorky v s t u p n´ıh o s i g n ´a l u r e ´a l n ´a ˇc ´a s t FFT k o e f i c i e n t˚ u i m a g i n ´a r n´ı ˇc ´a s t FFT k o e f i c i e n t˚ u
5 6 7 8 9
float float float float
pi = 3 . 1 4 1 6 ; x[N] = { 0 } ; y_re [ N ] = { 0 } ; y_im [ N ] = { 0 } ;
10 11 12 13
// r e ´ aln´ a a imagin´ a r n´ı ˇc ´ a s t t w i d d l e k o e f i c i e n t˚ u f l o a t w_re [ N / 2 ] = { 1 , 0 . 7 0 7 , 0 , −0.707} ; f l o a t w_im [ N / 2 ] = { 0 , −0.707 , −1, −0.707} ;
14 15 16 17
void main ( void ) { short px = 0 ; f l o a t sample_in ;
// h l a v n´ı f u n k c e // u k a z a t e l pro u k l ´a d ´a n´ı vstup . dat // pomocn´ y u k a z a t e l pro u k l ´a d ´a n´ı v s t u p n´ıc h dat
18 19 20
DSK6713_init ( ) ; AIC23_init ( ) ;
// i n i c i a l i z a c e v y ´ v o j o v´e desky // i n i c i a l i z a c e obvodu AIC23
while ( 1 ) {
// nekoneˇc n´a smyˇcka
21 22 23
// n a ˇc t e n´ı v s t u p n´ıc h dat // n a ˇc t e n´ı jednoho vzorku z l e v´e h o kan´a lu sample_in = AIC23_read ( ) ;
24 25 26 27
// n a ˇc t e n´ı jednoho vzorku z prav´e ho kan´a lu sample_in = AIC23_read ( ) ;
28 29 30
// v y s l ´ a n´ı dat // z a p s ´ a n´ı jednoho k o e f i c i e n t u na p r v n´ı k a n ´a l AIC23_write ( y_re [ px ] ) ;
31 32 33 34
// pˇr e k o p´ır o v ´ a n´ı v s t u p n´ıh o vzorku na druh´ y k a n ´a l AIC23_write ( sample_in ) ;
35 36 37
// u l o ˇz e n´ı vzorku do kruhov´e pamˇe ti x [ px++] = sample_in ;
38 39 40
// kaˇz d´ y ch N v s t u p n´ıc h vzork˚ u i f ( px == N ) {
41 42 43
// v o l ´ a n´ı f u n k c e pro v y ´ p oˇc e t 8 bodov´e FFT ...
44 45 46
// d o p l n ˇ te vy ´ p oˇc e t modulu 8 bodov´e FFT ...
47 48 49
// pomocn´ a znaˇc ka s t e j n o s mˇe r n´e s l o ˇz k y y_re [ 0 ] = −15000 ;
50 51 52
// n u l o v ´ a n´ı u k a z a t e l e v s t u p n´ıc h dat px = 0 ;
53 54
}
55
}
56 57
}
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
69
Literatura [Aic23]
Texas Instruments Incorporated. TLV320AIC23. Low-Power Stereo CODEC with HP Amplifier [online]. 2009 – [cit. 29. listopadu 2009]. Dostupn´e na www: http://focus.ti.com/docs/prod/folders/print/tlv320aic23.html.
[Ans99] Open Standards. International standard ISO/IEC 9899:1999 [online]. 2005 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.open-std.org/jtc1/sc22/ wg14/www/docs/n1124.pdf. [Ans1x] Open Standards. International standard ISO/IEC 9899:201x [online]. 2010 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.open-std.org/jtc1/sc22/ WG14/www/docs/n1539.pdf. [Atm01] Atmel Corporation. Ofici´aln´ı str´anka firmy Atmel [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.atmel.com/. [Atm02] Atmel Corporation. 8-bit AVR Instruction Set [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.atmel.com/dyn/resources/prod_documents/ doc0856.pdf. [Atm03] Atmel Corporation. STK500 [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.atmel.com/dyn/products/tools_card.asp?tool_id= 2735. [Atm04] Atmel Corporation. AVRISP mkII In-System Programmer [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.atmel.com/dyn/products/ tools_card.asp?tool_id=3808. [Atm05] Atmel Corporation. AVR Studio 4 [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.atmel.com/dyn/products/tools_card.asp?tool_id= 2725. [Atm06] Atmel Corporation. AVR STK500 User Guide [online]. 2003 – [cit. 6. listopadu 2009]. Dostupn´e na www: http://www.atmel.com/atmel/acrobat/ doc1925.pdf. [Atm16] Atmel Corporation. 8-bit Microcontroller ATmega16 [online]. 2010 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.atmel.com/dyn/resources/prod_ documents/doc2466.pdf. [Bar03] BARNETT, R., O’CULL, L., COX, S. Embedded C Programming and the Atmel AVR. 1st ed. New York (USA): Thomson Learning, Inc., 2003. [Dan05] DANDAMUDI, S.P. Guide to RICS Processors for Programmers and Engineers. 1st ed. New York (USA): Springer, 2005. [Dov07] Doveda Boys. Znakov´e LCD displeje [online]. 2007 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.doveda.byl.cz/. [Fed01] FEDRA, Z. V´ysledn´e projekty pˇredmˇetu MMIA [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.urel.feec.vutbr.cz/MIA.
70
Mikroprocesorov´a technika a embedded syst´emy
[Fle06]
FLEURY, P. LCD Library for HD44870 based LCD’s [online]. 2006 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://homepage.hispeed.ch/peterfleury/ avr-software.html.
[Fly66]
FLYNN, M. J. Very High-Speed Computing Systems. Proceedings of the IEEE. 1966, vol. 54, no. 12, p. 1901–1909.
´ [Fry01] FRYZA, T. Tomas Fryza Homepage [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.urel.feec.vutbr.cz/~fryza. [Gad01] GADRE, D.V. Programming and Customizing the AVR Microcontroller. New York (USA): McGraw-Hill, 2001. [Gcc09] GNU Project. GCC, the GNU Compiler Collection [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://gcc.gnu.org/. [Hit08]
Hitachi, Ltd. Ofici´aln´ı str´anky firmy Hitachi [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.hitachi.com/.
[Cha05] CHASSAING, R. Digital Signal Processing and Applications with the C6713 and C6416 DSK. 1st ed. New Jersey (USA): John Wiley & Sons, 2005. [Int01]
Intel 4004 Microprocessor [online]. 2011 – [cit. 21. z´aˇr´ı 2011]. Dostupn´e na www: http://e4004.szyc.org/index_en.html.
ˇ ıslicov´a filtrace, anal´yza a restaurace sign´al˚ [Jan01] JAN, J. C´ u. 2. vyd´an´ı. Brno: FEKT VUT v Brnˇe, 2001. [Koc05] KOCHAN, S. G. Programming in C. A Complete Introduction to the C Programming Language. 3rd ed. Indianapolis (USA): Sams Publishing, 2005. [Lib09]
C library for use with GCC on AVR. AVR Libc Home Page [online]. 2011 – [cit. 21. z´aˇr´ı 2011]. Dostupn´e na www: http://www.nongnu.org/avr-libc/.
[Mil97]
MILLER, L. H., QUILICI, A. E. The Joy of C. 3rd ed. New Jersey (USA): John Wiley & Sons Inc., 1997.
[Nuv10] Nuvoton. ISD1700 Datasheet [online]. 2010 – [cit. 9. prosince 2010]. Dostupn´e na www: http://www.nuvoton.com/hq/enu/productandsales/productlines/ consumerelectronicsic/isdvoiceic/isdchipcorder/documents/isd1700. pdf. [Pra05] PRATA, S. C Primer Plus. 5th ed. Indianapolis (USA): Sams Publishing, 2005. [Qur05] QURESHI, S. Embedded Image Processing on the TMS320C6000 DSP. Examples in Code Composer Studio and MATLAB. 1st ed. New York (USA): Springer, 2005. [Rtc97] Philips Semiconductors. PCF8583. Clock/calender with 240×8-bit RAM [online]. 1997 – [cit. 12. listopadu 2009]. Dostupn´e na www: http://www.aurel32. net/elec/pcf8583.pdf.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
71
[Sco09] ZEITNITZ, Ch. Soundcard Oscilloscope [online]. 2009 – [cit. 29. listopadu 2009]. Dostupn´e na www: http://www.zeitnitz.de/Christian/index. php?sel=scope_en. ˇ C ˇ ´IK, R. Pomocn´y n´astroj pro programov´an´ı mikrokontrol´er˚ [Sev08] SEV u AVR v jazyce C. Diplomov´a pr´ace. Brno: FEKT VUT v Brnˇe, 2008. [Ter09]
HW server. Program Terminal pro komunikaci pˇres RS-232 [online]. 2009 – [cit. 12. listopadu 2009]. Dostupn´e na www: http://rs232.hw.cz/#Terminal.
[Tex01] Texas Instruments Incorporated. Code Composer Studio Tutorial. Developing a Simple Program. Tutori´al dostupn´ y ve v´ yvojov´em prostˇred´ı Code Composer Studio 3.1. [Tex02] Texas Instruments Incorporated. Floating-Point Digital Signal Processor TMS320C6713 [online]. 2009 – [cit. 19. listopadu 2009]. Dostupn´e na www: http: //focus.ti.com/docs/prod/folders/print/tms320c6713.html. [Tex03] Texas Instruments Incorporated. Code Composer Studio Integrated Development Environment (IDE) – v4.x [online]. 2009 – [cit. 19. listopadu 2009]. Dostupn´e na www: http://focus.ti.com/docs/toolsw/folders/print/ccstudio.html. [Tex04] Texas Instruments Incorporated. TMS320C67x DSP Library [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.ti.com/tool/sprc121. [Tex05] Texas Instruments Incorporated. TMS320C6713 DSP Starter Kit (DSK) [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.ti.com/tool/ tmdsdsk6713. [Tex06] Texas Instruments Incorporated. Multicore Digital Signal Processor TMS320C6474 [online]. 2011 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://www.ti.com/product/tms320c6474. [Tex07] Texas Instruments Incorporated. TMS320C67x/C67x+ DSP CPU and Instruction Set Refernce Guide [online]. 2006 – [cit. 6. ˇr´ıjna 2011]. Dostupn´e na www: http://www.ti.com/lit/ug/spru733a/spru733a.pdf. [Toc03] TOCCI, R.J., AMBROSIO, F.J. Microprocessors and Microcomputers. Hardware and Software. 6th ed. New Jersey (USA): Prentice Hall, 2003. [Tre08]
TRETTER, S.A. Communication System Design Using DSP Algorithms. With Laboratory Experiments for the TMS320C6713 DSK. 1st ed. New York (USA): Springer, 2008.
´ NA, ˇ [Van03] VA V. Mikrokontrol´ery Atmel AVR, popis procesor˚ u a instrukˇcn´ı soubor. Praha: Ben, technick´a literatura, 2003. [Win08] WinAVR. WinAVR home page [online]. 2010 – [cit. 3. ˇr´ıjna 2011]. Dostupn´e na www: http://winavr.sourceforge.net/.
72
A A.1
Mikroprocesorov´a technika a embedded syst´emy
Manu´ al v´ yvojov´ eho prostˇ red´ı AVR Studio Nov´ y projekt a simul´ ator
V´ yvojov´e prostˇred´ı AVR Studio je voln´ y n´astroj, kter´ y je dostupn´ y na internetov´ ych str´ank´ach firmy Atmel Corporation [Atm01] a slouˇz´ı k v´ yvoji a testov´an´ı aplikac´ı pro mikrokontrol´ery AVR. V r´amci poˇc´ıtaˇcov´ ych cviˇcen´ı budeme pouˇz´ıvat verzi 4.18 (build 700). 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 projekt, kter´ y obsahuje informace o souborech se zdrojov´ ymi k´ody 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 (JSA): Atmel AVR Assembler, nebo ve vyˇsˇs´ım programovac´ım jazyce C (v laboratoˇri je dostupn´ y voln´ y pˇrekladaˇc GCC): AVR GCC. 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 u, pˇr´ıp. doˇcasnˇe ukl´adejte do adres´aˇre D:\Dokumenty\vase jmeno\. V n´azvech projekt˚ podadres´aˇr˚ u pouˇz´ıvejte pouze znaky anglick´e abecedy, ˇc´ıslice a znaky ” ”a ”-”. 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 napˇr. prvni asm (viz obr´azek A.1). Volby potvrd’te tlaˇc´ıtkem Next.
Obr´ azek A.1: Vytvoˇren´ı nov´eho projektu v prostˇred´ı AVR Studio s n´azvem prvni asm a v´ ybˇer programovac´ıho jazyka. 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 A.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 A.3. Prostˇred´ı je rozdˇeleno do pˇeti ˇca´st´ı: (1) inspektor projektu (v programovac´ım m´odu) a vnitˇrn´ı uspoˇra´d´an´ı mikrokontrol´eru (v ladic´ım m´odu), (2) textov´ y editor pro tvorbu zdrojov´ ych k´od˚ u, (3) informaˇcn´ı panel o pr˚ ubˇehu pˇrekladu aplikace, (4) nastaven´ı vˇsech intern´ıch perif´eri´ı zvolen´eho mikrokontrol´eru a (5) menu a ovl´adac´ı prvky. Zdrojov´ y k´od lze do strojov´eho jazyka pˇreloˇzit pˇr´ıkazem Build→Build, pˇr´ıp. stisknut´ım kl´avesy F7, nebo kliknut´ım na ikonu na liˇstˇe (5). T´ımto pˇr´ıkazem dojde nejprve k syn-
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
73
Obr´ azek A.2: V´ ybˇer lad´ıc´ıho n´astroje a c´ılov´eho mikrokontrol´eru.
Obr´ azek A.3: V´ yvojov´e prostˇred´ı AVR Studio s vytvoˇren´ ym projektem. taktick´e kontrole zdrojov´eho k´odu a n´aslednˇe k pˇrekladu do strojov´eho k´odu. Informace o pr˚ ubˇehu a v´ ysledc´ıch pˇrekladu jsou zobrazeny v informaˇcn´ım panelu (3). ´ Uspˇeˇsn´ y pˇreklad je indikov´an konstatov´an´ım Assembly complete, 0 errors. ´ eˇsn´ 0 warnings. Eventu´aln´ı chyby i upozornˇen´ı je potˇreba odstranit. Uspˇ y pˇreklad je tak´e doprov´azen informac´ı o velikosti v´ ysledn´eho k´odu a jeho rozloˇzen´ı do programov´e pamˇeti Flash (.cseg), datov´e pamˇeti SRAM (.dseg) a do pamˇeti EEPROM (.eseg) (viz obr´azek A.4).
74
Mikroprocesorov´a technika a embedded syst´emy
Do lad´ıc´ıho reˇzimu se pˇrep´ın´a pˇr´ıkazem Debug→Start Debugging, stisknut´ım kl´avesov´e zkratky Ctrl+Shift+Alt+F5, nebo kliknut´ım na ikonu . V prostˇred´ı simul´atoru jsou zpˇr´ıstupnˇena tlaˇc´ıtka v pˇr´ıkazov´e liˇstˇe, ovl´adaj´ıc´ı bˇeh a krokov´an´ı programu (napˇr. kl´avesou F11 ), 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 (1) doˇslo automaticky k pˇrepnut´ı na z´aloˇzku Processor, obsahuj´ıc´ı hodnoty registr˚ u jak zn´azorˇ nuje obr´azek A.4.
Obr´ azek A.4: Lad´ıc´ı prostˇred´ı AVR Studia a zobrazen´ı obsazenosti pamˇet’ov´eho prostoru. 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 .
A.2
Programov´ an´ı c´ılov´ eho mikrokontrol´ eru pomoc´ı ISP
Pˇri zakl´ad´an´ı projektu zadejte jeho jm´eno a v oknˇe Select debug platform and device nastavte 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 na 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
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
75
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 aktivovat tak´e kliknut´ım na v horn´ı liˇstˇe n´astroj˚ u. Pro u ´plnost, poloˇzka Connect umoˇzn ˇuje ruˇcn´ı nastaven´ı ikonku program´atoru. Vyberte program´ator STK500 or AVRISP. Okno pro nastaven´ı programov´an´ı pomoc´ı ISP program´atoru je zn´azornˇeno na obr´azku A.5. Obsahuje nˇekolik z´aloˇzek. Nejd˚ uleˇzitˇejˇs´ı je pro n´as z´aloˇzka Program. Okamˇzit´e smaz´an´ı cel´e programov´e pamˇeti mikrokontrol´eru lze prov´est tlaˇc´ıtkem Erase Device. 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 dialogov´e okno pro naˇcten´ı souboru, kter´ ym chceme mikrokontrol´er 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. (Tento soubor byl vytvoˇren po u ´spˇeˇsn´em pˇrekladu aplikace.) Jakmile urˇc´ıme soubor, 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 mikrokontrol´eru (pokud je to umoˇznˇeno) do souboru v poˇc´ıtaˇci. 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 A.5: 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.
76
B
Mikroprocesorov´a technika a embedded syst´emy
Z´ akladn´ı popis jazyka C
Programovac´ı jazyk C byl poprv´e standardizov´an americkou spoleˇcnost´ı ANSI (American National Standards Institute) v 80. letech 20. stolet´ı. Pˇrestoˇze byl tento standard n´aslednˇe 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 (podzim 2011) je platn´a verze z roku 1999 s oznaˇcen´ım ISO/IEC 9899:1999 [Ans99], doplnˇen´a jiˇz tˇret´ı korekc´ı z roku 2007 (ISO/IEC 9899:1999 Cor. 3:2007(E)). Pracovn´ı skupina WG14, kter´a pˇripravuje standardizaci jazyka C, vˇsak dokonˇcuje nov´ y standard s oznaˇcen´ım ISO/IEC 9899:201x [Ans1x]. V n´asleduj´ıc´ım textu jsou struˇcnˇe pops´any hlavn´ı vlastnosti jazyka C, kter´e jsou dostaˇcuj´ıc´ı pro pr´aci ve cviˇcen´ı pˇredmˇetu Mikroprocesorov´a technika a embedded syst´emy. 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´ı. Mezi nejpouˇz´ıvanˇejˇs´ı rezervovan´a slova patˇr´ı: for, return, switch, case, if, else, char, int, float, unsigned, void. Typick´ a struktura programu v C
#include
instrukce pro preprocessor
int main( void )
vˇzdy prvn´ı volan´ a funkce pˇr´ıkazy/povely
funkce a( ) pˇr´ıkazy/povely funkce b( ) pˇr´ıkazy/povely
– – – – –
deklarace pˇriˇrazen´ı vol´ an´ı funkc´ı podm´ınky ...
Obr´ azek B.1: Anatomie programu v jazyce C. Zdrojov´ y k´od v jazyce C se skl´ad´a v´ yhradnˇe z funkc´ı (jak naznaˇcuje obr´azek B.1). 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 ˇza´dn´ y vstupn´ı parametr. Je-li return pˇr´ıkaz, pomoci nˇehoˇz funkce vrac´ı vybranou hodnotu, vypad´a tˇelo hlavn´ı funkce dle v´ ypisu B.1.
B.1
Promˇ enn´ e a operandy
S hodnotami lze v jazyce C pracovat pomoc´ı promˇenn´ ych. Promˇenn´e se dˇel´ı na glob´aln´ı, kter´e se definuj´ı vnˇe jak´ekoliv funkce (zpravidla na zaˇca´tku zdrojov´eho souboru) a lze je
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
77
Zdrojov´ y k´ od B.1: Hlavn´ı funkce aplikace v jazyce C. 1
int main ( void ) {
// h l a v n´ı f u n k c e
2 3
...
// t ˇe l o h l a v n´ı f u n k c e
return ( 0 ) ;
// f u n k c e v r a c´ı hodnotu 0
4 5 6
}
pouˇz´ıt v kter´emkoliv m´ıstˇe programu a na promˇenn´e lok´aln´ı. Lok´aln´ı promˇenn´e se definuj´ı uvnitˇr funkce, pro kterou jsou urˇceny. Pro takovou promˇennou je alokov´an pamˇet’ov´ y prostor v okamˇziku vol´an´ı funkce a po n´avratu z n´ı je opˇet uvolnˇen. 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 lze promˇennou bezprostˇrednˇe naplnit zvolenou hodnotou, jak ukazuje pˇr´ıklad B.2. Zdrojov´ y k´ od B.2: Deklarace a plnˇen´ı promˇenn´ ych v jazyce C. 1 2 3
unsigned int i = 10 ; float f = 3.14 ; char ch = −10 ;
// neznam´e nkov´e c e l ´e ˇc´ı s l o , 16 b i t˚ u // r e ´a l n ´e ˇc´ı s l o , 32 b i t˚ u // znam´e nkov´e c e l ´e ˇc´ı s l o , 8 b i t˚ u
Tabulka B.1: Z´akladn´ı typy a rozsahy hodnot promˇenn´ ych v jazyce C. Typ promˇ enn´ e Velikost [b] char unsigned char signed char int unsigned int float
8 8 8 16 16 32
ˇ ıseln´ C´ y rozsah −128 0 −128 −32 768 0 ±1, 175 · 10−38
aˇz 127 aˇz 255 aˇz 127 aˇz 32 767 aˇz 65 535 aˇz ±3, 402 · 1038
V´ yˇcet z´akladn´ıch aritmetick´ 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 aritmetick´ 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 promˇenn´e a s hodnotou 3, nebo z´apis ve tvaru d <<= 2 zkracuje formu z´apisu bitov´eho posuvu doleva d = d << 2.
78
Mikroprocesorov´a technika a embedded syst´emy
Tabulka B.2: Z´akladn´ı aritmetick´e operace v jazyce C. Operace
Operand
N´asoben´ı Dˇelen´ı Dˇelen´ı modulo (celoˇc´ıseln´e) Sˇc´ıt´an´ı Odeˇc´ıt´an´ı Inkrementace Dekrementace
* / % + ++ --
Tabulka B.3: Bitov´e a logick´e operace v jazyce C. 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
~ << >> & | ^
Podm´ınˇ en´ y skok
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 splnˇen´ı 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´ıvaj´ıc´ı pˇr´ıkazu if je zn´azornˇena v uk´azce B.3. Zde se ˇca´st 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. Zdrojov´ y k´ od B.3: Z´akladn´ı vˇetven´ı programu. 1 2 3 4 5 6
i f ( a == N ) { ; } else { ; }
// j e − l i a = N, v y k o n e j n ´a s l e d u j´ı c´ı k´o d // podm´ınˇe n´a ˇc ´a s t k´o du // j e − l i a r˚ u z n´e od N, v y k o n e j n ´a s l e d u j´ı c´ı k´o d // podm´ınˇe n´a ˇc ´a s t k´o du
Druh´ y ˇcast´ y zp˚ usob podm´ınˇen´eho v´ ykon˚ u pˇr´ıkaz˚ u je pomoc´ı kombinace rezervovan´ ych slov switch, case a break. Vyuˇz´ıv´a se v situaci, kdy promˇenn´a nab´ yv´a nˇekolika m´alo hodnot. V pˇr´ıkladˇe B.4 je testov´ana hodnota promˇenn´e key, kter´a m˚ uˇze b´ yt rovna 65, 72 nebo libovoln´e jin´e hodnotˇe.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
79
Tabulka B.4: Relaˇcn´ı operandy v jazyce C. Operace
Operand
Rovno Je r˚ uzn´ y od Menˇs´ı neˇz Menˇs´ı nebo rovno Vˇetˇs´ı neˇz Vˇetˇs´ı nebo rovno Logick´e AND Logick´e OR
== != < <= > >= && ||
Zdrojov´ y k´ od B.4: Vˇetven´ı programu pomoc´ı switch a case. switch ( key ) { case 6 5 : ... break ; case 7 2 : ... break ; default : ... }
1 2 3 4 5 6 7 8 9 10
B.3
// // // // // // // // //
t e s t o v ´a n´ı hodnoty key key = 65 ( ASCII k´o d ”A” ) k´ o d v y k o n e j pouze j e − l i key = 65 konec s w i t c h key = 72 ( ASCII k´o d ”H” ) k´ o d v y k o n e j pouze j e − l i key = 72 konec s w i t c h key = l i b o v o l n ´a j i n ´a hodnota t ˇe l o podm´ınky
Cyklus v jazyce C
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 poˇctem opakov´an´ı. Pˇr´ıklad B.5 ilustruje cykly, kter´e probˇehnou pr´avˇe 8×. Zdrojov´ y k´ od B.5: Cyklus pomoc´ı for. 1 2 3
f o r ( i = 0 ; i < 8 ; i++ ) { ... }
// opakuj 8 k r ´a t // i = 0 , 1 , 2 , . . . , 6 , 7
f o r ( i = 8 0 ; i >= 1 0 ; ii = i−10 ) { ... }
// opakuj 8 k r ´a t // i = 8 0 , 7 0 , . . . , 2 0 , 10
4 5 6 7
Druh´ ym ˇcast´ ym zp˚ usobem opakovan´eho v´ ykonu programu je smyˇcka ˇr´ızena pˇr´ıkazem while. V pˇr´ıkladˇe B.6 je cyklus opakov´an pokud je hodnota promˇenn´e a r˚ uzn´a od nuly. Kaˇzd´a aplikace pro re´aln´e ˇ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´ı dat ze vstupn´ıch zaˇr´ızen´ı, jejich zpracov´an´ı a n´asledn´e vysl´an´ı hodnot nebo signalizace na libovoln´e v´ ystupn´ı zaˇr´ızen´ı. Existuj´ı dva jednoduch´e postupy, jak naprogramovat nekoneˇcnou smyˇcku v jazyce C. Oba jsou uvedeny ve zdrojov´em k´odu B.7. V pˇr´ıpadˇe, ˇze aplikace vyuˇz´ıv´a pˇreruˇsen´ı je bˇeˇzn´e, ˇze nekoneˇcn´a smyˇcka neobsahuje
80
Mikroprocesorov´a technika a embedded syst´emy
Zdrojov´ y k´ od B.6: Cyklus pomoc´ı while. a = 10 ; while ( a > 0 ) { ... a−− ; }
1 2 3 4 5
// // // //
opakuj 10 k r ´a t opakuj dokud j e podm´ınka s p l nˇe n a t ˇe l o c y k l u a = a − 1
Zdrojov´ y k´ od B.7: Realizace nekoneˇcn´e smyˇcky. while ( 1 ) { ... } for ( ; ; ) { ... }
1 2 3 4 5 6
// podm´ınka opakov´a n´ı j e vˇz dy s p l nˇe n a ; j e rovna 1 // t ˇe l o c y k l u // podm´ınka opakov´a n´ı j e vˇz dy s p l nˇe n a // t ˇe l o c y k l u
Zdrojov´ y k´ od B.8: Realizace nekoneˇcn´e smyˇcky v aplikaci s pˇreruˇsen´ım. while ( 1 ) ; for ( ; ; ) ;
1 2
// pr´ a zdn´ a nekoneˇc n´a smyˇcka // pr´ a zdn´ a nekoneˇc n´a smyˇcka
ˇza´dn´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´ı. Zdrojov´ y k´od se tak jeˇstˇe zjednoduˇs´ı (viz k´od B.8). Podrobn´ y popis jazyka C lze nal´ezt v mnoha publikac´ıch, napˇr. [Koc05], [Mil97], [Pra05], [Bar03], aj.
B.4
Specifika pˇ rekladaˇ ce GCC a knihovny AVR Libc
Pˇrekladaˇc jazyka C, kter´ y je pouˇz´ıv´an v laboratoˇri Mikroprocesorov´e techniky, tj. GCC (GNU Compiler Collection) [Gcc09] vyuˇz´ıv´a tak´e speci´aln´ı knihovnu s n´azvem AVR Libc, kter´a obsahuje doplˇ nkov´e funkce pro mikrokontrol´ery AVR. Nejˇcastˇeji pouˇz´ıvan´e funkce jsou uvedeny v pˇr´ıkladˇe B.9. Podrobnˇejˇs´ı informace lze nal´ezt v popisu knihovny [Lib09].
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
Zdrojov´ y k´ od B.9: Nejpouˇz´ıvanˇejˇs´ı funkce z knihovny AVR Libc. 1 2 3 4
// o b s l u h a e x t e r n´ıh o pˇr e r uˇs e n´ı INT0 ISR ( INT0_vect ) { ... }
5 6 7 8 9 10
// j e − l i b i t ”b” v r e g i s t r u ” r e g ” roven 1 , v y k o n e j n ´a s l e d u j´ı c´ı k´o d // r e g − l i b o v o l n y ´ ˇr ´ı d i c´ı r e g i s t r i f ( bit_is_set ( reg , b ) ) { ... }
11 12 13 14 15 16
// j e − l i b i t ”b” v r e g i s t r u ” r e g ” roven 0 , v y k o n e j n ´a s l e d u j´ı c´ı k´o d // r e g − l i b o v o l n y ´ ˇr ´ı d i c´ı r e g i s t r i f ( bit_is_clear ( reg , b ) ) { ... }
17 18 19 20 21 22
// opakuj , pokud j e b i t ”b” v r e g i s t r u ” r e g ” roven 1 // r e g − l i b o v o l n y ´ ˇr ´ı d i c´ı r e g i s t r loop_until_bit_is_set ( reg , b ) { ... }
23 24 25 26 27 28
// opakuj , pokud j e b i t ”b” v r e g i s t r u ” r e g ” roven 0 // r e g − l i b o v o l n y ´ ˇr ´ı d i c´ı r e g i s t r loop_until_bit_is_clear ( reg , b ) { ... }
29 30 31 32 33
asm ( ”LDI temp , 255\ n OUT DDRB, temp\n” ) ; // pˇr i k o m p i l a c i z d r o j o v´e h o k´o du v l o ˇz´ı n ´a s l e d u j´ı c´ı i n s t r u k c e : // LDI temp , 255 // OUT DDRB, temp
81
82
C
Mikroprocesorov´a technika a embedded syst´emy
V´ yvojov´ a deska ATmega16
Obr´ azek C.1: Zapojen´ı v´ yvojov´e desky Development Board ATmega16.
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
83
Tabulka C.1: Seznam souˇca´stek v´ yvojov´e desky Development Board ATmega16. Oznaˇ cen´ı C1, C2 C3, C4 C5 C6–C9 C10 C11 C12 C13–C23 C24 C25 C26 D1–D4 D5 D6 D7–D10 D11–D18 D19, D20 D21–D28 D29, D30 D31–D38 DIS1 DIS2 IO1 IO2 IO3 IO4 IO5 IO6 IO7
Hodnota
Souˇ c´ astka
Pouzdro
Knihovna
Kondenz´atory 27p C-EUC1206 C1206 rcl 100n C-EUC1206 C1206 rcl 10n C-EUC1206 C1206 rcl 1u0/20V CPOL-EUB/3528-21R B/3528-21R rcl 47n C-EUC1206 C1206 rcl 10u/16V CPOL-EUC/6032-28R C/6032-28R rcl 220u/16V CPOL-EUE2.5-6 E2,5-6 rcl 100n C-EUC1206 C1206 rcl 3300u/25V CPOL-EUE7.5-16 E7,5-16 rcl nepouˇzito 10n C-EUC1206 C1206 rcl Diody zelen´a LED5MM LED5MM led blik. zel. LED5MM LED5MM led 1N5062 1N5060GP DO15-12 diode nepouˇzito 1N4148 DIODE-SOD80C SOD80C diode nepouˇzito zelen´a LEDCHIPLED 1206 CHIPLED 1206 led nepouˇzito zelen´a LEDCHIPLED 1206 CHIPLED 1206 led Displeje LCD displ. MC1604B MC1604 display-lcd 7seg. displ. BX-M32X 6MX7S9MM A display-hp Integrovan´e obvody ATMEGA16A TQFP44 atmel TL77XXASM SO08 linear D/A pˇrev. TC1320EOA SO08 linear expand´er PCF8574T SO16W micro-philips RTC PFC8583T SO8-7 5 micro-philips RS-UART MAX232ECWE SO16L maxim LM386 DIL08 linear pokraˇcov´an´ı na dalˇs´ı stranˇe
84
Mikroprocesorov´a technika a embedded syst´emy
pokraˇcov´an´ı z pˇredeˇsl´e strany
Oznaˇ cen´ı Hodnota IO8 IO9
Pouzdro
Knihovna
TL431 TO92 linear 7805T TO220H linear Konektory, liˇsty AK500/2 AK500/2 con-ark F09HPS F09HP con-subd PN61729S PN61729S con-berg K375 K375 con-conrad PINHD-2X20 2X20 s pinhead PINHD-2X25 2X25 s pinhead PINHD-2X20 2X20 s pinhead PINHD-2X25 2X25 s pinhead Kl´avesnice KV-16KEY KV-16KEY keyboard Konektory AK500/2 AK500/2 con-ark AK500/2 AK500/2 con-ark Indukˇcnosti L-US0207/15 0207/15 rcl Moduly AVRISPPROGUSB AVRISPPROGUSB modules UMS2 MDIL28 modules Optoˇcleny PC817A PCSMD optocoupler
K1 K2 K3 K4 KA KB KC KD KEY1 KI1–KI8 KO1–KO8 L1 MOD1 MOD2 O1–O8 O9, O10 O11–O18
Souˇ c´ astka
nepouˇzito
P1 P2 Q1 Q2
16MHz 32,768kHz
R1–R8 R9, R10 R11–R18
1k0 nepouˇzito 680R
PC817A Odporov´e trimry TRIM EU-S64Y TRIM EU-CA6V Krystaly XTAL/S CRYTALTC26H Rezistory R-EU R1206 R-EU R1206
PCSMD
optocoupler
S64Y CA6V
pot pot
QS TC26H
special crystal
R1206
rcl
R1206
rcl
pokraˇcov´an´ı na dalˇs´ı stranˇe
Fakulta elektrotechniky a komunikaˇcn´ıch technologi´ı VUT v Brnˇe
85
pokraˇcov´ an´ı z pˇredeˇsl´e strany
Oznaˇ cen´ı Hodnota R9, R10 R21–R28 R29, R30 R31–R38 R39, R40 R41–R46 R47–R50 R51–R58 R59, R60 R61 R62–R65 R66–R72 R73 R74 RN1
nepouˇzito 4k7 nepouˇzito 270R nepouˇzito 4k7 nepouˇzito 470R nepouˇzito 150R 1k5 10k 4k7 10R 4x10k
S1–S5 SP1 T1–T6
PNP
Souˇ c´ astka
Pouzdro
Knihovna
R-EU R1206
R1206
rcl
R-EU R1206
R1206
rcl
R-EU R1206
R1206
rcl
R-EU R1206
R1206
rcl
R-EU R1206 R1206 rcl R-EU R1206 R1206 rcl R-EU R1206 R1206 rcl R-EU R1206 R1206 rcl R-EU R1206 R1206 rcl RN04 RN-5 resistor-net Tlaˇc´ıtka B1715 B1715 switch Reproduktor LP35CS08B LP35CSXXF loudspeaker Tranzistory BC807-25SMD SOT23-BEC transistor-pnp
86
D
Mikroprocesorov´a technika a embedded syst´emy
Znakov´ a sada LCD displeje 0·
2·
3·
4·
5·
6·
7·
A· B· C· D· E· F·
·0 ·1 ·2 ·3 ·4 ·5 ·6 ·7 ·8 ·9 ·A ·B ·C ·D ·E ·F
Obr´ azek D.1: Znakov´a sada LCD displeje.