David Matouek
C PRO MIKROKONTROLÉRY PIC
práce s PIC18F452 a PIC18F1220 v jazyce C
Praha 2011
David Matouek
C PRO MIKROKONTROLÉRY PIC práce s PIC18F452 a PIC18F1220 v jazyce C Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnoována jakoukoli formou (tisk, fotokopie, mikrofilm nebo jiný postup), zadána do informaèního systému nebo pøenáena v jiné formì èi jinými prostøedky. Autor a nakladatelství nepøejímají záruku za správnost titìných materiálù. Pøedkládaná zapojení a informace jsou zveøejnìny bez ohledu na pøípadné patenty tøetích osob. Nároky na odkodnìní na základì zmìn, chyb nebo vynechání jsou zásadnì vylouèeny. Vekerá práva vyhrazena. © Ing. David Matouek, 2011 © Nakladatelství BEN technická literatura, Vìínova 5, Praha 10 David Matouek: C pro mikrokontroléry PIC práce s PIC18F452 a PIC18F1220 v jazyce C BEN technická literatura, Praha 2011 1. vydání EAN ISBN
9788073004132 978-80-7300-413-2 (titìná kniha) 978-80-7300-414-9 (elektronická kniha v PDF)
OBSAH 1
ZÁKLADNÍ VLASTNOSTI .................................................. 13
2
MINIMÁLNÍ SOFTWAROVÉ A HARDWAROVÉ VYBAVENÍ ............................................ 19
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9
Instalace MPLAB IDE ......................................................................... 20 Instalace MCC18 ................................................................................. 20 Instalace PICkit 2 ................................................................................ 21 Vývojový kit PICkit 2 .......................................................................... 21 PKIT1220 ............................................................................................. 21 PKIT452 ............................................................................................... 24 M8LED ................................................................................................. 27 Propojovací kablíky ............................................................................ 29 Otestování funkce testovacích desek programem PICkit 2 ........... 29
3
PRVNÍ PØÍKLAD ............................................................... 31
3.1 3.2 3.3
Zaloení nového projektu .................................................................. 32 Pøíklad è. 1 blikání LED ................................................................... 35 Poznámky ............................................................................................ 38
4
VSTUPNÌ/VÝSTUPNÍ PORTY ........................................... 39
4.1 4.2 4.3 4.4 4.5 4.6
Obecný pohled ................................................................................... 40 Port A ................................................................................................... 41 Port B ................................................................................................... 44 Port C ................................................................................................... 47 Port D ................................................................................................... 47 Port E ................................................................................................... 48
5
ÚVOD DO PROGRAMOVÁNÍ V JAZYCE C ......................... 51
5.1 5.2 5.3 5.4
Základní pojmy programování v jazyce C ........................................ 53 Základní datové typy jazyka C51 ...................................................... 54 Podmínìný pøíkaz if ........................................................................ 55 Základní operátory ............................................................................. 56
6
POUITÍ PODMÍNÌNÉHO PØÍKAZU A POLE .................... 59
6.1 6.2 6.3
Pøíklad è. 2 zobrazení èíselné øady podmínìným pøíkazem ........ 60 Datový typ pole ................................................................................... 63 Pøíklad è. 3 zobrazení èíselné øady polem .................................... 64
7
POUITÍ FUNKCÍ .............................................................. 67
7.1 7.2
Funkce ................................................................................................. 68 Pøípravek M7SEGBUF 7segmentový displej ................................ 69
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
3
7.3
Pøíklad è. 4 zobrazení øady èíslic 0 a 9 pomocí funkcí ................................................................ 71
8
OSCILÁTOR A JEHO KONFIGURACE ............................... 73
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9
Varianty oscilátoru ............................................................................. 74 Krystalové oscilátory a keramické rezonátory ................................ 74 HSPLL .................................................................................................. 75 Vstup vnìjích hodin ......................................................................... 75 RC oscilátor ........................................................................................ 76 Blok vnitøního oscilátoru (pouze u PIC18F1220) ............................ 77 Zdroje hodin a pøepínání oscilátoru ................................................. 78 Vliv reimù sníené spotøeby na zabudovaný oscilátor ................. 81 Zpodìní pøi pøipojení napájení ........................................................ 82
9
JEDNOTKA TIMER0 ......................................................... 83
9.1 9.2 9.3 9.4 9.5 9.6 9.7
Operace ............................................................................................... 85 Pøeddìlièka ......................................................................................... 85 Pøeruení ............................................................................................. 86 Operace 16bitové íøe ........................................................................ 86 Bitové operace .................................................................................... 87 Pøíklad è. 5 blikání LED èasované pomocí Timer0 ...................... 89 Pøíklad è. 6 bìící svìtlo èasované pomocí Timer0 ..................... 92
10
PØERUENÍ ...................................................................... 95
10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8
Registry INTCON ................................................................................ 99 Registry PIR ...................................................................................... 101 Registry PIE ...................................................................................... 103 Registry IPR ...................................................................................... 105 Registr RCON ................................................................................... 106 Podrobnìjí pohled na nejdùleitìjí pøeruení ........................... 107 Zápis obsluhy pøeruení v jazyce C ............................................... 107 Pøíklad è. 7 blikání LED pøes pøeruení ....................................... 108
11
OBSLUHA DISPLEJE S ÈASOVÝM MULTIPLEXEM ........ 111
11.1 11.2 11.3 11.4
Pøípravek MDYNDSP ........................................................................ 112 Obsluha pøípravku MDYNDSP ........................................................ 114 Pamìová tøída static ....................................................................... 115 Pøíklad è. 8 øízení MDYNDSP ........................................................ 116
12
A/D PØEVODNÍK ............................................................. 119
12.1 12.2 12.3
Základní vlastnosti ........................................................................... 120 Vnitøní stavba .................................................................................... 123 Nabíjecí prodleva .............................................................................. 125
4
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
12.4 12.5 12.6 12.7 12.8 12.9 12.10 12.11 12.12
Referenèní vstupy VREF+ a VREF ................................................ 126 Výbìr automatické nabíjecí prodlevy u PIC18F1220 .................... 127 Výbìr hodin pro A/D pøevodník ...................................................... 127 Operace v reimech sníené spotøeby u PIC18F1220 .................. 127 Konfigurace analogových vstupù .................................................. 128 A/D pøevod ........................................................................................ 128 Spoutìní pøes CCP1 resp. CCP2 .................................................. 130 Pøípravek MADTEST ......................................................................... 130 Pøíklad è. 9 test A/D pøevodníku .................................................. 131
13
POKROÈILÉ ØÍDICÍ PØÍKAZY, BITOVÁ POLE ................ 133
13.1 13.2 13.3 13.4 13.5 13.6
Cykly .................................................................................................. 134 Pøepínaè ............................................................................................ 135 Pøíklad è. 10 øízení M7SEGBUF pomocí pøíkazu switch ............ 136 Datové typy struktura, sjednocení a bitové pole .......................... 138 Pøíklad è. 11 pouití bitových polí ................................................ 140 Pøíklad è. 12 úprava pøíkladu è. 11 ............................................... 142
14
JEDNOTKY TIMER1 A TIMER3 .................................... 145
14.1 14.2 14.3 14.4 14.5
Timer1 ................................................................................................ 146 Timer2 ................................................................................................ 149 Timer3 ................................................................................................ 151 Parametry vnìjího hodinového signálu ....................................... 154 Pøíklad è. 13 ....................................................................................... 155
15
LCD A JEHO OBSLUHA .................................................. 159
15.1 15.2 15.3 15.4 15.5 15.6
Øádkové LCD .................................................................................... 160 Pøípravek MLCD ................................................................................ 163 Pøíklad è. 14 ....................................................................................... 164 Funkce printf ..................................................................................... 168 Modulární programování ................................................................. 169 Pøíklad è. 15 ....................................................................................... 171
16
POUITÍ JEDNOTKY TIMER1 ........................................ 177
16.1 16.2 16.3 16.4 16.5
Mìøení kmitoètu, periody a støídy ................................................... 178 Pøípravek MRX555 ............................................................................ 179 Pøíklad è. 16 ....................................................................................... 181 Pøípravek MXTALCCP ...................................................................... 183 Pøíklad è. 17 ....................................................................................... 185
17
JEDNOTKY CCP U PIC18F452 ....................................... 189
17.1 17.2
Základní vlastnosti ........................................................................... 190 Reim Capture .................................................................................. 191
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
5
17.3 17.4 17.5 17.6 17.7 17.8 17.9
Reim Compare ................................................................................ 193 Reim PWM ....................................................................................... 195 Pøíklad è. 18 ....................................................................................... 198 Pøíklad è. 19 ....................................................................................... 200 Pøípravek MLEDSW .......................................................................... 201 Pøíklad è. 20 ....................................................................................... 203 Pøíklad è. 21 ....................................................................................... 205
18
JEDNOTKA ECCP U PIC18F1220 ................................... 207
18.1 18.2 18.3 18.4 18.5 18.6
Základní vlastnosti ........................................................................... 208 Reim Capture .................................................................................. 209 Reim Compare ................................................................................ 210 Rozíøený reim PWM ...................................................................... 212 Pøípravek MBRIDGE ......................................................................... 220 Pøíklad è. 22 ....................................................................................... 223
19
JEDNOTKA MSSP U PIC18F452 REIM SPI ................ 225
19.1 19.2 19.3 19.4 19.5 19.6
Základní vlastnosti ........................................................................... 226 Reim SPI .......................................................................................... 226 MCP4921 D/A pøevodník s SPI sbìrnicí ...................................... 232 Pøípravek MSPIDAC ......................................................................... 234 Redukce MSSP_452 ......................................................................... 236 Pøíklad è. 23 ....................................................................................... 237
20
JEDNOTKA MSSP U PIC18F452 REIM I2C ................. 241
20.1 20.2 20.3 20.4 20.5 20.6 20.7 20.8
reim I2C ............................................................................................ 242 Reim Master .................................................................................... 245 TC1320 D/A pøevodník sE sbìrnicí I2C ....................................... 254 Pøípravek MTC1320 .......................................................................... 255 Pøípravek M8DIP ............................................................................... 257 Pøíklad è. 24 ....................................................................................... 258 Pøípravek MI2CEXP .......................................................................... 260 Pøíklad è. 25 ....................................................................................... 263
21
JEDNOTKA USART U PIC18F452 .................................. 269
21.1 21.2 21.3 21.4 21.5 21.6 21.7
Základní vlastnosti ........................................................................... 270 Generátor pøenosové rychlosti ....................................................... 272 Asynchronní reim ........................................................................... 272 Synchronní reim ............................................................................. 275 Pøípravek MLCDGEN ........................................................................ 275 Redukce USART_452 ....................................................................... 281 Pøíklad è. 26 ....................................................................................... 282
6
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
22
JEDNOTKA EUSART U PIC18F1220 .............................. 285
22.1 22.2 22.3 22.4 22.5 22.6 22.7 22.8
Základní vlastnosti ........................................................................... 286 Generátor pøenosové rychlosti ....................................................... 289 Asynchronní reim ........................................................................... 291 Redukce EUSART_1220 .................................................................. 294 Pøíklad è. 27 ....................................................................................... 295 Synchronní reim ............................................................................. 299 Redukce MWIRE_1220 ..................................................................... 300 Pøíklad è. 28 ....................................................................................... 301
23
DETEKTOR PODPÌTÍ (LVD) ............................................ 305
23.1 23.2 23.3 23.4
Základní vlastnosti ........................................................................... 306 Operace ............................................................................................. 308 Pouití v reimu Sleep ..................................................................... 308 Vliv resetu ......................................................................................... 308
24
ZVLÁTNÍ RYSY MIKROKONTROLÉRU PIC18F452 ...... 309
24.1 24.2 24.3
Konfiguraèní bity .............................................................................. 310 Jednotka WDT .................................................................................. 317 Reim sníené spotøeby (Sleep) ..................................................... 318
25
ZVLÁTNÍ RYSY MIKROKONTROLÉRU PIC18F1220 .... 321
25.1 25.2 25.3 25.4 25.5
Konfiguraèní bity .............................................................................. 322 Jednotka WDT .................................................................................. 329 Dvourychlostní start-up ................................................................... 330 Fail-Safe Clock Monitor ................................................................... 330 Reimy pro øízení spotøeby ............................................................. 331
26
RESET ............................................................................. 337
26.1 26.2 26.3 26.4 26.5 26.6
POR (Power-on Reset) ..................................................................... 340 PWRT (Power-up Timer) .................................................................. 341 OST (Oscillator Start-up Timer) ...................................................... 341 PLL Lock Time-out ........................................................................... 341 BOR (Brown-out Reset) ................................................................... 342 Time-out sekvence ........................................................................... 342
27
ORGANIZACE PAMÌTI .................................................... 345
27.1 27.2 27.3 27.4 27.5
Organizace programové pamìti ..................................................... 346 Zásobník pro návratové adresy ...................................................... 346 Rychlý zásobník pro registry .......................................................... 346 Organizace datové pamìti ............................................................... 346 Stavový registr STATUS .................................................................. 347
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
7
28
DATOVÁ PAMÌ EEPROM .............................................. 349
28.1 28.2 28.3 28.4 28.5 28.6 28.7
Ovládání ............................................................................................ 350 Ètení z datové EEPROM .................................................................. 351 Zápis do datové EEPROM ............................................................... 351 Verifikace zápisu .............................................................................. 351 Ochrana proti neádoucímu zápisu ............................................... 352 Jak pouívat datovou EEPROM ...................................................... 352 Pøíklad è. 29 ....................................................................................... 352
PØÍLOHA A .................................................................................. 355 Základní pojmy èíslicové a mikroprocesorové techniky ............................. 355 A.1 Èíslicový systém, logické hradlo, dvouhodnotová logika ........... 356 A.2 Sekvenèní logické obvody .............................................................. 360 A.3 Pamìti a jejich typy .......................................................................... 363 A.4 Sériový pøenos dat ........................................................................... 364 A.5 WDT ................................................................................................... 365 LITERATURA ............................................................................... 366 PØEHLED PØÍPRAVKÙ ................................................................ 367 PLONÉ SPOJE ........................................................................... 367
8
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
PØEDMLUVA Kniha je vìnována popisu a praktickým aplikacím mikrokontrolérù PIC18F452 a PIC18F1220 v jazyce C. První kapitola uvádí základní vlastnosti obou typù mikrokontrolérù vèetnì struèného popisu jednotlivých zabudovaných periferií. Ve druhé kapitole jsme seznámeni s minimálními poadavky na programování. Je tady uvedena instalace potøebných programù, popsány vývojové desky PKIT452 a PKIT1220 a jednoduchý pøípravek se svítivými diodami M8LED. Následuje tøetí kapitola, kde je pøedvedeno vytvoøení prvního pøíkladu blikání LED. Ètvrtá kapitola popisuje vstupnì/výstupní porty, tedy jejich poèet, alternativní funkci vývodù a konfiguraci. V páté kapitole jsme seznámeni se základy jazyka C, obecnou strukturou programu, datovými typy, podmínìným pøíkazem a základními operátory. está kapitola ukazuje pouívání podmínìného pøíkazu a pole pro dekódování stavù pøed zobrazením. Sedmá kapitola se zabývá funkcemi, jejich zápisem a pouitím. Pouití je pøedvedeno na ovládání pøípravku M7SEGBUF (7segmentovka s budièem). Následuje osmá kapitola, která popisuje konfiguraci hodinových zdrojù. Dozvíme se, e mikrokontroléry mohou kromì klasického krystalu pouívat rozlièné zdroje taktovacích impulzù. Kapitola devìt popisuje jednotku Timer0. Jako praktické pøíklady pouití jsou uvedeny: blikání LED øízené èasovaèem a bìící svìtlo. Kapitola deset popisuje pouívání pøeruovacího systému (pøeruení je velmi dùleité pro obsluhu zabudovaných periferií, hlavnì èasovaèù). Je vysvìtlen zpùsob obsluhy pøeruení v jazyce C na pøíkladu blikání LED pøes pøeruení na pozadí bìícího programu. V kapitole jedenáct se seznámíme s øízením displeje s èasovým multiplexem, pøípravku MDYNDSP (pochopitelnì pøes obsluhu pøeruení èasovaèe). Následuje kapitola dvanáct, která ukazuje pouití A/D pøevodníku. Pomocí pøípravku MADTEST lze nastavit vstupní napìtí a v pøíkladu ukáeme jeho pøevod na èíslo a následné zobrazení. Kapitola tøináct seznamuje s pokroèilými øídicími pøíkazy jako jsou cykly a pøepínaè, dále je ukázáno pouití struktury a sjednocení napøíklad pro snazí pøístup k jednotlivým bitùm øídicích registrù. V kapitole ètrnáct je uveden popis jednotek Timer1 a Timer3, tedy dalích èítacích/èasovacích jednotek. Kapitola patnáct pøedvádí 4bitovou komunikaci s øádkovým LCD na pøípravku MLCD. Jsou vytvoøeny funkce pro øízení LCD a je pøedvedeno jejich pouití. Následnì je popsána funkce printf, která dokáe usnadnit výpisy èíselných údajù a je pøedvedeno její pøesmìrování na displej. Pro vìtí univerzálnost jsou ovládací funkce umístìny do zvlátní jednotky nazvané MLCD. Následuje kapitola estnáct, která vysvìtluje praktické aspekty mìøení kmitoètu, periody a støídy. Tyto informace jsou pak zuitkovány pøi pouívání pøípravku MRX555 astabilního klopného obvodu s NE555. Tento obvod dovoluje pøevádìt kapacitu nebo odpor na kmitoèet resp. èasový interval. Uvedený pøíklad pak ukazuje mìøení
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
9
kmitoètu. Dále je popsán pøípravek MXTALCCP, který umoní pøedvést realizaci zdroje reálného èasu pomocí hodinkového krystalu a jednotky Timer1. Kapitola sedmnáct popisuje jednotku CCP Capture/Compare/PWM a její pouití u mikrokontroléru PIC18F452. Prakticky jsou pøedvedeny pøíklady: odmìr trvání log. 0 pomocí záchytného registru, generování periodického signálu pomocí výstupního komparátoru, realizace monostabilního klopného obvodu a zmìna støídy pomocí PWM. Kapitola osmnáct je zamìøena na popis jednotky ECCP (vylepené CCP jednotky) a její pouití u mikrokontroléru PIC18F1220. Pøípravek MBRIDGE dovoluje vyuít 4kanálový PWM reim pro mùstkové øízení otáèek stejnosmìrného motoru obìma smìry. V kapitolách devatenáct a dvacet se seznámíme s reimy SPI a I2C jednotky MSSP mikrokontroléru PIC18F452. Pomocí SPI sbìrnice je øízen sériový D/A pøevodník MCP4921 v pøípravku nazvaném MSPIDAC. Pomocí sbìrnice I2C je øízen sériový D/A pøevodník TC1320 (v pøípravku MTC1320) a dále expandér MCP23016 (v pøípravku MI2CEXP). Kapitola dvacetjedna popisuje jednotku USART mikrokontroléru PIC18F452. V asynchronním reimu je pak ukázáno ovládání pøípravku MLCDGEN, co je LCD vybavený pøijímaèem sériové linky. Tak se tedy ukazuje vysílání pomocí sériového portu. Pøípravek MLCDGEN je uveden ve dvou cenových variantách, které se lií poètem znakù zobrazitelných v jednom øádku (draí varianta 2 øádky po 16 znacích a levnìjí varianta se 2 øádky po 8 znacích). Pro zjednoduení výstupních operací je opìt pouita funkce printf. Kapitola dvacetdva popisuje jednotku EUSART mikrokontroléru PIC18F1220. První pøíklad ukazuje mìøení kmitoètu z pøípravku MRX555 a zobrazení na MLCDGEN (opìt komunikujeme sériovou asynchronnì øízenou linkou). Druhý pøíklad ukazuje pøestavení jednotky EUSART do synchronního reimu pro emulaci sbìrnice SPI, prakticky je ukázána komunikace se sériovým D/A pøevodníkem MCP4921. Následuje kapitola dvacettøi, která popisuje jednotku LVD detektor podpìtí. Kapitoly dvacetètyøi a dvacetpìt jsou vìnovány zvlátním rysùm obou typù mikrokontrolérù. Jedná se o popis konfiguraèních registrù (umoní øídit volbu hodinového zdroje, WDT a podobnì). Následuje popis jednotky WDT (Watchdog) a reimù pro øízení spotøeby. Rovnì jsou popsány jednotky dvourychlostního start-upu a monitoru výpadku hodin, kterými disponuje mikrokontrolér PIC18F1220. V kapitole dvacetest jsou popsány jednotlivé zdroje resetu, jako jsou: reset pøi pøipojení napájecího napìtí, èasovaè nábìhu napájecího napìtí, startovací èasovaè oscilátoru, reset pøi podpìtí. Kapitoly dvacetsedm a dvacetosm seznamují s organizací pamìti a pouívání datové EEPROM. Pøíloha A vysvìtluje základní pojmy èíslicové a mikroprocesorové techniky zaèáteèníkùm. Vìnuje se tedy výkladu logických hradel, základních sekvenèních obvodù, pamìtí a sériového pøenosu.
10
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
A
CO NAJDETE NA DOPROVODNÉM CD-ROM Adresáø DOKUMENTACE obsahuje pøedevím popis mikrokontrolérù PIC18F452 a PIC18F1220 a vìtiny souèástek, které byly pouity v knize. Adresáø FOTO dokumentuje fotografiemi konstrukci vech pøípravkù. Kadý pøípravek je vyfotografován z nìkolika pohledù. Adresáø PROGRAMY obsahuje zdrojové texty vech 29 pøíkladù, které jsou uvedeny v knize. Adresáø SOFTWARE obsahuje instalaèní soubory pro MPLAB IDE, PICKIT 2 a pøekladaèe MCC18. Adresáø SPOJE obsahuje podklady pro výrobu ploných spojù pøípravkù uvedených v knize.
A
Práce s mikrokontroléry PIC18F1220 a PIC18F452 v jazyce C
11