Mikrokontroler PIC16f628a

PIC (Peripheral Interface Controller) je družina mikrokontrolerjev proizvajalca Microchipa. V tej družini obstaja veliko mikrokontrolerjev z različnimi zmogljivostmi. Najenostavnejši so zgrajeni v 8-pinskem ohišju (ohišju z 8 nožicami, priključki), zmogljivejši pa so zgrajeni v 40-pinskem ohišju. Na enem integriranem vezju vsebujejo centralno procesno enoto (CPE), programski in podatkovni pomnilnik ter različne vhodno-izhodne naprave. Njihovo uporabnost določa program, ki ga vanje vpišemo. Pri programiranju bomo uporabili mikrokontroler PIC16F628A, zato moramo poznati njegove osnovne karakteristike.

Slika 1: Mikrokontroler PIC16f628a (vir: http://www.microchip.com/wwwproducts/en/PIC16F628A)


Njegove najpomembnejše značilnosti so: 

Opis osnovne vloge posameznih priključkov mikrokontrolerja PIC16F628A:

Slika 2: Oznake priključkov mikrokontrolerja PIC16F628A

Programski pomnilnik Flash:

Programski pomnilnik Flash uporabljamo za vpisovanje programa v mikrokontroler. Vanj lahko shranimo 2048 besed (word), dolgih 14 bitov od naslova 0000h do 07FFh. Vsebina programskega pomnilnika Flash se ne izbriše, če mikrokontrolerju izklopimo napajanje. Po podatkih proizvajalca se vsebina ohrani najmanj 40 let. Programski pomnilnik Flash omogoča večkratno vpisovanje programa, po podatkih proizvajalca do 100.000 vpisov. Ponastavitveni (reset) vektor se nahaja na naslovu 0000h, prekinitveni vektor pa na naslovu 0004h.

Slika 3: Programski pomnilnik Flash

Podatkovni pomnilnik RAM:

Podatkovni pomnilnik RAM (Random access memory) je razdeljen na štiri banke: banko 0, banko 1, banko 2 in banko 3. Vsaka banka ima 128 bajtov spominskega prostora. Vsebuje SFR- in GPR-registre. SFR-registri zavzemajo prvih 32 lokacij v vsaki banki. Preko njih komuniciramo z ostalimi enotami mikrokontrolerja. Na sliki 4 vidimo, da se nekateri SFR-registri in njihove vrednosti prelivajo v druge banke. Tako se na primer register PORTB iz banke 0 (naslov 06h) preliva z registrom PORTB v banki 2 (naslov 106h).

GPR-registri zavzemajo 224 bajtov podatkovnega pomnilnika RAM, od katerih se jih 16 bajtov na zadnjih lokacijah preliva v vse štiri banke. V banki 0 zavzemajo GPR-registri še 80 bajtov (od 20h do 6Fh), v banki 1 tudi 80 bajtov (od A0h do EFh), v banki 2 pa še 48 bajtov (od 120h do 14Fh) podatkovnega pomnilnika RAM. Vsebine GPR-registrov se izgubijo, ko mikrokontrolerju izklopimo napajanje.

Če želimo brati ali pisati v register podatkovnega pomnilnika RAM, se moramo nahajati v banki, v kateri je želeni register.

Programski števec:

V mikrokontrolerju PIC16F628A je programski števec 13-biten register. V njem se vedno nahaja naslov naslednje instrukcije, ki se bo v programu izvedla. Dosegljiv je preko PCLATH- in PCL-registrov. PCL-register vsebuje spodnjih 8 bitov programskega števca. Lahko ga poljubno beremo ali pa vanj vpisujemo. Zgornjih 5 bitov programskega števca pa najdemo v registru PCLATH, ki ni direktno dosegljiv.

Slika 4: Organizacija podatkovnega pomnilnika RAM

Podprogrami:

Podprogram je del programa, ki je ločen od glavnega programa. Pokličemo ga po potrebi. Če želimo, da se neki del programa izvede večkrat, za ta del programa izdelamo podprogram. Podprogram iz glavnega programa pokličemo z instrukcijo CALL. V parametru te instrukcije navedemo labelo oziroma naslov, ki pomeni ime podprograma. Podprogram vedno začnemo z labelo, zaključimo pa z instrukcijo RETURN, ki poskrbi, da se iz podprograma vrnemo v glavni program na instrukcijo, ki sledi instrukciji CALL.

Instrukcija CALL povzroči skok na podprogram z labelo, ki je zapisana v parametru te instrukcije. Podprogrami se nahajajo na koncu glavnega programa, pred direktivo END. Če bi ga zapisali kar med glavnim programom, bi se izvedel tudi takrat, ko ga ne bi poklicali.

Podprograme lahko pokličemo tudi iz podprograma, vendar le do meje 8 podprogramov v globino. Delovanje podprogramov prikazuje slika 5.

Slika 5: Delovanje podprogramov

Aritmetična logična enota:

Za izvajanje vseh instrukcij v mikrokontrolerju PIC skrbi 8-bitna aritmetična logična enota ALU (Arithmetic logic unit). Lahko sešteva in odšteva 8-bitna števila ter z njimi izvaja nekatere logične operacije (AND, OR, XOR, NOT …). Po izvršitvi vsake instrukcije se v registru STATUS postavijo trije biti na ustrezne vrednosti. Iz njihovih vrednosti lahko ugotovimo, kakšen je dobljeni rezultat. Ta je lahko pozitiven, negativen, enak 0 ali napačen. Te tri bite imenujemo zastavice.

SFR-registri:

V gradivu so opisani tisti SFR-registri, ki jih bomo uporabljali pri izdelavi vaj. Podrobnejše opise najdemo v kataloških podatkih proizvajalca mikrokontrolerja PIC16F628A.

Register STATUS (RAM naslov: 03h, 83h, 103h, 183h)

Tabela 1: Register STATUS

            00 => banka 0 (00h–7Fh)

            01 => banka 1 (80h–FFh)

            10 => banka 2 (100h–17Fh)

            11 => banka 3 (180h–1FFh)

            1 => banki 2, 3 (100h – 1FFh)

            0 => banki 0, 1 (00h – FFh)

Register OPTION (naslov RAM: 81h, 181h)

Tabela 2: Register OPTION

Tabela 3: Preddelilnik

Register INTCON (RAM naslov: 0Bh, 8Bh, 10Bh, 18Bh)

Tabela 4: Register INTCON

Registra PORTA in TRISA:

Pin RA4 lahko uporabimo kot vhod, kot izhod (pin RA4 je tipa open drain => pozna dve stanji: maso, kadar je na stanju logične 0 in veliko impedanco, kadar je v stanju logične 1. Pin RA4 nikoli ne da +5 V izhoda, ampak le maso.) ali kot števni vhod za timer TMR0.

Pin RA5 lahko uporabimo samo kot vhod.

Vse ostale pine na PORTA (RA0 - RA3 in RA6 - RA7) lahko uporabljamo kot vhodne ali kot izhodne pine.

Kadar uporabljamo zunanji kristalni oscilator, ga priključimo med pina RA6 in RA7 (določimo s konfiguracijskimi biti). V tem primeru TRISA register ignorira bita 6 in 7.

Če uporabljamo pine na PORTA kot digitalne, vhodno/izhodne pine, moramo ustrezno nastaviti bite v registru CMCON.

 

Primer nastavitve:

        clrf     PORTA             ;inicializacija PORTA

        movlw    b'00000111'     

        movwf    CMCON             ;omogočimo vhodno/izhodne pine (izklopimo komparatorje)

        bcf      STATUS,RP1

        bsf      STATUS,RP0        ;banka 1

        movlw    b'00011111'

        movwf    TRISA             ;RA0 - RA4 so vhodi, RA5 je vedno vhod (bit 5 v TRISA se vedno prebere kot "1"

                                   ;RA6 - RA7 sta odvisna od izbire oscilatorja (konfiguracijski biti)

 

Pini na PORTA so povezani s funkcijo komparatorja in napetostne reference. Zato delovanje pinov na PORTA določimo z ustrezno izbiro bitov v registru CMCON (Comparator control register) in registrom VRCON (Voltage reference control register).

 

Kadar za PORTA izberemo funkcijo komparatorja, register TRISA ravno tako nadzoruje smer pinov na PORTA, zato moramo paziti, da pravilno določimo vhodno/izhodne pine. Pina RA3 in RA4 sta v tem primeru izhoda komparatorjev.

Tabela 5: Register CMCON

Delovanje kompararorjev:

Delovanje kompararorjev in njihovih vhodov določimo z nastavitvijo bitov CM0, CM1, CM2 in CIS v registru CMCON. Takoj po vklopu mikrokontrolerja so ti biti postavljeni v stanje 0. To pomeni, da so pini RA0 - RA3 določeni kot analogni pini (AN0 - AN3).

Kadar komparatorja ne uporabljamo in želimo pine na PORTA uporabljati kot digitalne, moramo postaviti bite CM0, CM1, CM2 v stanje 1 takoj na začetku programa.

Z vrednostjo bita CIS določimo priključitve komparatorjevih vhodov. Uporabljamo ga v analognem načinu delovanja, kadar želimo primerjati več analognih signalov. Z dvema komparatorjema lahko primerjamo z referenčno napetostjo (Vref) največ štiri različne analogne signale. Stanje bitov CM2, CM1, CM0 je takrat 010, bit CIS pa enkrat 0, drugič 1.

Vse možne kombinacije prikazuje slika 6.

Slika 6: Delovanje komparorjev v odvisnosti od nastavitve bitov CM0 - CM2 in bita CIS v registru CMCON