2. pic 16f628a

36
3. PIC mikrokontroleri PIC mikrokontroler (engl. Programmable Intelligent computer), originalni proizvod tvrtke Microchip, vrlo je popularan među inžinjerima i elektroničkim početnicima, a dolazi u puno različitih izvedbi, svaka sa posebnim komponentama i mogućnostima. Mnogi elektronički projekti mogu se vrlo lako izvesti pomoću mikrokontrolera iz PIC obitelji, poput digitalnih satova, vrlo jednostavnih video igrica, robota, servo kontrolera i mnogih drugih. Njihova primjena je vrlo široka, a njihove mogućnosti i varijante su nebrojene, a može ih se nabaviti po vrlo pristupačnim cijenama što ih čini još popularnijima. Upravo zbog svoje raznovrsnosti, ali ponajviše zbog prilično jednostavnog programiranja, PIC mikrokontroleri imaju dosta veliku primjenu u edukaciji, kako srednjoškolskoj tako i fakultetskoj, u digitalnoj logici, digitalnoj elektronici, automatici i drugim srodnim područjima. PIC skupina predstavlja do maximuma optimiziranu RISC (Reduced Instruction Set Computer) implementaciju. Kako je procesorska jezgra PIC-a jednostavna RISC jezgra koja podržava svega nekih tridesetak osnovnih naredbi, to je i proces učenja kao i privikavanja na ovu arhitekturu veoma jednostavan. PIC skupina mikrokontrolera je sa činjena od nekoliko podskupina koje zajedno imaju velik broj različitih modela. Tako za najosnovnije primjene stoji na raspolaganju skupina 12C sa svoja dva najosnovnija modela 12C508 i 12C509 koji vjerovali ili ne imaju 6 pinova od ukupno 8 za I/O. Za veće primjene tu je skupina 16C, dok za najzahtjevnije primjene stoji skupina 17C i 14000. Za većinu modela iz skupine 16C kao iza sve modele

Upload: m2onkey3

Post on 30-Nov-2015

170 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 2. PIC 16F628A

3. PIC mikrokontroleri

PIC mikrokontroler (engl. Programmable Intelligent computer), originalni proizvod tvrtke

Microchip, vrlo je popularan među inžinjerima i elektroničkim početnicima, a dolazi u puno

različitih izvedbi, svaka sa posebnim komponentama i mogućnostima. Mnogi elektronički

projekti mogu se vrlo lako izvesti pomoću mikrokontrolera iz PIC obitelji, poput digitalnih

satova, vrlo jednostavnih video igrica, robota, servo kontrolera i mnogih drugih. Njihova

primjena je vrlo široka, a njihove mogućnosti i varijante su nebrojene, a može ih se nabaviti

po vrlo pristupačnim cijenama što ih čini još popularnijima. Upravo zbog svoje raznovrsnosti,

ali ponajviše zbog prilično jednostavnog programiranja, PIC mikrokontroleri imaju dosta

veliku primjenu u edukaciji, kako srednjoškolskoj tako i fakultetskoj, u digitalnoj logici,

digitalnoj elektronici, automatici i drugim srodnim područjima. PIC skupina predstavlja do

maximuma optimiziranu RISC (Reduced Instruction Set Computer) implementaciju. Kako je

procesorska jezgra PIC-a jednostavna RISC jezgra koja podržava svega nekih tridesetak

osnovnih naredbi, to je i proces učenja kao i privikavanja na ovu arhitekturu veoma

jednostavan. PIC skupina mikrokontrolera je sa činjena od nekoliko podskupina koje zajedno

imaju velik broj različitih modela. Tako za najosnovnije primjene stoji na raspolaganju

skupina 12C sa svoja dva najosnovnija modela 12C508 i 12C509 koji vjerovali ili ne imaju 6

pinova od ukupno 8 za I/O. Za veće primjene tu je skupina 16C, dok za najzahtjevnije

primjene stoji skupina 17C i 14000. Za većinu modela iz skupine 16C kao iza sve modele

skupine 17C i 14000, ne može se reći da su mali jer na raspolaganju imaju svega od AD

konvertora pa čak do slave portova za komunikaciju sa drugim procesorima. Gotovo svi PIC-

evi se proizvode u dvije varijante EPROM i OTP. Kod EPROM varijante programska

memorija tj. prostor u koji je smješten program po kojem PIC radi je izmjenjivog sadržaja.

Proces reprogramiranja PIC-a je isti kao i kod klasičnog EPROM-a, UV zrakama se obriše

memorija nakon čega je spremna za punjenje novim programom. OTP varijanta PIC-a je vrsta

PROM-a, dakle kada se jednom programira nije više moguće izmijeniti program. Obavezno

se u razvoju sistema koristi EPROM varijanta, jer se sve korekcije nastale uslijed grešaka u

razvoju sistema mogu ispraviti u programskom kodu i ponovo upisati u jedan te isti PIC.

Nekada je programski kod potrebno mijenjati po desetak puta, dok se ne postigne željeni

cilj,ova preporuka je dakako onda iz financijskih razloga. Treća varijanta PIC-a je FLASH.

Pored programske memorije većina PIC mikrokotrolera ima ugrađenu i podatkovnu memoriju

EEPROM koja služi za memoriranje različitih varijabli i parametara u toku smog rada PIC-a.

Page 2: 2. PIC 16F628A

To mogu biti različite šifre, kodovi i slično koji ostaju zapamćeni i kada PIC nije pod

naponom.

RAM memorija je po svojoj veli čini različita kod različitih modela PIC-a. Dok se po ostalim

karakteristikama ne razlikuje kod svih PIC-eva. Postoje RAM memorijske lokacije posebno

karakterizirane kao SFR ili specijalni funkcijski registri. Inače jedan registar je veličine

jednog bajta. Pošto je RAM podijeljen na bite odnosno bajte koji su adresirani od 00h

(hexadecimalno) pa do neke vrijednosti u zavisnosti od konkretnog PIC-a. Tako svaki registar

ima svoju adresu preko koje se u njega može pisati i čitati iz registra. Upis i čitanje iz SFR u

RAM-u manifestira se konkretno na neki događaj za koji je taj registar namijenjen. Npr. Ako

želimo da na PORT-u B(pinovi od 6 do 13) recimo upalimo 8 led dioda, dovoljno je u RAM-u

na memorijskoj lokaciji koja odgovara PORT-u B konkretno na adresi 06h upisati 255

decimalno, ili '11111111' binarno, ili pak ff hexadecimalno što je ustvari isto, da se upale sve

diode. Na sličan način može se ustanoviti koji je od prekidača pritisnut ukoliko se radi o

prekidačima, samo što se sada pročita vrijednost SFR PORT-a B sa adrese 06h. Na identičan

način se može podesiti tajmer čitanjem i pisanjem u SFR RAM-a namijenjen za tajmer

(konkretno adresa je 01h) kao i drugi SFR-i. Dobra osobina je da su kod svih PIC-eva ovi

registri na istim adresama, s tim što moćniji PIC-evi imaju neke nove SFR-e, ali će program iz

ovog razloga napisan za slabiji PIC sasvim dobro raditi na moćnijem PIC-u ali ne vrijedi

obrnuto.

Page 3: 2. PIC 16F628A

4. Mikrokontroler PIC 16F628A

4.1. Osnovne karakteristike mikrokontrolera PIC 16F628A

4.1.1. Kratak opis mikrokontrolera

PIC 16F628A je 8-bit-ni mikrokontroler, niske cijene, velikih performansi, izveden CMOS

tehnologijom. Izveden je u RISC (Reduced Instruction Set Computer) arhitekturi. To znači da

koristi dvije sabirnice, podatkovnu (8-bit-na) i instrukcijsku (14-bit-na). PIC 16F628A ima

osam nivoa dubok stog i više prekidnih izvora, što unutarnjih, što vanjskih. Istovremeno

izvođenje i prihvaćanje slijedeće instrukcije omogućuje da se svaka instrukcija izvrši u

jednom instrukcijskom ciklusu, osim instrukcija skoka i poziva potprograma (za koje su

potrebna dva instrukcijska ciklusa). Ukupno 35 instrukcija koje ga čine i više nego

prihvatljivim. Također obično koriste 2:1 sažimanje koda i 4:1 veću brzinu rada (na 20 Mhz)

od drugih 8-bit-nih mikrokontrolera iste klase. SLEEP način rada omogućuje štednju energije.

Iz takvog načina rada mikrokontroler se može vratiti u aktivno stanje putem prekida, vanjskih

ili unutarnjih , i/ili resetom. Te ima Watchdog tajmer sa vlastitim RC oscilatorom koji štiti od

softverskog „zamrzavanja“ ili slučajne beskonačne petlje. Incircuit reprogramilnost

omogućuje optimiziranje programskog koda unutar sklopa, bez odvajanja mikrokontrolera od

gotovog sklopa. To je vrlo korisno u razvoju sklopova gdje mikrokontroler nije fizički

dostupan, a prototip zahtjeva optimizaciju.

4.1.2. Karakteristike mikrokontrolera

Visokih performansi RISC CPU

35 instrukcija veličine jedne riječi

Radna frekvencija fref = DC-20 MHz

Trajanje taktnog intervala tcpu = 200 ns, kada je fref = 20 MHz

Op-kod veličine 14 bita

hardverski stog sa 8 nivoa

Tri načina adresiranja: - direktno

- indirektno

Page 4: 2. PIC 16F628A

- relativno

Programska memorija kapaciteta 2048x14 bit-nih riječi realizirane u FLASH

tehnologiji

Memorije za podatke tipa RAM kapaciteta 224x8 bita

Memorije za podatke EEPROM tipa kapaciteta 128x8 bita

10 izvora prekida

U/I portovi: A,B

Tri tajmera: - Timer0: 8-bitni tajmer/brojač događaja

- Timer1: 16-bit tajmer/brojač događaja

- Timer2: 8-bit tajmer/brojač događaja

10 to bitni 8-kanalni Analogno-Digitalni (A/D) konvertor

Serijska komunikacija: USART

Power-on Reset- reset pri uključenju napajanja(POR)

Power-up timer-unošenje kašnjenja nakon uključenja napajanja (PWRT)

Oscillator Start-up Timer unošenje kašnjenja nakon stabiliziranja radne frekvencije

oscilatora(OST)

Sleep način rada za štednju energije

Watchdog timer sa jedinstvenim integriranim RC oscilatorom za nezavisni rad

Izbor tipa oscilatora

Mala potrošnja,velika brzina rada

Radni napon od 3V do 5.5V

Mala potrošnja energije:

1. <0.6 mA pri naponu od 3V i radnoj frekvenciji od 4 MHz

2. 20µA pri naponu od 3V i radnom taktu od 32kHz

Page 5: 2. PIC 16F628A

3. < 1µA u standby načinu rada

Pakovanje: - 18 pinsko DIP, SOIC,

- 20 pinsko SSOIP,

- 28 pinsko QFN

16 ulazni/izlaznih pojedinačno upravljanih nožica

velika struja U/I sklopova za napajanje LED dioda

Serijsko In-Circuit programiranje, preko dvije nožice

Power-on Reset (reset pri uključenju)

Power-up Timer (određeno kašnjenje nakon uključenja)

Oscilatorski Start-up Timer (određeno kašnjenje od stabilizacije radne frekfencije)

Watchdog Timer sa vlastitim integriranim RC oscilatorom za neovisan rad

zaštita koda

sleep način rada (za uštedu energije)

Slika 4.1.1. Blok shema mikrokontrolera PIC 16F628A

Page 6: 2. PIC 16F628A

4.2. Raspored nožica

Slika 4.2.1. Raspored nožica mikrokontrolera PIC16F62A

1. RA2/AN2/Vref – druga nožica porta A

2. RA3/AN3/CMP1 – treća nožica porta A

3. RA4/TOCKI/CMP2 – četvrta nožica porta A, može biti i ulaz takta za timer/brojač

4. RA5/MCLR/Vpp – peta nožica porta A, MCLR reset ulaz i Vpp napon napajanja

5. Vss – napajanje („masa“)

6. RB0/INT – nulti pin porta B i interrupt ulaz

7. RB1/RX/DT – prva nožica porta B

8. RB2/TX/CX – druga nožica porta B

9. RB3/CCP1 – treća nožica porta B

10. RB4/PGM – četvrta nožica porta B

11. RB5 – peta nožica porta B

12. RB6/T1OSO/T1CKI/PGC – šesta nožica porta B i ulaz takta u programskom modu

13. RB7/T1OSI/PGD – sedma nožica porta B i linija za ulaz podataka u programskom

modu

Page 7: 2. PIC 16F628A

14. Vdd – pozitivno napajanje

15. RA6/OSC2/CLKOUT – šesta nožica porta A te nožica koja služi za spajanje vanjskog

kristalnog oscilatora a ako imamo na OSC1 spojen RC oscilator tada služi kao djelitelj

frekvencije OSC1 sa 4

16. RA7/OSC1/CLKIN – sedma nožica porta A i nožica koja služi za spajanje vanjskog

oscilatora

17. RA0/AN0 – nulta nožica porta A, analogni komparatorski ulaz

18. RA1/AN1 – prva nožica porta A, analogni komparatorski ulaz

4.3. Takt/instrukcijski ciklus

Takt doveden s nožice OSC1 u mikrokontroleru se dijeli na četiri nepreklapajuća takta koje

nazivamo Q1, Q2, Q3 i Q4 koji skupa čine jedan instrukcijski ciklus npr. TCY1.

Instrukcijske cikluse dijelimo:

Q1 – pozivanje instrukcije iz programske memorije

Q2 – dekodiranje naredbe iz prethodnog instrukcijskog ciklusa

Q3 – izvođenje naredbe iz prethodnog instrukcijskog ciklusa

Q4 – spremanje instrukcije pozvane u Q1 u instrukcijski registar

Uzmimo za primjer instrukcijski ciklus TCY2. Na Q1 takt u instrukcijskom ciklusu TCY2

programski brojač (PC) se uvećava za 1 te poziva instrukciju iz programske memorije. U

sljedeća dva takta Q2 i Q3 instrukcijskog ciklusa TCY2 instrukcija koja je bila pozvana i

spremljena u instrukcijski registar u prijašnjem TCY1 instrukcijskom ciklusu se dekodira i

izvodi. U četvrtom taktu Q4 instrukcijskog ciklusa TCY2 se instrukcija pozvana na Q1

sprema u instrukcijski registar.

Page 8: 2. PIC 16F628A

4.4. Obrada instrukcija

Ciklusi povezivanja i izvršavanja instrukcija su tako povezani da je za pozivanje potreban

jedan instrukcijski ciklus a za dešifriranje i izvršavanje još jedan. No zbog protočne obrade,

svaka instrukcija se efektivno izvršava u jednom ciklusu.

4.5. Organizacija memorije

Strukturu memorije ovog mikrokontrolera čine tri odvojena bloka:

Programska memorija

Memorija podataka RAM

EEPROM memorija podataka

Odvojeno od nabrojanih memorijskih blokova PIC 16F628A ima 13-bitni hardverski stog

dubok 8 nivoa. Memorijski prostor stog-a nije dio ni programske ni podatkovne memorije, a

pokazivač stoga nije moguće čitati i u njega upisivati vrijednosti. Njegova osnovna zadaća je

da sačuva vrijednost PC-a nakon što se iz glavnog programa skoči na adresu potprograma. Da

bi se program znao vratiti odakle je počeo mora sa stoga vratiti vrijednost PC-a. Sadržaj sa

Page 9: 2. PIC 16F628A

stoga vraća se u programsko brojilo kod izvršavanja instrukcija RETURN, RETLW ili

RETFIE, koje se izvršavaju na kraju potprograma

4.5.1. Organizacija programske memorije

PIC 16F628A ima 13-bit-ni programski brojač (PC) koji je u mogućnosti da adresira

memorijski prostor veličine 8K x 14. Reset vektor je na adresi 0000h i od njega počinje

izvršavanje programa. Interapt vektor je na adresi 0000h. Mapa programske memorije i Stog

su prikazani na slici

Page 10: 2. PIC 16F628A

4.5.2. Organizacija memorije podataka

Memorija za podatke je podijeljena u više cjelina banki (banks), a sastoji se od registara opće

namjene (General Purpose Registers) i registara specijalne funkcije (Special Function

Registers). U jednom od specijalnih registara, tzv. STATUS registru postoje dva bita RP1 i

RP0 koji služe za odabir željene banke podataka po principu prikazanom na slici.

Svaka banka sadrži do 128 registara (0x7F). Niže lokacije u banci zauzimaju specijalni

registri, a ostatak prostora popunjavaju registri opće namjene implementirani kao statički

RAM. Neki specijalni registri koji se često koriste mapirani su u sve banke da bi se omogućio

brz pristup i redukcija koda. Nekoliko specijalnih registara su usko povezani sa

funkcioniranjem samog mikrokontrolera. Ostali registri su vezani za periferne module i služe

njihovom upravljanju i kontroli statusa. Mapa registara mikrokontrolera PIC 16F628A

prikazana je na slici.

Page 11: 2. PIC 16F628A
Page 12: 2. PIC 16F628A

4.5.3. Status registar

U status registru se upisuju aritmetički status ALU (C, DC, Z), reset status (TO, PD) i bit-ovi

za odabir memorijske banke (IRP, RP1, RP0). Ovaj registar može biti odredište za bilo koju

instrukciju s bilo kojim drugim registrom. Ako je status registar odredište instrukcije koja

utječe na Z, DC ili C bit tada je upis u ova tri bit-a je onemogućen.

bit 7 IRP (Register Bank Select) – osmi bit za indirektno adresiranje RAM-a

1 = banka 2 i 3 (100h-1FFh)

0 = banka 0 i 1 (00h-FFh)

bit 6-5 RP1 RP0 (Register Bank Select) – bit-ovi za izbor memorijske banke, direktno

adresiranje

00 = banka 0 (00h-7Fh)

01 = banka 1 (80h-FFh)

10 = banka 2 (100h-17Fh)

11 = banka 3 (180h-1FFh)

bit 4 ¿ (Time out) – bit je setiran nakon uključenja napajanja i izvršenja CLRWDT i

SLEEP instrukcije, a resetira kad dođe do prekoračenja sigurnosnog brojača

1 = nije došlo do prekoračenja sigurnosnog brojača

0 = došlo je do prekoračenja sigurnosnog brojača

Page 13: 2. PIC 16F628A

bit 3 PD (Power down) – bit je setiran nakon uključenja napajanja i svakog

regularnog reseta

1 = nakon uključenja napajanja ili izvršenja CLRWDT instrukcije

0 = izvršenjem SLEEP funkcije

bit 2 Z (Zero) – bit je setiran kad je rezultat aritmetičko logičke operacije nula

1 = rezultat je nula

0 = rezultat nije nula

bit 1 DC (Digit Carry) – isto kao i Carry bit samo ovaj bit predstavlja prijenos sa

četvrtog mjesta

1 = pojavio se prijenos na četvrtom mjestu

0 = nema prijenosa

bit 0 C (Carry) – bit na koji utječu operacije zbrajanja i oduzimanja, bit je setiran

kad se oduzima manja vrijednost od veće

1 = pojavio se prijenos najvišeg bit-a rezultata

0 = nema prijenosa najvišeg bit-a rezultata

4.5.4. OPTION registar

OPTION registar je registar u kojeg se može zapisivat i iz kojeg se može čitat. Sadrži različite

kontrolne bit-ove za konfiguriranje preskalera za Timer0 ili WDT (Wachdog Timer), za

odabir ivice okidanja vanjskog prekida i za omogućavanje Pull-up otpornika na PORTB

Page 14: 2. PIC 16F628A

4.5.4. Direktno i indirektno adresiranje

Direktno adresiranje

Vrši se preko 8 bit-ne adrese koja se dobije povezivanjem šestog bit-a direktne adrese iz

instrukcije i dva bit-a iz STATUS registra (RP1, RP0).

Indirektno adresiranje

Ovaj način adresiranja ne uzima adresu iz instrukcije, već je radi pomoću IRP bit-a STATUS

registra i FSR registra. Adresiranoj lokaciji se pristupa preko INDF registra koji zapravo nije

fizički registar već se njegova adresa nalazi u FSR registru, FSR je pokazivač. Npr. ako

memorijska lokacija 05h sadrži vrijednost 10h i ako memorijska lokacija 06h sadrži vrijednost

0Ah, upišemo li vrijednost 05h u FSR registar, INDF registar vratit će vrijednost 10h.

Inkrementiranjem FSR registra, INDF registar vratit će vrijednost 0Ah.

4.5.5. Relativno adresiranje

Adresa operanda u postupku relativnog adresiranja ovisi o smještaju same naredbe unutar

memorije. Oblik naredbe koja koristi relativno adresiranje prikazano je na slici.

Adresa operanda izračuna se tako, da se adresi, na kojoj se nalazi kod postupka, pribroji

pomak. Naziv relativno adresiranje potječe upravo od činjenice, da je adresa operanda

Page 15: 2. PIC 16F628A

određena relativno prema položaju, odnosno smještaju same naredbe. Relativni pomak računa

se kao dvojni komplement, a to znači da on može biti pozitivan i negativan. Budući da na

raspolaganju stoji 8 bitova, to je moguće adresirati bilo koju memorijsku lokaciju, udaljenu

+127 ili -128 memorijskih lokacija od lokacija same naredbe.

Naredbe koje koriste relativno adresiranje su dužine dviju riječi, što ih čini prikladnim za

upotrebu. Mana relativnog adresiranja je u relativno kratkom dometu adrese (+127, -128

memorijskih lokacija), te u potrebi za izračunavanjem relativnog pomaka prilikom pisanja

programa. Formula po kojoj se izračunava stvarna adresa glasi:

Stvarna adresa (operanda ili skoka) = adresa naredbe+relativni pomak.

4.6. Ulazno/izlazni portovi

PIC 16F628A ima dva porta, PORTA i PORTB. Portom nazivamo grupu ulazno/izlaznih

nožica (pinova) kojima možemo pristupati istovremeno. Fizički, port je registar koji je

povezan s pinovima mikrokontrolera. Svi pinovi portova se mogu definirati kao ulazni ili

izlazni, prema potrebama sustava. Definiraju se upisivanjem logičke nule i jedinice u TRIS

registru, upisivanjem „1“ pin postaje ulazni a upisivanjem „0“ postaje izlazni. Pošto imamo

dva porta imamo i dva TRIS registra, TRISA i TRISB. PORTA i PORTB se nalaze u banci 0

a TRISA i TRISB u banci 1.

4.6.1. PORTA i TRISA

PORTA je 8-bit-ni port i sadrži pinove od RA0 do RA7. RA4 je ulaz u Schmitt-ov okidač i

izlaz. Pin RA4 može se iskoristiti za ulaznu frekvenciju TIMER0, RA5 je samo ulazni pin i ne

može biti izlazni. Svi ostali pinovi imaju dvojaku funkciju kao ulazno/izlazni pinovi te imaju

mogućnost analogno-digitalne konverzije.

Page 16: 2. PIC 16F628A

Primjer konfiguiranja porta

bsf STATUS, RP0 ; Prebacivanje programa u BANK1

movlw b'11111100' ; definiranje ulaznih i izlaznih pinova

movwf TRISA ; kopiranje u TRISA registar

bcf STATUS, RP0 ; Vraćanje iz BANK1 u BANK0

U primjeru su pinovi RA0 i RA1 proglašeni kao izlazni, a pinovi od RA2 do RA7 kao ulazni

4.6.2. PORTB i TRISB

PORTB je 8-bit-ni bidirekcionalni port i sadrži pinove od RB0 do RB7. Svi pinovi imaju

odgovarajuće bitove u TRISB registru kojim se pinovi konfiguriraju kao izlazni ili kao ulazni.

Logička „1“ u nekom bitu u TRISB registru stavlja odgovarajući pin u stanje visoke

impedancije i on radi kao ulazni pin. Logička „0“ u TRISB registru prosljeđuje sadržaj bita iz

izlaznog (latch) registra na pin i on radi kao izlazni. Četiri pina ovog porta mogu izazvat

prekid RB<4:7> i to samo ako su konfigurirani kao ulazni.

Primjer konfiguriranja porta:

bsf STATUS, RP0 ; Prebacivanje programa u BANK1

movlw 0x0F ; Definiranje ulaznih i izlaznih pinova

movwf TRISB ; Kopiranje u TRISB registar

Page 17: 2. PIC 16F628A

bcf STATUS, RP0 ; Vraćanje iz BANK1 u BANK0

bsf PORTB, 4

bsf PORTB, 5

bsf PORTB, 6

bsf PORTB, 7

Primjer pokazuje kako su pinovi RB0, RB1, RB2 i RB3 proglašeni za ulazne, a pinovi RB4,

RB5, RB6 i RB7 za izlazne, te nakon čega su izlazni pinovi postavljeni u jedinicu.

4.8. Tajmerski modul

Koristi se za mjerenje vremena i za brojanje vanjskih događaja. PIC 16F628A posjeduje tri

tajmerska modula (TIMER 0, 1, 2) i svaki od tajmera ima svoje specifične karakteristike.

4.8.1. Timer0 modul

Je jednostavni 8 bit-ni brojač koji generira prekid (interrupt) pri prijelazu sa FFh (255) na 00h

(0), broj bita određuje do koliko će se brojač uvećavati (28 = 256). Posjeduju ga svi niži

PICmicroTM procesori i ovdje je zadržana kompatibilnost s njima. Izvor takta za Timer0 može

biti unutrašnji sistemski takt ili vanjski koji se uzima sa nožice RA4/TOCKI/CMP2. Izvor

takta se bira pomoću bit-a TOCS u OPTION registru. Izaberemo li vanjski takt tada je

moguće birati i ivicu signala (rastuća ili padajuća) na koju će brojač uvećavati svoju

vrijednost. Nakon svakog prelaska brojača sa FFh na 00h setira se TOIF bit u INTCON

registru.

Page 18: 2. PIC 16F628A

U kombinaciji sa modulom Timer0 može se koristiti programibilni preskaler. Preskaler je

naziv za dio mikrokontrolera kojim se dijeli instrukcijski ciklus prije nego dođe do logike

koja uvećava stanje brojača. Broj kojim se dijeli instrukcijski se definira pomoću prva tri bit-a

u OPTION registru, odnosi dijeljenja su 1:2, 1:4,…, 1:256, čime se omogućuje mjerenje

duljih vremenskih perioda. Preskaler se može pridružiti Timer0 brojaču ili sigurnosnom

brojaču (Wachdog timer), a dodjela se radi pomoću bit-a PSA u OPTION registru. Kada je

preskaler dodijeljen Timer0 brojaču, sve instrukcije upisa u Timer0 registar (CLRF,

MOVWF, BSF,…) će obrisati preskaler. Ako je preskaler dodijeljen sigurnosnom brojaču

samo instrukcija CLRWDT će obrisati preskaler u isto vrijeme kada i sigurnosni brojač.

Promjena preskalera je kompletno pod kontrolom programera i može se mijenjati u toku rada

programa.

Sigurnosni brojač (Wachdog timer) čuva mikrokontroler od „smrzavanja“. Ako dođe do

nepravilnog rada mikrokontrolera, sigurnosni brojač ga nakon nekog vremena resetira, a

program se počinje izvršavati iz početka. Da bi se spriječilo resetiranje za vrijeme normalnog

toka programa moramo upisati nulu u WDT registar (instrukcijom CLRWDT) svaki put kad

se približi svom prekoračenju.

4.9. Komparatorski modul

PIC 16F628A posjeduje dva analogna komparatora. Ulazi u komparatore su multipleksirani sa

RA0 pinom kroz RA3 pin. CMCON (Comparator Configuration register) registar kontrolira

ulaze i izlaze u komparator. Blok dijagram komparatora je prikazan na slici.

Page 19: 2. PIC 16F628A

PIC 16F628A posjeduje osam modova za operacije sa komparatorima, tu je bitan CMCON

registar jer on odabire potreban mod. Na slici je prikazano osam mogućih modova za

komparator, TRISA registar kontrolira prijenos podataka za svaki mogući mod.

RA3 pin i RA4 pin su konfigurirani kao digitalni izlazi, pinovi RA0 i RA1 su konfigurirani

kao invertirani ulazi V-, a pin RA2 je konfiguriran kao neinvertirani ulaz V+ u oba

komparatora.

Page 20: 2. PIC 16F628A

4.10. Podatkovna EEPROM memorija

PIC 16F628A ima 128 bayt-a EEPROM memorijskih lokacija na adresama od 00h do 7Fh.

Najvažnija osobina ove memorije je da ne gubi sadržaj prilikom nestanka napona napajanja.

Stoga ova memorija služi za čuvanje parametara nekog procesa ili nekih važnih promjenjivih

podataka.

EEPROM memoriji se pristupa preko četiri SFR registar a to su:

EECON1 – sadrži kontrolne bit-ove

EECON2 (nije fizički implementiran registar) – služi da zaštiti EEPROM od slučajnog upisa

EEDATA – sadrži podatak koji je pročitan ili ga treba upisati

EEADR – sadrži adresu EEPROM lokacije kojoj se pristupa

Iz EEPROM memorije čitamo podatak tako da setiramo RD bit koji inicira prijenos podataka

s adrese koja se nalazi u registru EEADR u EEDATA registar. Za čitanje podataka nije

potrebno neko vrijeme kao za upis pa se taj podatak može koristiti već u sljedećoj instrukciji.

Primjer dijela programa koji vrši čitanje podataka iz EEPROM-a

BSF STATUS, RP0 ; Banka 1 jer je EECON1 na adresi 9Ch

MOVLW ADRESS ; Adresa lokacije koja se čita

MOVWF EEADR ; Adresa se prebacuje u EEADR

BSF EECON1, RD ; Čitanje iz EEPROM-a

MOVF EEDATA, W ; W ← EEDATA

BCF STATUS, RP0 ; Vraćanje u Banku 0

Da bi upisali podatak u EEPROM memoriju treba prvo upisati adresu željene memorijske

lokacije u EEADR registar a podatak u EEDATA registar. Nakon upisa, WR bit će biti

resetiran, a EEIF setiran, što se može iskoristiti za obradu prekida. Vrijednost 55h i AAh su

Page 21: 2. PIC 16F628A

prvi i drugi ključ koji onemogućuje da dođe do slučajnog upisa u EEPROM. Te dvije

vrijednosti se upisuju u EECON2, koji služi samo za prihvaćanje ove dvije vrijednosti i time

spriječi slučajan upis.

Primjer dijela programa koji vrši upis podataka u EEPROM memoriju

BSF STATUS, RP0 ; Banka 1, jer je EEADR na 9Bh

BSF EECON1, WREN ; omogućavanje upisa

BCF INTCON, GIE ; svi prekidi se onemogućavaju

BTFSC INTCON, GIE

GOTO $-2

1. MOVLW 55h

2. MOVWF EECON2 ; Upis prve adrese 55h u EECON2

3. MOVLW AAh

4. MOVWF EECON2 ; Upis druge adrese AAh u EECON2

5. BSF EECON1, WR ; Inicira se upis 1

BSF INTCON, GIE ; Prekidi se omogućavaju

Programske linije u primjeru označene s 1, 2, 3, 4 i 5 moraju biti izvršene redoslijedom kojim

su napisane i u pravilnim vremenskim razmacima, tako da je vrlo važno onemogućiti prekide

za vrijeme izvršavanja tih instrukcija, nakon upisa prekidi se mogu omogućiti.

4.11. Generator takta

PIC 16F628A može raditi sa šest različitih konfiguracija oscilatora. A to su:

LP Low Power Crystal

XT Crystal/Resonator

HS High Speed Crystal/Resonator

RC External Resistor/Capacitor (2 modes)

Page 22: 2. PIC 16F628A

INTOSC Internal Precision Oscillator (2 modes)

EC External Clock In

Mikrokontroler može da radi i na 32 kHz i tada ima jako malu potrošnju energije.

Najjednostavnija varijanta je RC oscilator (slika). Ova varijanta oscilatora može se koristiti u

aplikacijama gdje se ne zahtjeva precizna procjena vremenskih intervala.

Frekvencija osciliranja ovisi o naponu napajanja, vrijednosti REXT i CEXT, kao i o radnoj

temperaturi. REXT treba biti u granicama od 3kΩ do 100kΩ za napon napajanja veći od 3V, a

od 10kΩ do 100kΩ za napon napajanja manji od 3V. CEXT se može i izostaviti, ali zbog

stabilnosti se preporučuje 20pF. Na RA6/OSC2/CLKOUT generira se taktni impuls čija je

perioda četiri puta veća od periode oscilatora.

Kod vremenski zahtjevnih uređaja treba ugrađivati kvarcni oscilator ili keramički rezonator.

Vrijednosti C1 i C2 (slika), trebaju biti jednake.

Preporuka proizvođača za vrijednosti C1 i C2 kod nekih konfiguracija je:

Odabir kondenzatora za keramički oscilator

Mod Frekvencija OSC1 (C1) OSC2 (C2)

XT455 kHz2.0 MHz4.0 MHz

22-100 pF15-68 pF15-68 pF

22-100 pF15-68 pF15-68 pF

HS 8.0 MHz 10-68 pF 10-68 pF

Page 23: 2. PIC 16F628A

16.0 MHz 10-22 pF 10-22 pF

Odabir kondenzatora za kristalni oscilator

Mod Frekvencija OSC1 (C1) OSC2 (C2)

LP32 kHz220 kHz

15-30 pF0-15 pF

15-30 pF0-15 pF

XT100 kHz2 Mhz4 Mhz

68-150 pF15-30 pF15-30 pF

15-200 pF15-30 pF15-30 pF

HS8 MHz10 Mhz20 Mhz

15-30 pF15-30 pF15-30 pF

15-30 pF15-30 pF15-30 pF

4.12. Reset

Reset služi da bi sve registre mikrokontrolera doveli u početni položaj. Znači ako se

mikrokontroler „smrzne“ ili smo ga tek uključili treba ga resetirati. Da bi spriječili slučajno

dovođenje logičke „0“ na MCLR nožic, potrebno ju je preko otpornika spojiti na pozitivan pol

napajanja Vdd, slika.

PIC 16F628A ima više vrsta resetiranja:

1. Resetiranje pri dovođenju napajanja Power-on reset (POR)

2. Dovođenje logičke „0“ naMCLR

Page 24: 2. PIC 16F628A

3. MCLR reset za vrijeme „Sleep“ načina rada

4. Reset pri prekoračenju Watchdog tajmera

5. WDT reset za vrijeme „Sleep“ načina rada

6. Reset kod pada napona napajanja Brown-Out reset (BOR)

4.13. Prekidi (Interrupts)

Prekid je mehanizam mikrokontrolera koji omogućava da se na neke događaje odgovori u

trenutku kada se oni dogode, bez obzira što mikrokontroler radi u tom trenutku. Svaki prekid

mijenja tok izvršavanja programa, prekida ga, te nakon izvršenja prekidnog potprograma

nastavlja na istom mjestu kao što je prikazano na slici. Kontrolni registar prekida naziva se

INTCON i nalazi se na adresi 0Bh. Njegova uloga je da omogući ili zabrani prekide, a u

slučaju da su zabranjeni, registrira pojedinačne zahtjeve prekida preko svojih bitova.

PIC 16F628A ima 10 izvora prekida, neki su interni, a drugi su eksterni:

External Interrupt RB0/INT

TMR0 Overflow Interrupt

PORTB Change Interrupts (pins RB<7:4>)

Comparator Interrupt

Page 25: 2. PIC 16F628A

USART Interrupt TX

USART Interrupt RX

CCP Interrupt

TMR1 Overflow Interrupt

TMR2 Match Interrupt

Data EEPROM Interrupt

Na slici je prikazana shema logike za prihvaćanje zahtjeva za prekidom

Pomoću GIE (General Interrupt Enable) bita omogućujemo bilo koji od deset mogućih

prekida

Page 26: 2. PIC 16F628A

5. Set instrukcja

5.1. Aritmetika i logika

Od svih aritmetičkih operacija PIC kao i većina mikrokontrolera podržava samo zbrajanje i

oduzimanje. Zastavice (flags) C, DC i Z postavljaju se u ovisnosti rezultata te dvije operacije,

ali sa izuzetkom jer se oduzimanje vrši kao zbrajanje s negativnom vrijednošću, zastavica C je

poslije oduzimanja inverzna, znači setirana je ako je operacija moguća, a resetirana ako je

veći broj oduzet od manjeg. Logička jedinica PIC-a ima mogućnost izvođenja operacija I, ILI,

EX-ILI, negacije (COMF) i rotiranja bitova (RLF i RRF) Instrukcije koje rotiraju lijevo ili

desno pomiču bitove kroz zastavicu C za jedno mjesto. Bit koji izlazi iz registra upisuje se u

C zastavicu, te se upisuje u bit na suprotnoj strani registra.

5.2. Set instrukcija mikrokontrolera PIC 16F628A

Tablica 5.2.1. Popis instrukcija za mikrokontroler PIC 16F628A

Instrukcija OpisTrajanje

u strojnim ciklusima

Utječe na STATUS bit-ove

Operacije nad byte-imaADDWF f, d

Zbrajanje akumulatora i registra f1

C, DC, Z

ANDWF f, d

Logički I akumulatora i registra f 1Z

CLRF f Brisanje registra f 1 ZCLRW ---

Brisanje akumulatora 1Z

COMF f, d Komplement registra f 1 ZDECF f, d Smanjenje registra f za 1 1 Z

DECFSZ f,dSmanjenje registra f za 1, preskače sljedeću instrukciju ako je rezultat 0

1(2)

nijedan

INCF f, d Povećanje registra f za 1 1 Z

INCFSZ f, dPovećanje registra f za 1, preskače sljedeću instrukciju ako je rezultat 0

1(2)

nijedan

IORWF f, d Inkluzivni ILI akumulatora i f registra 1 ZMOVF f, d Premještanje sadržaja registra f 1 Z

MOVWF fPremještanje sadržaja akumulatora u registar f

1nijedan

Page 27: 2. PIC 16F628A

NOP - Nul-operacija 1 nijedan

RLF f, d Rotiranje registar f u lijevo kroz Carry bit1

C

RRF f, d Rotiranje registra f u desno kroz Carry bit 1 CSUBWF f, d Oduzimanje akumulatora od registra f 1 C, DC, ZSWAPF f, d Zamjena riječi registra f 1 nijedanXORWF f, d Ekskluzivno ILI akumulatora i registar f 1 Z

Operacije nad bit-ovimaBCF f, b Brisanje bit-a b registra f 1 nijedanBSF f, b Postavljanje bit-a b registar f 1 nijedanBTFSC f, b Preskače sljedeću instrukciju ako je rezultat 0 1(2) nijedanBTFSS f, b Preskače sljedeću instrukciju ako je rezultat 1 1(2) nijedan

Instrukcije nad konstantama i kontrolne instrukcijeADDLW k Zbrajanje akumulatora i konstante k 1 C, DC, ZANDLW k Logičko I akumulatora i konstante k 1 ZCALL k Poziv potprograma 2 nijedanCLRWDT - Brisanje sigurnosnog brojača 1 ¿, PDGOTO k Grananje programa 2 nijedanIORLW k Inkluzivno ILI akumulatora i konstante k 1 ZMOVLW k Upisivanje konstante k u akumulator 1 nijedanRETFIE - Povratak iz prekidne rutine 2 nijedan

RETLW kPovratak iz potprograma s vrijednošću k u akumulatoru

2nijedan

RETURN - Povratak iz potprograma 2 nijedanSLEEP - Postavljanje mikrokontrolera u stand by mod 1 ¿, PDSUBLW k Oduzimanje akumulatora od konstante k 1 C, DC, ZXORLW k Ekskluzivno ILI akumulatora i konstante k 1 Z