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