31. julija, 2004

PIC od začetka – uvod

Slike PPM PPM 9 - PIC od začetka - uvodPrepričan sem, da je med vami marsikdo, ki bi rad uporabil mikrokontrolerje za izdelavo kakšne zanimive in uporabne elektronske naprave, pa ne ve, kje bi se stvari lotil. V tem priročniku bom zato poskušal približati družino PIC mikrokontrolerjev tudi tistim, ki z njimi še niso imeli opravka. Upam, da bom s pomočjo primerov in enostavne razlage napisal uporaben priročnik, ki vas bo naučila osnov programiranja PIC mikrokontrolerjev. Programirali bomo v zbirniku v okolju MPLAB, začeli pa bomo z najbolj razširjenim mikrokontrolerjem PIC 16F84.

Kaj sploh je PIC?

Slike PPM PPM 9a - PIC od začetka - uvodPIC je družina mikrokontrolerjev proizvajalca Microchip, ki so trenutno dokaj popularni. V tej družini je veliko mikrokontrolerjev z različnimi zmogljivostmi – od najenostavnejših z 8 nogicami (pini) pa do zmogljivih 40 – pinskih. Vsi vsebujejo na enem integriranem vezju (čipu) centralno procesno enoto (CPE), programski in podatkovni pomnilnik ter razne vhodno/izhodne naprave, ki so odvisne od tipa mikrokontrolerja. PIC-e lahko tako kot vse mikrokontrolerje uporabljamo na ogromno načinov, saj njihovo vlogo v vezju določa program, ki ga vanje vpišemo.

PIC 16F84

Slike PPM PPM 9b - PIC od začetka - uvodMikrokontroler PIC 16F84 lahko smatramo kot standard v hobi elektroniki. K njegovi popularnosti sta veliko pripomogla nizka cena in FLASH programski pomnilnik, ki omogoča večkratno vpisovanje programa (po podatkih proizvajalca do 1000 vpisov). Vpisovanje programa v mikrokontroler poteka zelo enostavno s pomočjo programatorja, ki ga lahko sami izdelamo z nekaj elektronskimi elementi, ki skoraj zagotovo ležijo v predalu vsakega elektronika. Tak programator navadno priklopimo na serijska (COM) vrata računalnika, kjer tudi dobi ustrezno napajanje. PIC 16F84 navadno dobimo v 18–pinskem DIL ohišju. Od osemnajstih pinov je 13 vhodno/izhodnih, ki jih lahko programsko krmilimo. Največja frekvenca, pri kateri 16F84 še deluje, je 10MHz, napetost napajanja pa je lahko med 4 in 6 volti. Ponavadi se držimo napetosti 5 V in frekvence 4 MHz. Čip vsebuje 1 k FLASH programskega pomnilnika, 68 bajtov RAM pomnilnika za splošno uporabo ter 64 bajtov podatkovnega EEPROM pomnilnika. Med dodatnimi enotami na čipu najdemo še timer, watchdog timer (ogledali si ju bomo kasneje), poleg tega pa pozna štiri različne tipe prekinitev. Centralna procesna enota je 8-bitna, pozna pa samo 35 instrukcij, zato boste programiranje hitro obvladali. Narejena je v RISC tehnologiji, kar omogoča izdelavo zelo kratkih in hitrih programov – pri 4 MHz se vsaka instrukcija izvede v le 1 µs, vejitvene instrukcije pa v 2 µs.

Kaj je zbirnik?

Slike PPM PPM 9c - PIC od začetka - uvodZbirnik je programski jezik, ki ga lahko uvrstimo tik nad strojni jezik, ki je razumljiv mikrokontrolerju. Vsaka od 35 instrukcij (ukazov) mikrokontrolerja 16F84 ima v zbirniku svojo okrajšavo, imenovano mnemonik. Zbirniški prevajalnik prevaja program v zbirniku vrstico za vrstico tako, da mnemonike v vrsticah prevede v strojno kodo ukaza, ki jo razume CPE mikrokontrolerja. Dobljene strojne kode vpisuje v datoteko s končnico .hex, ki jo nato s programatorjem prenesemo v programski pomnilnik mikrokontrolerja. Postopek prikazuje slika 1. [shema_prevajanje.wmf, napis:

Program v zbirniku ste verjetno videli že vsi. Sestavljen je iz stolpca instrukcij in njihovih parametrov, pri čemer so instrukcije vedno v levem stolpcu, sledijo pa jim parametri. Če je parametrov več, jih ločimo z vejicami. Vseh 35 instrukcij boste spoznali sproti. Zelo lepa navada programerja je, da v program dodaja komentarje, ki opisujejo delovanje programa. Ti namreč zelo olajšajo pregledovanje programa, v veliko pomoč pa so tudi pri odpravljanju napak. Če bi naš program gledal nekdo drug, bi brez komentarjev le težko ugotovil, kaj program sploh dela. Komentarje lahko napišemo v svojo vrstico ali na konec katere koli vrstice, vedno pa jih moramo začeti s podpičjem. Poleg instrukcij sestavljajo program v zbirniku še direktive prevajalniku. To so ukazi, ki se ne prevedejo v strojno kodo, temveč povejo prevajalniku, kako naj prevaja posamezne dele programa. Vsak program naj vsebuje na začetku direktivo za določitev tipa uporabljenega mikrokontrolerja, direktivo za vključitev datoteke z definicijami registrov mikrokontrolerja, direktivo za nastavitev mikrokontrolerja in direktivo end na koncu programa. Poglejmo si nekaj osnovnih direktiv v MPLAB zbirniku: