Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje
Transcription
Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje
UVOD V PROGRAMIRANJE MIKROKRMILNIKOV Učni vodnik in navodila za vaje dsPIC33F Janez Pogorelc UM-FERI, 2011 http://www.feri.uni-mb.si http://www.ro.feri.uni-mb.si Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje CIP - Kataložni zapis o publikaciji Univerzitetna knjižnica Maribor 004.42(076.1) POGORELC, Janez Uvod v programiranje mikrokrmilnikov : navodila za vaje / Janez Pogorelc. – dopol. izd. - [Maribor] : Fakulteta za elektrotehniko, računalništvo in informatiko : Inštitut za robotiko, 2011 ISBN 86-435-0695-8 COBISS.SI-ID 54574081 Naslov: UVOD V PROGRAMIRANJE MIKROKRMILNIKOV, Učni vodnik in navodila za vaje dsPIC33F Dopolnjena izdaja, februar 2011 Avtor: višji predavatelj mag. Janez Pogorelc, univ. dipl. inž. Vse pravice so pridržane, UM-FERI 2 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Kazalo 1. PREDSTAVITEV MPU-PIC16F876 UČNEGA KOMPLETA ............................................................... 5 1.1. MODUL DSPIC33F .............................................................................................................................. 5 1.2. OPOZORILO O MOŽNOSTI NAPAČNE PRIKLJUČITVE NAPAJANJA .......................................................... 7 1.2.1. Zgradba DSC dsPIC33FJ12GP202........................................................................................... 8 1.2.2. Registrska struktura procesorja DSC dsPIC33FJ12GP202................................................... 9 1.2.3. Pomnilniški model......................................................................Napaka! Zaznamek ni definiran. 2. UPORABA PROGRAMSKEGA ORODJA MICROCHIP MPLAB.................................................... 14 2.1. 2.2. 3. UPORABA SIMULACIJSKEGA ORODJA MICROCHIP MPLAB SIM ........................................... 24 3.1. 3.2. 4. KONFIGURIRANJE MPLAB PROGRAMSKEGA OKOLJA ....................................................................... 15 NALAGANJE PROGRAMA V CILJNI SISTEM IN TESTIRANJE .................................................................. 19 KONFIGURIRANJE MPLAB PROGRAMSKEGA OKOLJA ....................................................................... 24 PREVAJANJE IZVORNEGA PROGRAMA IN TESTIRANJE ....................................................................... 25 DODATEK ................................................................................................................................................. 31 4.1. PRIMER POPOLNEGA ZGLEDA PROGRAMA V C-JEZIKU ZA DSPIC33F .............................................. 31 Vse pravice so pridržane, UM-FERI 3 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Namen in cilji učnega gradiva Učno gradivo predstavlja dopolnitev »zbranega gradiva za predavanje« z naslovom Uvod v programiranje mikrokrmilnikov in sicer kot učni vodnik z vprašanji in odgovori za utrjevanje ter priročnik za uporabo programskih orodij Microchip MPLAB in C-prevajalnika za programiranje 16-bitnih PIC mikrokrmilnikov in DSC krmilnikov Namenjeno je predvsem študentom 3. letnika visokošolskega strokovnega programa Elektrotehnika, smer Avtomatika in robotika pri podpori vajam za izbirni predmet Digitalni signalni procesorji. V uvodu je na kratko predstavljen mikrokrmilniški učni komplet Microchip dsPIC33Fxxx, ki je bil razvit za spoznavanje 16-bitnih DSP PIC krmilnikov in za podporo pedagoškemu procesu. Sledijo tabela z opisom vseh ukazov zbirnega jezika in tabela s prikazom datotečnih registrov. V nadaljevanju sledi podroben opis dela z integriranim programirnim okoljem Microchip MPLAB IDE V8.63, C prevajalnikom MPLAB C30 v kombinaciji z razvojnim kompletom Microchip PICkit3 ter napotki za konfiguriranje orodja za programiranje bodisi v zbirnem jeziku, bodisi v C-jeziku. Del gradiva je namenjen tudi »učnemu vodniku«, napotkom za iskanje dodatnih virov ter vprašanjem za utrjevanje po poglavjih, kot je to širše opisano v »zbranem gradivu za predavanje« z naslovom Uvod v programiranje mikrokrmilnikov. Za nevešče uporabnike programskega jezika C je priporočljiv predhodni obisk tečaja iz osnov programiranja v ANSI C jeziku, ali da se naučijo osnov iz ustreznih priročnikov. Zbrano gradivo je primerno tudi za tiste, ki uporabljajo druge tipe 8-bitnih Microchip PIC mikrokrmilnikov srednje kategorije (s 14-bitno programsko besedo), npr.: 16F84, 16F877A, 16F886 in tudi 16-bitnih mikrokrmilnikov in DSP PIC krmilnikov (DSC). V učnem gradivu je v dodatku izpis popolnega (delujočega) programa v C jeziku. Več zgledov kot tudi opisov študentskih projektov, ki temeljijo na uporabi PIC mikrokrmilnikov, je na voljo uporabnikom na spletnih straneh predmetov Mikroelektronika in Mikroračunalniški sistemi v okviru spletišča Inštituta za robotiko (http://www.ro.feri.uni-mb.si/izobrazevanje/). Pričujoče učno gradivo je bilo oblikovano »po merilih za e-učna gradiva« iz Poslovnika založniške dejavnosti v e-izobraževanju na Univerzi v Mariboru (aktivno kazalo, nadpovezave na poglavja, slike, tabele in HTML reference). Vse pravice so pridržane, UM-FERI 4 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 1. Predstavitev MPU-PIC16F876 učnega kompleta Razvojni komplet dsPIC33F je sestavljen iz dveh modulov (Slika 1-1): • dsPIC33F »Microchip16-bit 28-Pin Starter Development Board« • PICkit3 modul kot programator in razhroščevalnik zunanje napajanje USB serijski vmesnik ICD3 ICSP priključek PICkit3 modul mini USB za PC LD4 LD1 Reset konektor ICSP za ciljni sistem SW1 potenciometer na ADC razširitveni konektor dsPIC33F modul stikalo za preklop med PROGRAM/ USB Debug Slika 1-1: Fotografija dsPIC33F kompleta 1.1. Modul dsPIC33F Povezavo vhodov in izhodnih na priključke vrat prikazuje blokovna shema (Slika 1-). Slika 1-2: Shema s priključki dsPIC33F Vse pravice so pridržane, UM-FERI 5 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Modul dsPIC33F vsebuje tipični 16-bitni digitalni signalni krmilnik (DSC) z DSP jedrom, ki je izveden v 28-polnem DIL ohišju. Slika 1-3: Shema z DSP krmilnikom dsPIC33FJGP201 V modul dsPIC33F lahko vstavimo katerikoli 24-bitni mikrokrmilnik družine PIC24F(H) ali DSC družine dsPIC30F ali dsPIC33F (modul je v osnovi opremljen z DSC dsPIC33FJ12GP202) in vsebuje še (Slika 1-2 in Slika 1-3): • štiri LED indikatorje (LED7, LED6, LED5, LED4 na izhodih RB12 do RB15); • tipko SW1 (na vhodu RB5); • tipko SW3 (na vhodu MCLR) za resetiranje krmilnika; • stikalo SW2 za preklop med načinom za programiranje in načinom za USB komunikacijo; • potenciometer RP1, ki je spojen na vhod RB3; • možen priklop zunanjega napajanja 9 V ali aktiviranje napajanja 3,3 V iz PICkit3; • kvarčni oscilator 7,3728 MHz • ICSP konektor za priklop Microchip PICkit3 programatorja/debugerja; • zunanji USB priklop za priklop UART serijskega vmesnika na PC; • konektor J2, ki vsebuje večino priključkov DSC. Vse pravice so pridržane, UM-FERI 6 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje sklopnik JP2 za nastavitev napajalne napetosti 3,3V sklopnik JP1 za nastavitev izvora napajanja (USB) sklopnik JP3 za nastavitev dsPIC33F Slika 1-4: Fotografija dsPIC33F modula 1.2. Opozorilo o možnosti napačne priključitve napajanja OPOZORILO: Osnovna napajalna napetost za čip dsPCI33F je 3,3 V (maksimalno 3,6 V), zato mora biti (ob zunaj priključenem napajanju 9 V, ko je JP1 nastavljen na »PWR SPLY«) sklopnik JP2 nameščen na »3,3V«. Če je sklopnik JP1 nastavljen na »USB« napajanje, lahko izberemo aktivacijo napajanja iz programatorja PICkit3, pri čemer izberemo nastavitev 3,25 V. V nadaljevanju je prikazanih dsPIC33FJ12GP202. Vse pravice so pridržane, UM-FERI nekaj najpomembnejših lastnosti DSC čipa 7 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 1.2.1. Zgradba DSC dsPIC33FJ12GP202 Slika 1-5: Zgradba DSC krmilnika Vse pravice so pridržane, UM-FERI 8 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 1.2.2. Zunanji priključki DSC čipa dsPIC33FJ12GP202 Slika 1-6: Seznam priključkov – 1. del Vse pravice so pridržane, UM-FERI 9 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Slika 1-7: Seznam priključkov – 2. del Slika 1-8: Razpored priključkov na čipu Vse pravice so pridržane, UM-FERI 10 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 1.2.3. Registrska struktura procesorja DSC dsPIC33FJ12GP202 in model pomnilnika Slika 1-9: Registri procesorja dsPIC33F Vse pravice so pridržane, UM-FERI 11 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Slika 1-10: Pomnilniški model programskega pomnilnika Vse pravice so pridržane, UM-FERI 12 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Slika 1-11: Pomnilniški model podatkovnega pomnilnika Vse pravice so pridržane, UM-FERI 13 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 2. Uporaba programskega orodja Microchip MPLAB Spoznali boste programska orodja integriranega programskega okolja Microchip MPLAB. Naučili se boste kreirati projekt, konfigurirati PICkit3 ali Simulator ter sprožiti postopek generiranja izvršljivega programa za PIC mikrokrmilnik. Opomba: Opis se nanaša na programsko orodje Microchip MPLAB IDE V8.63 (ali novejši) in C-prevalalnik MPLAB C30 V3.25 (ali novejši). Na podoben način kot z Microchip PICkit3 je možnost dela z Microchip PICkit2, ICD2, ICD3 (ali združljivim programator/debuger kompletom z ICSP priključkom). V nadaljevanju bo podrobno opisan postopek od kreiranja projekta do stopnje, ko lahko program izvajamo na ciljnem mikrokrmilniku (dsPIC33FJ12GP202) ali kar na osebnem računalniku z orodjem MPLAB Simulator. Modul dsPIC33F povežite z modulom PICkit3. Če uporabite povezovalni kabel, pazite, da bo ustrezno priključen (glejte napise!). Nato programatorski modul PICkit3 povežite z računalnikom preko serijskega vodila USB. Nazadnje priključite še napajanje (AC ali DC, 7,5 do 15 V), vendar le če je pričakovana poraba večja kot 30 mA in ne bomo omogočili napajanja preko PICkit3. Sicer lahko osnovno napajanje 5,0 V omogočite kar iz PICkit3 modula s pomočjo posebne funkcije v MPLABu. Na osebnem računalniku mora biti predhodno nameščen MPLAB V8.63 (ali novejši) in Microchip C prevajalnik za 16-bitne procesorje MPLAB C30 V3.25 ali novejši. Poženite program s klikom na ikono MPLAB IDE V8.xx ali (Start → Programs → Microchip MPLAB IDE vX.Y → MPLAB IDE) in prikaže se osnovno okno MPLAB programirnega okolja. V kolikor se odpre namizje predhodnega projekta, ga zaprite: File>Close Workspace. Za programiranje v zbirnem jeziku je v okviru MPLAB IDE na voljo tudi zbirnik MPASM 30, vendar se zaradi obsežnega programskega modela (bogat nabor ukazov, veliko načinov naslavljanja, množica registrov, …) priporoča uporaba Cprevajalnika MPLAB C30 Lite. To je okrnjena izvedba, namenjena za nekomercialno uporabo. Opisi programskih orodij, priročniki za uporabo programskih orodij, primeri uporabe, opisi knjižnic za vhodno/izhodne vmesnike (dsp_lib) in operacije za digitalno signalno procesiranje (periph_lib) so na voljo v imeniku, kjer je nameščen Cprevajalnik in tudi v Help meniju MPLAB IDE: C:\Program Files\Microchip\mplabc30\v3.25\docs\C30MasterIndex.htm Vse pravice so pridržane, UM-FERI 14 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 2.1. Konfiguriranje MPLAB programskega okolja Začnite s kreiranjem novega projekta s pomočjo »čarovnika«. V meniju Projekt izberite Project Wizard… in v odprtem okencu kliknite Naprej (Next). Odpre se okno Step one (Slika 2-1), kjer izberete oznako ustreznega Microchip DSC krmilnika npr.: dsPIC33FJ12GP202. Slika 2-1: Okno za določitev elementa Kliknete Naprej (Next) in odpre se okno Step Two (Slika 2-2) za izbiro razvojnega orodja v okviru Microchip MPLAB. Za DSC krmilnik dsPIC33FJ12GP202 izberite Microchip C30 Toolsuite. pomeni izbiro progr. orodja: MPAB C30: PIC 24F, 24H, dsPIC30F, dsPIC33F Slika 2-2: Okno za določitev programskega okolja – C-jezik Vse pravice so pridržane, UM-FERI 15 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Kliknete Naprej (Next) in odpre se okno Step Three (Slika 2-3). Po kliku na Browse… izberete imenik s programom .c in vpišete ime projekta npr. DemoDSC. Slika 2-3: Okno za izbiro razvojnega okolja Ob vpisu naziva projekta je koristno, da imate v delovnem imeniku (npr. C:\Test_PICkit3\PIC16F876\DemoASM\Tst_LD1.asm) vsaj eno demonstracijsko datoteko izvornega programa v C-jeziku s končnico .c (npr. Demo33F_USB.c). Projekt lahko načeloma imenujete poljubno; privzeta je končnica .mcp, pot (direktorij) odprete v svojem delovnem imeniku (kjer se nahaja tudi izvorni program .c). Kliknete Naprej (Next) in odpre se okno Step Four okno Development Mode, kjer izberete naziv želene izvorne datoteke (Demo33F_USB.c) ter jo z gumbom Add>> prenesete v desno podokno, kot je prikazano na naslednji sliki (Slika 2-4). Dodati je potrebno tudi knjižnično datoteko p33fj12gp202.gld, ki jo poiščemo v imeniku: C:\Program Files\Microchip\mplabc30\v3.25\support\dsPIC33F\gld. Vse pravice so pridržane, UM-FERI 16 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje pot do pomožne datoteke p33FJ12GP202.gld pot do izvorne datoteke Demo33F_USB.c Slika 2-4: Okno za dodajanje izvornih in pomožnih datotek Kliknete Naprej (Next) in prikaže se (Slika 2-5) okno Summary. Slika 2-5: Okno za prikaz povzetka projekta Če smo zadovoljni z izpisanimi informacijami, nadaljujemo s klikom na gumb Dokončaj (Finish), sicer se vrnemo nazaj na ustrezni korak in popravimo vnose. Vse pravice so pridržane, UM-FERI 17 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Pojavijo se nam podobne informacije kot na spodnji sliki. Izvorna datoteka v C-jeziku se nam pokaže, če v levem zgornjem podoknu dvokliknemo na ime datoteke Demo33F_USB.c ali preko menija File>Open. Za začetno testiranje, ki omogoča samo prenos programa v FLASH pomnilnik DSC krmilnika (Program) in kasnejše samostojno (od programatorja neodvisno) izvajanje programa, izberemo način Release. Kasneje lahko kadarkoli s pomočjo menija Project ali tudi »kontrolnega okna projekta« (DemoDSC.mcw) dodajamo ali odstranjujemo izvorne datoteke ter knjižnične in simbolne datoteke po potrebi. izbira med načinoma Release in Debug ikona za Build all prevajanje Izhodno Output okno kontrolno okno projekta izvorna datoteka .c Release način sporočilo o »uspešnem prevajanju« Slika 2-6: Okno za prikaz namizja projekta Zatem lahko izvedemo prevajanje (asembliranje) programa s klikom na ikono Build all ali preko menija Project>Build all. Informacije o postopku prevajanja se izpisujejo v oknu Output v zavihku Build. Če ni sintaktičnih napak, se nam na koncu izpiše BUILD SUCCEEDED. V nasprotnem primeru se izpišejo napake, ki jih je potrebno odpraviti z urejanjem v oknu izvorne datoteke .c ter ponavljati postopek prevajanja, dokler ne odpravimo vseh. Vse pravice so pridržane, UM-FERI 18 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 2.2. Nalaganje programa v ciljni sistem in testiranje Modul »Programator/Debugger« Microchip PICkit3 je potrebno priključiti na ciljni sistem dsPIC33F preko 6-polnega ICSP konektorja, na drugi strani pa preko mini USB kabla na osebni računalnik. Če smo pred tem uporabljali PICkit3 za drugi tip mikrokrmilnika (npr. PIC16F8xx), se sproži opozorilno okno, da se mora naložiti nov »firmware«. Po potrditvi se izpiše sporočilo kot je prikazano na spodnji slik (Slika 2.7). V meniju Programmer>Select Programmer izberemo PICkit3. Izpiše se spodnje sporočilo. Če še nimamo priključenega zunanjega napajanja na ciljni sistem, se nam prikaže rdeče obarvano opozorilo (Slika 2-7), da ni prepoznan ciljni mikrokrmilnik. sprememba »Firmware« sporočilo po priključitvi napajanja Slika 2-7: Okno z informacijami o programatorju PICkit3 Lahko priključimo ustrezno zunanje napajanje (9 V) ali pa omogočimo napajanje preko USB vmesnika in PICkit3 modula. Slednje je možno za tokovno porabo do 30 mA. V meniju Programmer>Settings izberemo zavihek Power. Napetost nastavimo na 3,25 V (dejanska napetost bo med 3,1 in 3,2 V), odkljukamo Power target circuit from PICkit3 ter zapremo okno s klikom na V redu (Ok). Slika 2-8: Okno za izbiro/vnos napajanja za ciljni mikrokrmilnik Vse pravice so pridržane, UM-FERI 19 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Lahko se pojavi naslednje opozorilo (Slika 2-9), ki nas opomni, da preverimo, če naš mikrokrmilnik (dsPIC33F) res omogoča napajanje 3,3 V. Kliknemo OK. Slika 2-9: Opozorilno okno o pravilnosti napajanja za ciljni mikrokrmilnik Če se strinjamo z aktiviranim napajanjem (3,25 V) ali če smo namesto tega priključili zunanje napajanje, se v spodnjem oknu izpiše sporočilo o zaznanem ciljnem mikrokrmilniku npr. »Device ID Revision=00003001«. Build all za prevajanje Program ali programiranje Hold in Reset za resetiranje Power On/Off za vklop/izklop napajanja Slika 2-10: Statusno okno o PICkit3 programatorju in ciljnem mikrokrmilniku Pred »programiranjem« (še posebno če v izvornem programu nimamo vključene direktive __config), moramo preveriti stanje konfiguracijske besede, sestavljene iz ti. varovalk in sistemskih nastavitvenih bitov. Izberemo meni Configure>Configuration bits… in odpre se nam spodnje okno (Slika 2-11). Odstranimo kljukico v kvadratku Configuration Bits set in code in posamezne vrstice spremenimo kot kaže spodnja slika. Po potrebi spremenimo »Oscillator mode«, »Watchdog Timer Enable« in »Alternate I2C pins« tako kot kaža Slika 2-11. Zapremo okno! Vse pravice so pridržane, UM-FERI 20 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Slika 2-11: Nastavitev konfiguracijskih bitov DSC dsPIC33F Zatem lahko sprožimo »programiranje« (prenos vsebine prevedene Tst_LD1.hex datoteke v FLASH ROM pomnilnik ciljnega mikrokrmilnika) s klikom na ikono Program ali iz menija Programmer>Program. Izpiše se (Slika 2-12) sporočilo: Programming... Programming/Verify complete in takoj zatem se sproži izvajanje programa. Po potrebi ga lahko prekinemo s klikom na Hold in Reset in zatem ponovno poženemo (sprostimo reset) s klikom na sosednjo ikono. Lahko tudi vklopimo ali izklopimo napajanje (Power On/Off). Opisani način Release omogoča samostojno izvajanje programa, torej lahko odklopimo PICkit3 in ob priklopu napajanja na ciljni sistem program ponovno steče. Vse pravice so pridržane, UM-FERI 21 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Če namesto načina Release, izberemo Debug način, lahko izvajamo program pod kontrolo uporabnika in s tem omogočimo izvajanje programa po korakih, sledenje spremenljivk, nastavitev prekinitvenih točk in podobno. Izbrati moramo orodje za razhroščanje (Slika 2-12) v meniju Debugger>Select Tool>PICkit3 in priključiti, bodisi zunanje napajanje, bodisi izbrati napajanje ciljnega sistema (3,25 V) iz PICkit3 v meniju Debugger>Settings>Power ali s klikom na ikono Power On. Debug način Build all prevajanje Run start Halt ustavitev Step into koračno Animate animacija Reset na začetek Slika 2-12: Prikaz nastavitve Debug in gumbov za kontrolirano izvajanje programa Po vsaki spremembi načina (Release/Debug) je potrebno program ponovno prevesti (Build all) in ga naložiti v pomnilnik ciljnega mikrokrmilnika (Program). Opozorilo: V načinu Debug je potrebno pred uporabo funkcij za kontrolo programa preklopiti SW2 v desno pozicijo (USB/Debug) Možnosti kontrole programa: start programa (Run F9), ustavitev (Halt F5), ponovni start (Reset F6), izvajanje po korakih (Step F7), vstavljanje prekinitvene točke (Break Settings F2), sledenje registrov (SFR) in spremenljivk (Watch Windows). Opozorilo: »Razhroščevalni način« izvajanja programa (Debug Mode) ima določene pomanjkljivosti: zasede se del RAM in ROM pomnilnika, za komunikacijo med PICkit3 modulom in dsPIC33F se zasedeta liniji PGC1 in PGD1 (ti liniji se lahko sicer uporabljata tudi za serijsko komunikacijo), vsebina prikazanih registrov ne ustreza vedno dejanskemu stanju, program ne teče v realnem času!). Vse pravice so pridržane, UM-FERI 22 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Način Debug omogoča tudi možnost simulacijskega izvajanja programa (izključno na PC-ju brez mikrokrmilnika in programatorja. Simulator izberemo v meniju Debugger>Select Tool>MPLAB Sim. Podrobnejši opis simulacijskega delovanja je v poglavju 3. Povzetek postopka za vse tri osnovne načine delovanja Release/ Debug/ Debug SIM je predstavljen v naslednji tabeli. naziv postopka Release Debug Debug SIM samostojno izvajanje kontrolirano izvajanje simulirano izvajanje izbira orodja** Programmer>Select Tool>PICkit3 Debugger>Select Tool>PICkit3 Debugger>Select Tool>MPLAB SIM nastavitev konfiguracije* Configure>Configuration bits… Configure>Configuration bits… Configure>Configuration bits… prevajanje Project>Build all Project>Build all Project>Build all nalaganje programa Debugger>Program Debugger>Program izvajanje programa takojšnje oz. ob vklopu napajanja meni Debugger>… ali s kliki na ikone meni Debugger>… ali s kliki na ikone * Konfiguracijske bite nastavljamo po potrebi, praviloma samo prvič po kreiranju projekta. ** Ko izberemo programator/debugger PICkit3, je potrebno omogočiti napajanje mikrokrmilnika, bodisi preko PICkit3 (Power ON), bodisi s priklopom napajanja na ciljni krmilnik. Za razumevanje tematike je potrebno tudi predznanje iz osnov programiranja v ANSI C-jeziku, kar je na voljo med drugim v [11][5][13][18]. Pomembna lastnost Microchip MPLAB programskega okolja je, da lahko programe izvajamo (z določenimi omejitvami) tudi v simulacijskem načinu (brez uporabe ciljnega sistema) zgolj na osebnem računalniku povprečnih zmogljivosti [10]. Vprašanja za utrjevanje: 1. Kakšno končnico ima datoteka - izvorni program v C-jeziku? 2. Kakšno končnico ima datoteka - strojni program (preveden iz C-jezika)? 3. S katerim orodjem pretvarjamo izvorne programe iz C-jezika v strojne programe ? 4. Kam se naloži program pri uporabi PICkit3 modula? 5. Kaj predstavlja (pri uporabi MPLAB C30 Lite) izbira opcije »Debug«? 6. Kakšne so prednosti in slabosti simulatorja? Vse pravice so pridržane, UM-FERI 23 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 3. Uporaba simulacijskega orodja Microchip MPLAB SIM Spoznali boste programska orodja integriranega programskega okolja Microchip MPLAB. Naučili se boste kreirati projekt, konfigurirati Simulator ter sprožiti postopek generiranja izvršljivega programa za MPLAB Simulator na osebnem računalniku. Opomba: Opis se nanaša na programsko orodje Microchip MPLAB IDE V8.63 (ali novejši). V nadaljevanju bo podrobno opisan postopek od kreiranja projekta do stopnje, ko lahko program izvajamo z orodjem MPLAB Simulator na osebnem računalniku, tako da posnemamo ciljni mikrokrmilnik (npr.: dspPIC33Fxxx). Poženite program Microchip MPLAB (Start → Programs → Microchip MPLAB → MPLAB IDE) in prikaže se osnovno okno MPLAB programirnega okolja. 3.1. Konfiguriranje MPLAB programskega okolja Simulacijski način izvajanja programa je le posebna oblika Debug načina, za kar moramo izbrati orodje za razhroščanje (Slika 2-1) v meniju Debugger>Select Tool>MPLAB SIM. Predhodna priprava projekta (Project Wizard) je povsem identična, kot je za izvorne programe v zbirnem jeziku (.asm) ali C-jeziku (.c). Slika 4-1: Okno za prikaz simulacijskega načina izvajanja programa Vse pravice so pridržane, UM-FERI 24 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Najprej preverimo oz. nastavimo frekvenco urinega takta Debugger>Settings... Izberemo zavihek Osc/Trace in prikaže se (Slika 2-2) okno, kjer lahko poljubno spremenimo frekvenco urinega takta procesorja: vpišemo frekvenco urinega takta Slika 4-2: Okno za izbiro frekvence simuliranega mikrokrmilnika Opomba: Najvišja možna frekvenca posnemanega mikrokrmilnika dsPIC33Fxxx je 40 MHz, kar predstavlja 25 ns čas izvajanja običajnega ukaza. Seveda lahko izberemo tudi poljubno nižjo frekvenco. Frekvenca je pomembna le v primeru merjenja časovnih intervalov (StopWatch), 3.2. Prevajanje izvornega programa in testiranje Program je pripravljen za (navidezno) izvajanje na osebnem računalniku takoj po prevajanju Project>Buld,,,, zato odpade kakršnokoli nalaganje v ciljni sistem. Odpremo lahko tudi okno posebnih datotečnih registrov (Slika 4-3) View>Special Function Registers (SFR), kar omogoča sledenje večine registrov. Prevajanje (aktiviranje zbirnika ASM ali C prevajalnika) izvedemo tako, da v osnovnem oknu MPLAB menija Project izberemo opcijo Build all (bližnjica F10) oz. klik na ustrezno ikono v sredini orodne vrstice. Na voljo so bogate možnosti kontroliranega simulacijskega izvajanja programa (v meniju (Debugger → ...): start programa (Run F9), ponovna priprava na start (Reset F6), ustavitev (Halt F5), izvajanje po korakih - vrsticah (Step F7), animirano izvajanje programa (Animate F6). Seveda lahko uporabljamo tudi ustrezne ikone kot je opisano za Debug način z PICkit3 sistemom. Vse pravice so pridržane, UM-FERI 25 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Slika 4-3: Zaslonska slika MPLAB SIM okolja z odprtim izvornim programom in prikazom SFR registrov Pomembne lastnosti pri simulacijskem izvajanju programov so: vstavljanje prekinitvenih točk (BreakPoints F2), stimuliranje bitnih vhodov (Asynhronous Stimulus), sledenje vsebine oz. vrednosti registrov (SFR) in spremenljivk (Watch Windows) ter merjenje časa v ciklih in realni časovni enoti (Stopwatch). Prekinitveno točko (Breakpoint) lahko vstavimo/odstranimo tako, da dvokliknemo na želeno programsko vrstico ali z desno tipko miške izberemo: Set Break Point, pri čemer se na levi strani vrstice z aktivno prekinitveno točko prikaže rdeč simbol B. Število prekinitvenih točk je poljubno, medtem ko je v Debug izvajalnem načinu s PICkit3 omejitev na eno samo prekinitveno točko. Od ene do druge prekinitvene točke lahko merimo čas z vgrajeno uro - štoparico, ki jo aktiviramo iz menija (Debugger>Stopwatch). S tem se odpre opazovalno okno (Slika 4-4). Vrednost lahko kadarkoli postavimo na nič (Zero). Čas se prikazuje v urinih ciklih in v časovnih enotah (odvisno od nastavitve frekvence procesorja). Informacijsko koristna je tudi spodnja - statusna vrstica MPLAB (Slika 4-3), ki med drugim prikazuje izbran način (MPLAB SIM), izbran mikrokrmilnik 16F876, številko vrstice izvornega programa (LnXY), trenutno vrednost programskega števca (pc:0xYYYY), trenutno vrednost delovnega registra (W) in vrednosti bitnih zastavic v registru STATUS (z, dc, c). Vse pravice so pridržane, UM-FERI 26 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Slika 4-4: Okno štoparice Bitne vhode (za PIC16F876 so lahko RA0 do RA5, RB0 do RB7, RC0 do RC7) lahko stimuliramo (spreminjamo vhodne vrednosti med 0 in 1) tako, da izberemo meni: (Debug > Simulator Stimulus > New Workbook ...). Pojavi se okno (Slika 4-5), v katerem lahko nastavimo večje število stimulacijskih točk. Če želimo asinhrono preklapljati vhod npr. RA4, izberemo zavihek Asynch, kliknemo na Pin/SFR in izberemo RA4 vhod. V zavihku Action izberemo npr. preklopni način (Toggle), ali enega od ostalih načinov (Slika 4-5). Po potrebi izpolnimo tudi ostala polja v vrstici. Dodamo lahko še več vhodov, ki jih bomo ročno stimulirali (spreminjali) s klikom na simbol > v koloni Fire. Slika 4-5: Okno za stimulacijo vhodov Vsebino posebnih datotečnih registrov (Slika 4-3) lahko spremljamo v oknu Special Function Registers - SFR, ki si ga namestimo npr. na desno stran, če je na levi izvorni program. Vsaka sprememba vsebine registra med izvajanjem programa se odrazi v rdeči barvi vrstice z imenom registra ter 8-bitno vrednostjo v šestnajstiški, desetiški, binarni, in ASCII obliki. Če želimo spremljati vrednosti poljubnih spremenljivk (simboličnih imen), si moramo aktivirati opazovalno okno v meniju: View > Watch. Izberemo definirano simbolično ime npr. Vredn in to potrdimo s klikom na Add Symbol. Vse pravice so pridržane, UM-FERI 27 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Neodvisno lahko opazujemo tudi definirana simbolična imena (SFR registri), tako da izberemo npr. PORTC in z klikom na Add SFR potrdimo izbiro. Z desnim klikom na Properties (Slika 4-7) lahko vsaki spremenljivki prilagodimo izpis vrednosti iz (privzeto 8-bitne šestnajstiške npr. 0xF1) na 1-, 8-, 24-, 16- ali 32-bitno vrednost v desetiški, binarni ali ASCII (znakovni) notaciji). Tako lahko želene spremenljivke (pomnilniško lokacije) izpišemo v oknu Watch_1 ali v ostalih zaporednih podoknih. (Slika 4-6). Slika 4-6 Okno Watch za sledenje trenutnih vrednosti spremenljivk in registrov Slika 4-7: Okno za določitev načina številskega/znakovnega prikaza V padajočem meniju Symbol lahko za vsako spremenljivko posebej določimo velikost (Size), način izpisa (Format) in vrstni red zlogov (Byte Order). Vse pravice so pridržane, UM-FERI 28 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Zelo uporaben za dinamično analizo je ti. grafični način sledenja časovnega poteka spremenljivk Simulator > Logic Analyzer . Slika 4-8: Namizje z oknoma Stimulus in Logoc Analyzer Prikaz v oknu Logic Analyzer določimo s klikom na Channels in izbiro signalov, ki jih želimo opazovati. Program poženemo z Run in ob ustavitvi Halt se izrišejo časovni poteki. Sproti lahko spremljamo signale, če program poženemo z Animate in ob tem spreminjamo stimulacijski vhod npr. RA4. Opozorilo: »Razhroščevalni način« izvajanja programa (Debug Mode) v simulacijskem okolju MPLAB SIM na osebnem računalniku ima določene pomanjkljivosti: ni mogoče vplivati na napetost na analognih vhodih, nejasen odziv pri multipleksiranih vhodih, program ne teče v realnem času, ...). Realne razmere pri testiranju programov se pokažejo šele, ko uporabljamo ciljni mikrokrmilnik, bodisi v samostojnem načinu Release programiranja FLASH ROM in poganjanja programa v ciljnem mikrokrmilniku s priključenimi vhodno/izhodnimi napravami, bodisi v Debug PicKit3 »razhroščevalnem načinu«. Simulator lahko s pridom uporabljamo pri učenju ter spoznavanju ukazov in programskih postopkov, pri testiranju programskega toka in merjenju časovnih intervalov. Vse pravice so pridržane, UM-FERI 29 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Za razumevanje tematike je potrebno tudi predznanje iz osnov programiranja v zbirnem jeziku, kar je na voljo med drugim v [2][4][6][9]. Pomembna lastnost Microchip MPLAB IDE programskega okolja je, da lahko programe izvajamo (z določenimi omejitvami) tudi v simulacijskem načinu (brez uporabe ciljnega sistema) zgolj na osebnem računalniku povprečnih zmogljivosti [10]. Vprašanja za utrjevanje: 1. Kateri tipi datotek (končnice) so nujno potrebni pri kreiranju projekta za programiranje v zbirnem jeziku ? 2. Kakšno končnico ima datoteka – strojni (izvršljiv) program v zbirnem jeziku? 3. S katerim orodjem pretvarjamo izvorne programe v zbirnem jeziku v strojne programe ? 4. Katere možnosti testiranja (poganjanja) programov imamo v MPLAB Simulatorju? 5. Na kakšen način izpiše štoparica (Stopwatch) čas izvajanja programa ? 6. V katerih številskih formatih lahko spremljamo vrednost spremenljivke v opazovalnem oknu (Watch Window) ? Vse pravice so pridržane, UM-FERI 30 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje 4. Dodatek 4.1. Primer popolnega zgleda programa v C-jeziku za dsPIC33F //***************************************************************** //* 28pin_UART_TX-RX_Using_USB //* In this example program characters pressed on the keyboard are sent to the device via usb. //* The device replicates the character back to the PC enclosed in quotes. //* Also this program blinks all four LED's at 250ms by using timer 1. //***************************************************************** #include "p33FJ12GP202.h" // the above include path may be different for each user. If a compile // time error appears then check the path for the file above and edit // the include statement above. //#define XTFREQ #define FCY 7370000 39613000 //FRC frequency //Instruction Cycle Frequency #define BAUDRATE #define BRGVAL 9600 ((FCY/BAUDRATE)/16)-1 int main(void) { // Configure Oscillator to operate the device at 40Mhz // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 // Fosc= 7.37*43/(2*2)=79.23MHz PLLFBD=41; CLKDIVbits.PLLPOST=0; // N1=2 CLKDIVbits.PLLPRE=0; // N2=2 // M=43 // Disable Watch Dog Timer RCONbits.SWDTEN=0; // Wait for PLL to lock while(OSCCONbits.LOCK!=1) {}; RPINR18 = 9; RPOR4bits.RP8R = 3; AD1PCFGL = 0x03C0; // Make Pin RP9 U1RX // Make Pin RP8 U1TX // Make analog pins digital LATB = 0x0000; TRISB = 0x0FFF; TMR1 = 0; PR1 = 0xFFFF; IFS0bits.T1IF = 0; IEC0bits.T1IE = 1; T1CON = 0x8030; // Config LED's as output and U1RX as Input // clear timer 1 // interrupt every 400ms // clr interrupt flag // set interrupt enable bit // 1:64 prescale, start TMR1 U1BRG = BRGVAL; U1MODE = 0x8000; /* Reset UART to 8-n-1, alt pins, and enable */ U1STA = 0x0440; /* Reset status register and enable TX & RX*/ _U1RXIF=0; while(1) { int a; while (_U1RXIF==0); a = U1RXREG; // Wait and Receive One Character while(!U1STAbits.TRMT); U1TXREG = '"'; Vse pravice so pridržane, UM-FERI 31 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje while(!U1STAbits.TRMT); U1TXREG = a; // Echo Back Received Character with quotes while(!U1STAbits.TRMT); U1TXREG = '"'; while(!U1STAbits.TRMT); U1TXREG = ' '; _U1RXIF=0; // Clear UART RX Interrupt Flag } return 0; } void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void) { IFS0bits.T1IF = 0; // clear interrupt flag LATB ^= 0xF000; //Toggle LED's } Program 4-1: Demo program za dsPIC33F Vse pravice so pridržane, UM-FERI 32 Uvod v programiranje mikrokrmilnikov, učni vodnik in navodila za vaje Literatura [1] James M. Sibigtroth: Understanding small microcontrollers; Prentice Hall, 1993; ISBN 0-13089129-0, 250 strani [2] Nebojša Matić: PIC mikrokontroleri; Mikroelektronika, Beograd 2002; ISBN 86-902189-4-7; 276 strani [3] Matjaž Colnarič: Osnove digitalne tehnike v računalništvu; UM-FERI, Maribor, 2002; ISBN 86435-0435-8; 138 strani [4] Miran Rodič, Janez Pogorelc: Navodila za delo z modulom MPU-PIC16F876 (interno gradivo), [http://www.ro.feri.uni-mb.si/predmeti/mikro_el/nav_mpu_pic.pdf]; UM-FERI, Maribor, 2002 [5] Darko Dužanec: Programiranje PIC-ev v C-ju (serija člankov), Svet elektronike, maj 2004 do julij 2004, številke 109-111, ISSN 1318-4679 [6] Jernej Škvarč: PIC od začetka (serija 9 člankov), Svet elektronike, marec 2003 do januar 2004, številke 96-105, ISSN 1318-4679 [7] Microchip: spletna stran proizvajalca PIC mikrokrmilnikov, [http://www.microchip.com/] [8] Microchip: Priročnik za mikrokrmilnike PIC16F87x (angl.), [http://www.ro.feri.uni-mb.si/predmeti/mikro_el/FTP/PIC16F876_30292b.pdf], 2000, 200 strani [9] Microchip: Priročnik za MPLAB ICD (angl.), [http://www.ro.feri.uni-mb.si/predmeti/mikro_el/FTP/ICD_51184d.pdf], 2000, 104 strani [10] Microchip: MPLAB V5.70 integrirano programsko okolje (program), [http://www.ro.feri.uni-mb.si/predmeti/mikro_el/FTP/mp57full.zip], 2003, 13 MB [11] Brian W. Kernicham, Dennis M. Ritchie: Programski jezik C (slovenski prevod), 1990, UM-FERI Ljubljana, 240 strani [12] HI-TECH Software: spletna stran proizvajalca C-prevajalnika, [http://www.htsoft.com/] [13] HI-TECH Software: priročnik C-prevajalnika HI-TECH PICC Lite (angl.), [http://www.htsoft.com/files/demo/piccliteman.zip], 2002, 358 strani, 1,4 MB [14] HI-TECH Software: C-prevajalnik HI-TECH PICC Lite (program), [http://www.htsoft.com/files/demo/picclite-setup.exe], 2,4 MB [15] Miran Rodič: Uvod v programski jezik C, (interno gradivo) [http://www.ro.feri.uni-mb.si/predmeti/sis_meh/vaje/UvodC.pdf], UM-FERI, 2001, 14 strani [16] Hobby Electronics: spletna navodila za uporabo PIC mikrokrmilnikov (angl.), [http://www.interq.or.jp/japan/se-inoue/e_pic.htm] [17] Hobby Electronics: spletni primeri uporabe PIC mikrokrmilnikov (angl.), [http://www.interq.or.jp/japan/se-inoue/e_pic6.htm] [18] MicrochipC.com: spletni primeri C-programov za PIC-e (angl.), [http://www.microchipc.com/] [19] MicrochipC.com: Bootloader – najpreprostejši programator PICev (angl.), [http://www.microchipc.com/PIC16bootload/] [20] A. Tetičkovič, B. Brečko, B. Gračner: Mobilni robot za sledenje črti, Uvodni seminar skupine študentov 3.l. Mehatronika, [http://www.ro.feri.unimb.si/predmeti/skup_sem/projektu/MobRob_Tet_Bre_Gra.pdf], UM-FERI, 2003 [21] J. Horvat, I. Kodrič: Poročilo o izdelavi mobilnega robota, Uvodni seminar skupine študentov 3.l. Mehatronika, [http://www.ro.feri.uni-mb.si/predmeti/skup_sem/projektu/protokol Kodric_meharudi.pdf], UM-FERI, 2003, 14 strani [22] Tekmovanje RoboT200X: spletni članki z opisi mini mobilnih robotov na osnovi PIC mikrokrmilnikov, [http://www.ro.feri.uni-mb.si/tekma/dodatne_informacije_nasveti.htm] Vse pravice so pridržane, UM-FERI 33