Professional Documents
Culture Documents
MIKRORAČUNARI
za treći razred zanimanja Tehničar računarstva,Tehničar
informacionih tehnologija i Tehničar elektronike
-interna skripta-
Pripremio:
B.Sc. Edin Burzić, ing.el.
Mikroprocesor (MPU – engl. Microprocessor Unit) – je čip koji po funkciji odgovara centralnoj
procesorskoj jedinici (CPU – engl. Central Processing Unit).
Pod mikroprocesorom se podrazumijeva složeni elektronički sklop proizveden u tehnologiji veoma velikog stepena
integracije (VLSI – Very Large Scale Integration).
Sastoji se od aritmetičko-logičke i upravljačke jedinice te najosnovnije memorije (radni registri).
Konstruisan je tako da preko vanjske (eksterne) sabirnice komunicira sa memorijom i međusklopovima koji obično
nisu sastavni dio mikroprocesorskog čipa.
Mikroračunar – predstavlja mikroprocesor povezan sa memorijom (RAM, ROM), U/I međusklopovima i ostalim
perifernim (vanjskim) jedinicama.
Na slici 1.1 prikazan je mikroračunarski sistem sa svim navedenim komponentama kao podsistemima
3
Slika. 1.1 Mikroprocesor, mikroračunar i mikroračunarski sistem
4
2. Osnovni tipovi organizacije mikroračunara
Vanjske sabirnice (bus-ovi) služe za povezivanje i komunikaciju između pojedinih elementa mikroračunara
(mikroprocesor, RAM, ROM...).
Sabirnica u osnovi predstavlja skup vodova koji fizički povezuju elemente mikroračunara i na njih se može spojiti veći ili
manji broj elemenata mikroračunarskog sistema.
Komunikacija preko sabirnice je dvosmjerna što znači da pojedini elementi mikroračunara mogu biti i izvor i „konzument“
podataka.
Da bi se ovakav vid komunikacije mogao nesmetano odvijati, postoje tri odvojene sabirnice od kojih svaka ima određenu
ulogu. Pa tako imamo :
- sabirnicu za podatke
- adresnu sabirnicu i
- upravljačku sabirnicu
Na adresnoj sabirnici u svakom trenutku nalazi se broj koji predstavlja adresu elementa koji u tom trenutku učestvuje u
komunikaciji, a podaci se nalaze na sabirnici za podatke.
Za sinhronizaciju svih podataka unutar mikroračunara brine se upravljačka sabirnica.
U zavisnosti od situacije, ove tri sabirnice se na slikama prikazuju zajedno ili odvojeno.
Postoje dva osnovna sistema sabirnica:
- Vanjske ili eksterne sabirnice – povezuju sve ostale dijelove mikroračunarskog sistema koji ne
pripadaju mikroprocesoru
- Unutrašnje ili interne sabirnice – služe za prijenos podataka između različitih elemenata mikroprocesora
Unutrašnje i vanjske sabirnice su povezane jer se na taj način odvija usklađen rad mikroprocesora sa ostalim dijelovima
mikroračunarskog sistema.
Unutar mikroprocesora se može nalaziti više sabirnica (za podatke, adrese i upravljanje).
5
2.2 Organizacija mikroprocesora oko jedne sabirnice
akumulator
Statusni registar
registar
registar
registar
...
Rn
R1
R0
Aritmetičko
-logička
jedinica
6
Sa sabirnicom je povezan određeni broj različitih registara kao što su :
akumulator – je registar u kojem se obično dobivaju (akumuliraju) rezultati različitih operacija s binarnim
brojevima. Podaci na akumulator dolaze sa sabirnice za podatke, a iz akumulatora se prenose na bufer
registre.
bufer-registri – privremeno pamte podatke i to jedan (na slici lijevo) podatke iz akumulatora, a drugi (desni)
podatke koji dolaze izravno sa sabirnice. Privremeno pamćenje je potrebno zbog istovremenog dovođenja
podataka na aritmetičko-logičku jedinicu koja ih upotrebljava za vršenje neke od operacija.
aritmetičko logička jedinica (u nastavku će se upotrebljavati skraćenica ALU) – obavlja aritmetičke i
logičke operacije s binarnim brojevima te njihovo rotiranje. To mogu biti operacije sabiranja, logičke
operacije I i ILI te neke složenije operacije poput množenja ili dijeljenja.. Pomoću ovih osnovnih operacija
rješavaju se svi problemi koji se postavljaju pred mikroračunar.
registri opšte namjene (R0 Rn – postoje u većini mikroprocesora. Može ih biti od minimalno jedan do dva,
pa sve do nekoliko desetina. U ove registre se privremeno upisuju različiti podaci zbog čega su i dobili taj
naziv. Takođe se nazivaju i priručni registri jer im se pristupa direktno putem interne sabirnice procesora, a
samim tim je i brzina pristupa mnogo brža u odnosnu na RAM memoriju. Njihovom upotrebom se ubrzava
rad procesora. Podaci na sabirnicu dolaze ili iz registara opšte namjene ili iz ALU (slika 2.1). Podaci sa
sabirnice idu na registre opšte namjene, na akumulator ili na desni bufer-registar. Iz akumulatora podaci
mogu ići samo na ALU.
statusni registar - sadrži stanja koja mogu nastati tokom obrade podataka kao što su: rezultat jednak nuli,
omogućen prkid programa...
Primjer: Potrebno je sabrati sadržaje registara na sljedeći način: R0 = R0 + R1, ili riječima: dodaj sadržaj registra R1
sadržaju registra R0 i rezultat spremi u R0. Sadržaj registra R1 ostaje nepromijenjen.
Da bi se izvršila naredba R0 = R0 + R1 potrebno je napraviti sljedeće korake:
1. prenijeti sadržaj registra R0 preko sabirnice na desni ulaz ALU (slika 2.1) i ondje ga privremeno zapamtiti u
desnom buferu.
2. nakon toga potrebno je prenijeti sadržaj registra R1 preko akumulatora u lijevi bufer registar
3. pošto se na oba ulaza ALU nalaze potrebni ulazni podaci, obavlja se operacija sabiranja sadržaja registara, a
rezultat se pojavljuje na izlazu iz ALU
4. dobiveni rezultat se šalje na sabirnicu za podatke i sa sabirnice u R0
5. ako pri radu nastane neko stanje koje treba signalizirati, u statusnom registru se odgoavarajući bitovi setuju u
stanje logičke jedinice
7
Ako u MPU postoji samo jedna sabirnica, u jednom trenutku se može obavljati samo jedan prijenos. Na
sabirnici se u jednom trenutku može naći samo jedan podatak. Ovakva organizacija mikroprocesora je korištena
u prvim generacijama MPU jedinica.
2.3 Organizacija mikroprocesora oko dvije i tri sabirnice
Statusni registar
ostali elementi
registar
registar
Aritmetičko-
registar
logička
jedinica
.....
Rn
R1
R0
8
Primjer organizacije mikroprocesora oko tri sabirnice prikazan je na slici 2.3.
Svaki ulaz u ALU ima svoju sabirnicu za ulazne podatke. U ovom slučaju ne bi trebalo implementirati bufer-
registre na ulazu u ALU jer se ulazni podaci mogu istovremeno naći na njenim ulazima. Međutim, u praktičnoj
realizaciji mikroprocesora sa ovom vrstom arhitekture proizvođači ipak stavljaju bufer-registre radi sigurnosti
isporuke podataka prema ALU.
Može se zaključiti da ovakva organizacija dodatno ubrzava rad mikroprocesora jer se istovremeno kroz sistem
može prenositi veća količina podataka.
.....
Statusni registar
ostali elementi
registar
registar
registar
Aritmetičko-
logička
jedinica
Rn
R1
R0
9
2.4. Standardna arhitektura mikroprocesora
Većina današnjih mikroprocesora ima sličan tip arhitekture koji se sastoji od sljedećih gradivnih blokova:
1. upravljačke jedinice
2. aritmetičko-logičke jedinice
3. jednog ili više akumulatora
4. registara opšte namjene
5. adresnih registara
6. internih sabirnica
Ovaj dio mikroprocesora zadužen je za generiranje upravljačkih signala i koordinaciju svih aktivnosti unutar
mikroprocesora.
Upravljačka jedinica pribavlja, dekodira i omogućava izvođenje instrukcija.
Ova jedinica takođe komunicira s ostalim komponentama mikroračunara preko ulazno-izlaznih linija, odnosno
upravljačke sabirnice.
Za vrijeme faze PRIBAVI upravljačka jedinica pribavlja instrukciju i dekodira operacijski kod. U skladu sa
značenjem operacijskog koda, mijenja stanje mijenja stanje mikroprocesora i šalje upravljačke signale drugim
elementima mikroprocesora i mikroračunara.
Element iz niza upravljačkih signala naziva se mikroinstrukcija. Mikroinstrukcija je upravljačka riječ koja je
uzrok jedne ili više istovremenih operacija – mikrooperacija. Primjeri mikrooperacija su: prijenosi između
registara, posmak sadržaja registra i sl.
Instrukcija pribavljena iz memorije (RAM) mikroračunara (makroinstrukcija) obično uvjetuje izvođenje niza
mikroinstrukcija.
Upravljačka jedinica koja ima upravljačke riječi – mikroinstrukcije pohranjene u svojoj vlastitoj (mikroprocesorskoj)
memoriji, naziva se mikroprogramirana upravljačka jedinica. Niz mikroinstrukcija, odnosno mikroprogram,
pohranjen je u internom ROM-u ili PLA – programabilnom logičkom polju unutar mikroprocesora.
10
Na slici 2.4 prikazani su detalji organizacije upravljačke jedinice.
Instrukcijski
registar
Upravljački
Makroinstrukcije Mikroprogramska signali
iz memorije Mikroinstrukcija Mikroinstrukcijski upućeni prema
Adresa memorija (interni
dekoder nezavisnim
ROM ili PLA)
upravljačkim
tačkama
Generator adrese
mikroprograma
Informacija o sljedećoj adresi
Upravljačka jedinica
Uvjet
Instrukcijsku kod pohranjen u instrukcijskom registru, uvjeti (vanjski i interni – kao rezultat izvođenja prijašnje
mikroinstrukcije), te informacija o sljedećoj adresi mikroprograma, generiraju stvarnu adresu mikroprograma u
sklopu koji se naziva generator adrese mikroprograma.
Riječ pohranjena na adresiranoj lokaciji mikroprogramske memorije naziva se mikroinstrukcija.
Upravljačka riječ iz mikroprogramske memorije preko dekodera mikroinstrukcija specificira upravljačke signale
koji se upućuju u nezavisne upravljačke tačke sistema i omogućavaju izvođenje mikrooperacija.
Na slici 2.5 je prikazano na koji način jedna makroinstrukcija uvjetuje izvođenje niza mikroinstrukcija –
mikroprograma.
11
M
e
đ
u
r
Interna sabirnica mikroprocesora e Vanjska sabirnica
g
i
s
t Niz makroinstrukcija
a (makroprogram)
Instrukcijski r
registar
7 0
7 0
7 0
7 0
Upravljačka jedinica
Mikropotprogram
Slika 2.5. Odnos makroprograma i mikroprograma
Primjer izvođenja makroinstrukcije COMA (komplementiraj sadržaj akumulatora A). Izvođenja makroinstrukcije
COMA uvjetuje sljedeće mikrooperacije:
○ prijenos sadržaja akumulatora A preko interne sabirnice u sklop za komplementiranje (mikroinstrukcija
na adresi 0010)
○ aktiviranje logike sklopa za komplementiranje (mikroinstrukcija na adresi 0011)
○ prijenos komplementiranog sadržaja preko interne sabirnice u akumuluator A (mikroinstrukcija na adresi
(0012)
12
Tabela 2.1 Niz mikroinstrukcija kao rezultat izvršavanja makroinstrukcije COMA
Mikroinstrukcijski kod (sadržaj mikroprogramske memorije)
Adresa u internom ROM-u
(mikroprogramskoj memoriji) a b c d e f
o Iz primjera je vidljivo da se mikroprogram za makroinstrukciju COMA sastoji od tri 18-bitne riječi - mikroinstrukcije.
o Mikroprogrami koji se nalaze u upravljačkoj jedinici su u većini slučajeva upisani u postupku proizvodnje i korisnik ih ne
može mijenjati.
13
2.4.2 Aritmetičko-logička jedinica
1 1 1 1 1 1 0 0
+
1 0 0 0 0 0 0 0
C - zastavica 1 0 1 1 1 1 1 0 0
Slika 2.6. Primjer sabiranja sa prijenosom
2. zastavica C upotrebljava se kao bit pri operacijama posmaka. Slika 2.7 prikazuje primjer kružnog posmaka i
posmaka ulijevo.
C - zastavica b7 b0 C - zastavica b7 b0
14
Zastavica V (engl. Overflow) je bit preteka (preliva). Aritmetički pretek (zastavica postavljena na V=1) pokazuje
da je prilikom aritmetičke operacije rezultat prekoračio granicu +/-127 kod mikroprocesora čija je duljina riječi 8-
bita (veličina akumulatora).
Zastavica N se upotrebljava za indikaciju negativnog rezultata aritmetičke operacije (tj. kada je najznačajniji bit
riječi b7 = 1).
Zastavica Z je dojavni bit nule i postavlja se (Z = 1) kada je rezultat aritmetičke operacije jednak nuli.
Upotrebljava se i za logičke operacije, npr. operacije uspoređivanja gdje se u slučaju da su dva operanda
jednaka postavlja zastavica. Npr. operacija uspoređivanja se vrši logičkom operacijom isključivo ILI (XOR ili
EOR) - slika 2.8.
Z XORA
Z – bit
poslije
1 0 0 0 0 0 0 0 0 Akumulator A
Z
Slika 2.8. Operacija XORA i Z-bit u status registru
Zastavica H je dojavni bit polovičnog prijenosa i upotrebljava se u BCD (engl. Binary Code Decimal)
operacijama zbog toga što se u BCD kodu upotrebljavaju četiri bita za prikaz decimalnog broja. Prilikom
izvođenja aritmetičkih operacija može nastati prijenos iz bita b3 u bit b4 (polovični prijenos). Taj prijenos u BCD
aritmetici mora biti otkriven (detektiran) – (H = 1 ako se prijenos dogodio) da bi se omogućilo pravilno izvođenje
aritmetičkih operacija.
Zastavica P je bit parnosti i sadržana je u status registru iako se rijetko kao takva implementira. Služi za
ispitivanje korektnosti kod prijenosa podataka.
Zastavica I predstavlja bit prekida (engl. Interrrupts) i obično se ne koristi u aritmetičkim operacijama. Ovaj bit je
postavljen u stanje I = 1 u slučaju pojave prekida. Prekidi su događaji usljed kojih se prekida normalni tok
izvršavanja glavnog programa (instrukcija) da bi se obavio neki specifičan zadatak (npr. izvršavanje nekog
specifičnog potprograma). Prekidi mogu biti hardverski i softverski.
15
Potrebno je naglasiti da se kod implementacije mikroprocesora najčešće koriste zastavice C, V, N, i Z čiji je sklop
za detekciju prikazan na slici 2.9.
1. operand 2. operand
Cs
8 – bitna aritmetičko - logička
Cp
jedinica Izbor funkcije
C V N Z
16
2.4.3 Registri
C - zastavica b7 šifter b0
17
Operacija pomicanja podataka ulijevo prikazana je na slici 2.11. Ona se donekle razlikuje od rotacije. Bit najveće težine
prelazi u C bit status registra, a na mjesto bita najmanje težine unutar šiftera dolazi 0.
Za provjeru stanja status registra najčešće postoje posebne instrukcije ili postupci.
C - zastavica b7 šifter b0
18
Instrukcija PUSH polaže podatak na vrh stoga, dok instrukcija PULL uzima podatak sa vrha stoga. Struktura stoga
kao i izvođenje instrukcija PUSH i PULL, prikazana je na slici 2.12.
Stog služi za privremeno pohranjivanje podataka kao što su:
○ tekući status ili stanje mikroprocesora (kod prekida)
○ povratne adrese
○ podaci
F3
7F 7F
63 63 63
FD FD FD
Slika 2.12 Primjer izvođenja PUSH i PULL instrukcije
F3 F3
Akumulator A Akumulator A
m-1 m-1 SP
m SP m F3
m+1 7F m+1 7F
m+2 63 m+2 63
m+3 FD m+3 FD
Slika 2.13 Pokazivač stoga (SP) prije i poslije izvršavanja PUSH A
19
2.5. Izvođenje instrukcija
Na slici 2.14 je prikazan jednostavan model mikroprocesora kojega, između ostalih, čine sljedeće komponente:
A - akumulator, odnosno radni registar
DC (engl. data counter) - registar brojač podataka u koji se smješta adresa memorijske lokacije u kojoj se
nalazi operand
PC- programski brojač koji sadrži adresu sljedeće instrukcije za izvršenje
IR- instrukcijski registar u koji se upisuje tzv. operacijski kôd instrukcije.
F - signal takta
Oblik naredbe 8-bitnog mikroprocesora prikazan je na slici 2.15.
7 A 0 15 DC 0 15 PC 0
Brojač
Akumulator 0101
podataka
Interna sabirnica
7 0 7 0
Privremeni IR
B6
registar
PR
Dekoder
Skup registara
opšte namjene
ALU
Upravljački
sklop Piši
Čitaj
Upravljačka jedinica
F
Slika 2.14 Model jednostavnog mikroprocesora
20
8 bita
Mikroprocesor za vrijeme faze PRIBAVI postavlja (prenosi) sadržaj programskog brojača preko interne sabirnice
na spoljnu adresnu sabirnicu.
Ujedno šalje i odgovarajuće upravljačke signale (ČITAJ) na spoljnu upravljačku sabirnicu.
Adresni dekoder i memorijski sklop dekodiraju postavljenu adresu (prisutnu na adresnoj sabirnici) u cilju pristupa
do odgovarajuće memorijske riječi.
Za nekoliko stotina ns, sadržaj specificirane memorijske lokacije pojavit će se na spoljnoj sabirnici podataka. Taj
se sadržaj pohranjuje u instrukcionom registru IR i on predstavlja operacioni kôd instrukcije.
Za vrijeme faze PRIBAVI, mikroprocesor upotrebljava svoju internu logiku i povećava sadržaj programskog
brojača.
Za vrijeme trajanja faze IZVRŠI, upravljačka jedinica, u skladu sa operacijskim kodom koji je pohranjen u
instrukcijskom registru, generiše niz upravljačkih signala. Rezultat tog niza su odgovarajući prijenosi podataka,
te operacije pojedinih sklopova unutar ALU.
Posmatrat ćemo šta se događa u mikroprocesoru tokom izvršavanja sljedećeg programa (adresa memorijske
lokacije sadrži 16 bitova, a dužina riječi mikroprocesora je 8 bitova) - slika 2.16:
21
Memorija
Adresa
Sadržaj Značenje
0100 B6
Napuni akumulator A sa
0101 02 sadržajem memorijske
0102 01 lokacije 0201
Program
0103 9B Dodaj sadržaju
akumulatora A sadržaj
0104 FF memorijske lokacije
. 00FF
.
.
.
.
8-bita
00FF 1A
.
. Podaci
.
0201 23
22
Slika 2.17 Prva instrukcija, prvi korak, faza PRIBAVI, početni uslovi
Slika 2.18 Stanje nakon faze PRIBAVI, prvi ciklus prve instrukcije
23
Slika 2.19 prikazuje stanje nakon pribavljanja značajnijeg bajta adrese podatka (02..).
Stanje programskog brojača je uvećano za jedan.
Mikroprocesor pribavlja treći bajt instrukcijske riječi (..01) i smješta ga u brojač podataka.
Programski brojač uvećava se za jedan i pokazuje na sljedeću instrukciju.
7 A 0 15 DC 0 15 PC 0
Akumulator 02.. 0102
Interna sabirnica
7 0 7 0
Privremeni IR
B6
registar
PR
Dekoder
Skup registara
opšte namjene
ALU
Upravljački
sklop Piši
Čitaj
Upravljačka jedinica
F
Slika 2.19 Drugi ciklus prve instrukcije, stanje nakon pribavljanj značajnijeg bajta adrese operanda
24
Slika 2.20 prikazuje stanje nakon pribavljanja manje značajnog bajta adrese podatka.
Slika 2.20 Treći ciklus prve instrukcije, stanje nakon pribavljanja manje značajnijeg bajta adrese podataka
Slika 2.21 Stanje nakon izvođenja instrukcije, četvrti ciklus izvođenja instrukcije
25
Slika 2.22 Stanje nakon pribavljanja druge instrukcije, prvi ciklus druge instrukcije
Adresa značajnijeg
2 1 Adresa instrukcije
bajta operanda
B6 4
Adresa manje
3 1 Adresa instrukcije značajnijeg bajta
operanda
27
3. Arhitektura mikrokontrolera PIC16F887
Mikrokontroleri (engl. Microcontroler Unit - MCU) i mikroprocesori se razlikuju u mnogim segmentima. Najveća razlika
je u njihovoj funkcionalnosti.
Da bi se mikroprocesori mogli koristiti za određenu namjenu, za minimalnu konfiguraciju potrebno im je dodati
vanjske komponente (razni pomoćni upravljački sklopovi, RAM memorija, HDD ...).
S druge strane mikrokontroleri su napravljeni na način da se sve komponente potrebne za njegovo funkcionalno
korištenje nalaze integrirane u jednom chip-u.
Slika 3.1 prikazuje odnos između mikrokontrolera i mikroprocesora.
28
3.1 Interna arhitektura
Većina mikrokontrolera je zasnovana na dva modela arhitekture, tzv. Harward arhitektura i Von-Neuman arhitektura.
U biti se radi o dva različita načina razmjene podataka između CPU i memorije.
Von-Neuman arhitektura
Mikrokontroleri (8-bitni) koji koriste ovu arhitekturu posjeduju blok zajedničke memorije koji sa CPU jedinicom
komunicira preko jedne 8-bitne sabirnice (slika 3.2). Kompletna razmjena podataka se odvija preko jedne sabirnice
(podaci i instrukcije), što onemogućava efikasan rad mikrokontrolera koji su bazirani na ovoj arhitekturi. CPU u
jedinici vremena može všiti samo jednu operaciju, odnosno može čitati ili instrukciju ili podatak iz memorije ali nikako
oboje u isto vrijeme.
29
i instrukcije i podaci se mogu čitati istovremeno preko dvije odvojene sabirnice
sve instrukcije se izvode u samo jednom instrukcijskom ciklusu (osim instrukcije skoka)
3.2 PIC (engl. Peripheral Interface Controller) mikrokontroleri
Proizvođač ovih mikrokontrolera je američka firma Microchip Inc. Prvi kontroler je napravljen 1975 godine (oznaka
PIC1650) i ne može se smatrati pravim savremenim mikrokontrolerom. Deset godina kasnije, dodavajem određenog
broja perifernih jedinica ovo integrisano kolo dobiva formu savremenog mikrokontrolera.
Microchip u svojoj ponudi ima 8, 16 i 32 bitne mikrokontrolere. U okviru ovog predmeta će se izučavati isključivo 8-
bitni mikrokontroleri.
8-bitni mikrokontroleri se prema mogućnostima dijele na: Base-Line, Mid-Range, High-End.
Tabela 3.1 Podjela 8-bitnih mikrokontrolera
0 – 2 x 8 2 – 3 x USB2.0 CAN2.0
PIC18FXXX 4 – 128 256 – 3936 18 – 80 32 – 48 4 – 16 10 or 12 0–3 0–5 –
16 USART I2C SPI
0 – 2 x 8 2 – 3 x USB2.0 USART
PIC18FXXJXX 8 – 128 1024 – 3936 28 – 100 40 – 48 10 – 16 10 2 2–5 –
16 Ethernet I2C SPI
30
Svi PIC mikrokontroleri koriste harvardsku arhitekturu što znači da je njihova programska memorija direktno povezana
sa CPU korištenjem više od 8 sabirničkih linija. U zavisnosti od širine programske sabirnice postoje 12, 14 i 16 bitni
mikrokontroleri. Njihova podjela je prikazana u tabeli 3.1.
Svi PIC mikrokontroleri prikazani u tabeli 3.1 koriste 8- bitnu harvardsku arhitekturu i pripadaju jednoj od tri gore
navedene grupe (podjela je izvršena na osnovu veličine programske riječi – 12, 14 ili 16 bita). Sve grupe dijele sličnu
8-bitnu mikroprocesorsku jezgru i koriste isti set instukcije kao i osnovni hardverski „kostur“ sa manje ili više perifernih
jedinica.
Napomena: ukratko ćemo se posjetiti pojmova: bit, bajt, nibl (high i low), LSB i MSB koji su prikazani na slici
3.4.
Slika 3.6 Prikaz registara specijalne namjene – SFR Slika 3.7 U/I portovi
32
Memorijska jedinica:
je dio mikrokontrolera zadužen za spremanje podataka i instrukcija. Memorija se sastoji od memorijskih lokacija od
kojih svaka ima svoju jedinstvenu adresu. U memorijske lokacije se može upisivati i iz njih se može čitati (engl.
read/write). Mikrokontroleri posjeduju nekoliko vrsta memorije:
ROM (Read Only Memory), programska memorija - koristi se za spremanje programa koji će se izvršavati u
mikrokontroleru. Veličina programa koji se može upisati u memoriju zavisi od njene veličine. Današnji
mikrokontroleri za adresiranje najčešće koriste adrese širine 12, 14 i 16 bita što znači da mogu adresirati
maksimalno 64KB memorijskog prostora (vrijedi za 16 bita). Najčešći tip ROM memorije, s obzirom na mogućnosti
brisanja i ponovnog upisa, je tzv. FLASH tip. Broj upisa i brisanja pelazi nekoliko hiljada puta i ovaj tip memorije je
pogodan za razvoj sistema baziranih na mikrokontrolerima. Postoje i tzv. OTP (engl. One Time Programming) tip
ROM memorije kod kojih je omogućeno samo jedno programiranje. Najčešće se koristi u serijskoj proizvodnji
uređaja baziranih na mikrokontrolerima gdje se programi upisuju u ROM memoriju samo jednom tokom
proizvodnog procesa.
RAM (Random Access Memory) je dio memorijskog prostora mikrokontrolera koji se koristi za privremeno
pohranjivanje podataka i međurezultata koji se generiraju tokom izvođenja programa.
EEPROM (Electrical Erasable Programmable ROM) je dio memorijskog prostora u koji se podaci mogu upisivati
i iz kojeg se podaci mogu čitati. Za ovaj tip memorije karakteristična je sporost njenom pristupu (reda ms), a
podaci koji se u njoj nalaze pohranjeni ostaju zapisani i nakon nestanka napajanja. Najčešće se koristi se za
pohranu parametara nekog procesa kojima se ne mora često pristupati radi pisanja ili čitanja.
34
Na slici 3.10 prikazane su jedinice za serijsku komunikaciju.
Paralelno povezivanje je pogodno u slučajevima kratkih razdaljina između učesnika u komunikaciji, međutim za
komunikaciju na većim rastojanjima koristi se serijsko povezivanje. Ova vrsta komunikacije podrazumijeva
korištenje manjeg broja vodova u odnosu na paralelnu komunikaciju.
Mikrokontroleri posjeduju više ugrađenih sistema (protokola) za serijsku komunikaciju koji su realizirani u vidu
perifernih jedinica (slika 3.10). Koji će se od njih koristiti zavisi od sljedećih faktora:
sa koliko uređaja će mikrokontroler razmjenjivati podatke
na koji brzinama razmjena treba da se vrši
kolika je udaljenost između uređaja učesnika u komunikaciji
da li podaci treba da se istovremeno mogu slati i primati
Na osnovu navedenih faktora može se donijeti odluka o korištenju protokola pogodnog za konkretnu primjenu.
Periferne jedinice zadužene za ovu vrstu komunikacije imaju ugrađene mehanizme koji se automatski brinu o
kvaliteti razmjene podataka na nivou fizičkog prijenosa.
Korisnik (programer) brine se samo o slanju (engl. send) i primanju (engl. recived) podataka.
35
Pojam Baud Rate se koristi za označavanje brzine prijenosa podataka, odnosno bitova po sekundi [bps].
I2C (Inter Integrated Circuit) je protokol koji se koristi za razmjenu podataka između MCU ili specijalizovanih
sklopova, na kratkim rastojanjima (obično unutar jedne štampane ploče). Veza se uspostavlja preko dva
provodnika od kojih se jedan koristi za slanje i primanje podataka, a drugi za sinhronizaciju između učesnika u
razmjeni. Kao što se vidi (slika 3.10 b) jedan od uređaja je uvijek tzv. master, dok su ostali slave. Zadatak master
uređaja je adresiranje slave uređaja prije započinjanja komunikacije. Na ovakav način, na jednu komunikacijsku
sabirnicu, može biti spojeno 112 različitih uređaja. Baud rate je obično oko 100 Kb/s (standardni mod) ili 10 Kb/s
(spori mod). Najveća brzina koja se može postići je oko 3.4 Mb/s, a udaljenost na kojoj se komunikacija može
vršiti je nekoliko metara.
SPI (Serial Peripheral Interface Bus) je sistem serijske komunikacije koji koristi do 4 voda (obično tri): jedan za
prijem, jedan ta slanje, jedan za sinhronizaciju i eventualno jedan za odabir uređaja za komunikaciju (slika 3.10
c). Komunikacija se odvija u tzv. full-duplex modu što znači da se podaci mogu istovremeno i primati i slati.
Maksimalna brzina prijenosa je znatno veća nego kod I2C protokola.
UART (Universal Asynchronous Receiver/Transmitter) je vrsta asinhrone konekcije bez sihronizacijskog
signala. U biti se radi o pretvaranju paralelnih podataka u serijske i njihovom slanju preko komunikacijskih
vodova. Brzine se kreću do 1 Mb/s.
Oscilator:
je periferna jedinica zadužena za sinhronizaciju svih radnji u mikrokontroleru. Za generiranje signala takta mogu
se koristiti vanjski (kristalni oscilator, RC oscilator) ili unutrašnji izvor (integriran u mikrokontroleru). Instrukcije se
ne izvode na brzinama na kojima radi oscilator već nekoliko puta sporije. Ovo se dešava zbog toga što se
izvršavanje instrukcija provodi u nekoliko koraka za koje je potrebno nekoliko taktnih signala.
Npr. za MCU koji koristi vanjski izvor takta (kvarcni kristalni oscilator) od 20 MHz, vrijeme izvršavanja instrukcije
nije 50 ns (što bi se očekivalo jer je (T=1/f)) već 200, 400 i 800 ns u zavisnosti od mikrokontrolera koji se koristi.
Watchdog tajmer:
je poseban tajmer unutar mikrokontrolera koji je spojen na poseban RC oscilator (oscilator sastavljen od
otpornika i kondenzatora). Ukoliko je ovaj tajmer omogućen, neprestano odbrojava do svog maksimuma nakon
čega se MCU resetuje. Sprječavanje reseta se postiže specifičnom komandom CLRWDT (engl. Clear Watchdog
Timer).
Namjena ovog tajmera je spječavanje „zaglavljivanja“ programa koji se izvršava u mikrokontroleru. Izvršavanjem
naredbe CLRWDT potvrđuje se pravilno izvođenje programa. Ova komanda se stavlja na jedno ili više specifičnih
mjesta unutra programa. Neizvršavanjem jedne od njih uvećava se stanje WDT-a da bi nakon dostizanja njegove
maksimalne vrijednosti došlo do reseta mikrokontrolera (slika 3.13.).
Reset mikrokontrolera ukazuje na nepravilan rad programske petlje koja se unutar njega izvršava.
38
A/D (analogno-digitalni) konvertor:
Za analogne signale koji se dovode na ulaz mikrokontrolera potrebno je izvršiti digitalizaciju (mikrokontroler
razumije samo 0 i 1, ne razumije 2, 3.4, 5, 10...). U ovu svrhu služi A/D konvertor kojeg skoro svaki mikrokontroler
posjeduje kao posebnu perifernu jedinicu. Drugim riječima, ovaj sklop vrši konverziju analognog kontinualnog
signala u formu koju CPU unutar mikrokontrolera razumije. Na slici 3.14 prikazan je analogni naponski signal čija
je amplituda prikazana na Y osi u vrijednostima od 0-5[V]. Na X osi je taj isti signal prikazan u diskretnim
binarnim vrijednostima. Vrijednosti sa Y ose MCU razumije tek nakon što ih A/D konvertor pretvori u vrijednosti na
X osi.
Slika 3.15 prikazuje internu strukturu A/D konvertora.
Slika 3.14. Konverzija analognog signala u digitalni Slika 3.15. Interna struktura A/D konvertora
U ovom poglavlju su nabrojane najosnovnije periferne jedinice mikrokontrolera PIC16F887. Navedene su njihove
najosnovnije osobine koje bi trebale biti dovoljne za osnovno razumijevanje njihove uloge u mikrokontolerski
baziranim sistemima.
Kroz naredna poglavlja biće dat detaljan prikaz većine perifernih jedinica koje ovaj mikrokontroler posjeduje.
39
3.2. Peirferne jedinice mikrokontrolera PIC16F887
U ovom poglavlju će biti dat detaljan prikaz osnovnih perifernih jedinica mikrokontrolera PIC16F887.
Biće objašnjena njihova osnovna namjena i funkcionalnost kao i načini njihove konfiguracije korištenjem
konfiguracijskih registara.
40
Svaki port posjeduje odgovarajući konfiguracijski registar (PORTA->TRISA, PORTB->TRISB ... PORTE->TRISE)
koji određuje njegovu namjenu (smjer). Ukoliko se u odgovarajućem bitu TRIS registra nalazi zapisana logička nula
(bit = 0), pin PORT-a koji odgovara toj poziciji u TRIS registru je izlazni, u suprotnom je ulazni (bit = 1).
Konfigurisanje RA0, RA1, RA2, RA3 i RA5 pinova kao anlognih, postiže se konfigurisanjem bitova unutar ANSEL
registra na sljedeći način:
RA0 = AN0 (određeno postavljanjem logičke jedinice na mjesto ANS0 bita ANSEL registra)
RA1 = AN1 (određeno postavljanjem logičke jedinice na mjesto ANS1 bita ANSEL registra)
RA2 = AN2 (određeno postavljanjem logičke jedinice na mjesto ANS2 bita ANSEL registra)
RA3 = AN3 (određeno postavljanjem logičke jedinice na mjesto ANS3 bita ANSEL registra)
RA5 = AN4 (određeno postavljanjem logičke jedinice na mjesto ANS4 bita ANSEL registra)
ZADATAK: poajsniti zbog čega je preskočen pin RA4
41
Primjer programskog kôda napisanog u programskom jeziku C koji pokazuje način konfigurisanja porta A prikazan
je u sljedećem listingu:
//PORTA.2 pin je konfigurisan kao digitalni ulaz.
//ostali pinovi PORTA konfigurisani su kao digitalni izlazi
ANSEL = ANSELH = 0; //Svi I/O pinovi su konfigurisani kao digitalni
PORTA = 0; //Stanja pinova PORTA stavljena u stanje logičke nule
TRISA = 0b00000100; //Svi PORTA pinovi osim PORTA.2 su konfigurisani kao izlazi
Port B je 8- bitni, bidirekcionalni port. Bitovi unutar TRISB registra određuju funkciju (ulazni ili izlazni) bitova u portu
B (slika. 3.18).
42
RB3 = AN9 (određeno postavljanjem logičke jedinice na mjesto ANS9 bita ANSELH registra)
RA4 = AN11 (određeno postavljanjem logičke jedinice na mjesto ANS11 bita ANSELH registra)
RA5 = AN13 (određeno postavljanjem logičke jedinice na mjesto ANS13 bita ANSELH registra)
Svaki od pinova porta B ima dodijeljenu odgovarajuću dodatnu funkciju (multipleksirano) vezanu za neku od
perifernih jedinica mikrokontrolera.
Ovaj port ima nekoliko specijalnih mogućnosti koje ga razlikuju od ostalih portova mikrokontrolera:
1. svi pinovi porta B imaju ugrađene tzv. pull-up otornike što ga čini idealnim za konekciju sa tasterima ili
tastaturama, raznim vrstama prekidača (senzorskim izlazima), optokaplerima itd. Da bi se omogućilo korištenje
ovih otpornika mora se izvršiti konfiguracija bitova unutar WPUB registra (logička 1 omogućava pull-up
otpornike na odgovarajućem pinu porta B) - slika 3.19.
Ovako konfigurisani pinovi porta B ne utiču na funkcionalnost porta u slučaju kada su pinovi porta B
konfigurisani kao izlazni (otpor od nekoliko desetina kilooma), ali su od velike koristi u slučaju kada su pinovi
konfigurisani kao ulazni (slika 3.20).
43
a) pin sa pull-up otpornicima b) pin bez pullup-otpornika
Slika 3.20 Konfigurisanje pull-up otpornika na portu B
2. ukoliko je unutar IOCB registra omogućeno (odgovarajući bit je setovan, postavljen na logičku 1-cu) , svaki bit
porta B, konfigurisan kao ulazni, može uzrokovati prekid (engl. interrupt) na svaku promjenu logičkog stanja
(slika 3.21).
44
Slika 3.22 Korištenje porta B kao ulaza za tastaturu
Ukoliko se pinovi označeni sa X, Y, i Z trajno postave u stanje logičke jedinice (5V), pritisak na bilo koji taster
spojen na port B uzrokovaće prekid (slika 3.22). Na ovaj način se detektuje stanje na pinovima RB0, RB1,
RB2 i RB3 na osnovu kojeg se određuje kombinacija tastera koji su u tom trenutku pritisnuti na tastaturi.
Primjer programskog kôda koji obrađuje stanje pina RB1 prikazan je u sljedećem programskom listingu (nije
direktno vezano za primjer sa slike 3.22):
RB0/INT pin
Ovaj pin je jedini pravi (hardwerski) eksterni izvor prekida. Može biti konfigurisan tako da reaguje na rastući (prelaz sa
nule na jedinicu) ili opadajući brid (prelaz sa jedinice na nulu) signala mijenjanjem INTEDG bita unutar
OPITION_REG konfiguracijskog registra.
Zadatak: pojasniti spajanja pull-down otpornika na pinove bilo kojeg porta na mikrokontroleru.
46
PORTC i TRISC registri
Port C je bidirekcionalni port širine 8 bita. Njegovu funkciju s obzirom na smjer pojedinih pinova obavlja TRISC
registar (slika 3.24). Logika djelovanja je potpuno ista kao i kod prethodna dva porta. Ostale funkcije porta C biće
objašnjene kroz korištenje ostalih perifernih jedinica u poglavljima koja slijede.
47
PORTE i TRISE registri
Port E je bidirekcionalni port širine 4 bita. Njegovu funkciju s obzirom na smjer pojedinih pinova obavlja TRISE registar
(slika 3.24). Logika djelovanja je potpuno ista kao i kod prethodna četiri porta s razlikom da je RE3 pin uvijek definisan
kao ulaz.
48
ANSEL I ANSELH registri
Ova dva registra se koriste za konfigurisanje I/O pinova na portovima u smislu njihove namjene. Ovi pinovi mogu biti
konfigurisani kao analogni ili kao digitalni. Njihova funkcija zavisi od stanja bitova unutar ova dva registra. (slika 3.25.)
Da bi se određeni pin proglasio kao analogni, na odgovarajuće mjesto u ANSL ili ANSELH registru mora biti upisana
logička jedinica (1).
U obrnutom slučaju, kada pin treba proglasiti digitalnim, na odgovarajuće mjesto unutar ovih registara upisuje se
logička nula (0).
NAPOMENA: Ukoliko se neki od I/O pinova želi koristiti kao analogni, prvo se mora izvršiti inicijalna
konfiguracija ANSEL i ANSELH registara. Očitanje stanja I/O pinova koji su konfigurisani kao analogni, a
pokušaju se pročitati kao digitalni, za rezultat će uvijek vratiti logičku nulu (0).
Funkcionalni prikaz djelovanja ANSEL i ANSELH registara na I/O pinove, prikazan je na slici 3.26.
49
Slika 3.26. Funkcionalni dijagram korištenja ANSEL i ANSELH registra
OPTION_REG
Ovaj registar sadrži bitove koji su odgovorni za konfigurisanje Timer0/WDT preskalera, TMR0, vanjskih (eksternih)
prekida kao i pull-up otpornika na portu B. Sadržaj ovog regstra prikazan je na slici 3.27.
50
Značenje pojedinih bitova unutar ovog registra:
INTEDG - bit za određivanje reakcije na rastući ili opadajući brid signala koji uzrokuje prekide (slika 3.28)
1 - prekid na rastući brid signala na pinu RB0/INT
0 - prekid na opadajući brid signala na pinu RB0/INT
T0SE - bit za određivanje reakcije na rastući ili opadajući brid signala TMR0 (tajmera 0)
1 - uvećanje na tranziciju visoko-nisko (T0CKI pin)
0 - uvećanje na tranziciju nisko-visoko (T0CKI pin)
51
PS2, PS1, PS0 - bitovi za selekciju omjera preskalera. Omjer preskalera je određen kombinacijom ova tri
bita. Omjer preskalera takođe ovisi i od toga kome je preskaler dodijeljen (TMR0 ili WDT). Kombinacije koje
određuju ove omjere prikazane su u tabeli 3.2.
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
NAPOMENA: Ukoliko postoji potreba da se tajmeru 0 (TMR0) dodijeli 1:1 omjer preskalera, preskaler je potrebno
dodijeliti WDT tajmeru. Kao rezultat toga, tajmer 0 ne koristi preskaler već impulse za uvećanje svog stanja
dobiva direktno sa oscilatora u omjeru 1:1.
52
Programski kod koji demonstrira upotrebu preskalera prikazan je u nastavku:
/* Ako komanda CLRWDT nije izvršena, WDT tajmer će resetovati mikrokontroler svakih 32.768 us
(f=4MHz)*/
void main() {
OPTION_REG = 0b00001111; // Preskaler je dodijeljen WDT tajmeru u omjeru 1:128
asm CLRWDT; // asemblerska komanda za resetovanje WDT tajmera
...
...
// Vrijeme između dvije CLRWDT komande ne smije biti duže od 32.768 us (128x256)
asm CLRWDT; // asemblerska komanda za resetovanje WDT tajmera
...
...
// Vrijeme između dvije CLRWDT komande ne smije biti duže od 32.768 us (128x256)
asm CLRWDT; // asemblerska komanda za resetovanje WDT tajmera
...
INTCON registar
Sadrži bitove zadužene za omogućavanje važnih globalnih funkcija mikrokontrolera, flag bitove za signalizaciju TMR0
overflov stanja, bilježenje promjena na portu B kao i pojavu prekida na INT pinu porta B (slika 3.29).
53
PEIE - Pheripheral Interrupt Enable Bit: ponaša se slično GIE bitu, s razlikom da kontroliše prekide vezane
isključivo za periferne jedinice izuzimajući prekide koji dolaze od strane TMR0, PORTB bitova (IOC) i RB0/INT
pina
1 - omogući prekide od strane perifernih jedinica
0 - onemogući sve prekide
T0IE - TMR0 Overflow Interrupt Enable Bit: kontroliše prekide uzrokovane overflov stanjem tajmera 0 (TMR0)
1 - omogući prekide uzrokovanje overflov stanjem tajmera 0
0 - onemogući prekide uzrokovanje overflov stanjem tajmera 0
INTE - RB0/INT External Interrupt Enable Bit: kontroliše prekide uzrokovane promjenom logičkog stanja na
RB0/INT pinu (vanjski prekid)
1 - omogući vanjske prekide sa RB0/INT pina
0 - onemogući vanjske prekide sa RB0/INT pina
RBIE - RB Port Change Interrupt Enable Bit: kada je konfigurisan kao ulazni, pinovi porta B mogu uzrokovati
prekide mijenjanjem svog logičkog stanja (sa niskog na visoko i obrnuto)
1 - omogući prkide na portu B
0 - onemogući prkide na portu B
TOIF - TMR0 Overflow Interrupt Flag Bit: zastavica koja signalizira overflov na tajmeru 0 (kada se započinje
brojanje od nule)
1 - na tajmeru 0 je registrovan overflov (bit se u softveru mora vratiti na nulu za sljedeću detekciju
overflow stanja)
0 - nije registrovan overflov
INTF - RBO/INT External Interrupt Flag Bit: registruje se promjena stanja na RB0/INT pinu
1 - registrovan vanjski prekid na INT pinu
0 - nije registrovan vanjski prekid na INT pinu
RBIF - Port B Change Interrupt Flag Bit: registruje promjenu logičkih stanja na portu B
1 - na najmanje jednom od svih pinova porta B desila se promjena logičkog stanja
0 - nije bilo promjene stanja na portu B
54
Primjer programskog koda koji koristi INTCON registar za konfiguraciju mikrokontrolera
Detaljno komentarisati programski kod, nacrtati strukturu PORTA i TRISA registara i pojasniti njihovu namjenu:
ANSEL = ANSELH = 0;
PORTA = 0;
TRISA = 0b00000100;
Zbog kojeg razloga se RA4 pin na portu A ne može koristiti kao ulaz za A/D konvertor?
Navesti osnovne razlike između PORTA i PORTB portova. Koje su specifičnosti porta B, ukratko ih pojedinačno
pojasniti.
Nacrtati konfiguraciju ulaza pina preko pull-up i pull-down otpornika. Objasniti svrhu i namjenu te objasniti razliku
između ova dva spoja.
Koji uvjeti moraju biti ispunjeni da bi se pravilno očitala vrijednost sa pina koji je konfigurisan kao analogni ulaz.
Pojasniti namjenu IOCB registra.
Na koji način se vrši programiranje ROM FLASH memorije mikrokontrolera PIC16F887?
55
Koju ulogu igra RBPU bit unutar OPTION registra? Detaljno objasniti.
Koja ja uloga WPUB registra? Navesti programski primjer njegove upotrebe.
Navesti specifičnosti porta E. Detaljno kometarisati sljedeći programski kod:
ANSEL = 0b00100000;
ANSELH = 0;
TRISE = 0b00000001;
PORTE = 0;
Šta je to preskaler? Koja tri bita, kojeg registra se koriste za njegovu konfiguraciju i kako? Navesti primjer
konfiguracije
preskalera za omjere 1:128 i 1:64 respektivno.
Na koji način je moguće konfigurisati preskaler da se tajmeru 0 (TMR0) dodijeli vrijednost preskalera 1:1?
Pojasniti ulogu INTEDG bita u okviru OPTION registra (nacrtati slike za specifične valne oblike).
Detaljno pojasniti funkcionalni dijagram da slike 3.26.
Objasniti namjenu T0SE i T0CS bitova.
Zbog čega mikrokontroler PIC16F887 posjeduje 14 bitova unutar dva ANSEL (ANSEL I ANSELH) registra?
Navesti pojedinačne bitove INTCON registra i pojasniti njihovu namjenu.
Pojasniti razliku između INTE i INTF bitova INTCON registra.
Pojasniti razliku između RBIE i RBIF bitova INTCON registra.
56
TMR0 - tajmer 0 jedinica
Ovaj tajmer je najčešće korišten interni sklop mikrokontrolera. Koristi se u skoro svakoj aplikaciji gdje je potrebno
generisati impulse različitih dužina trajanja, mjeriti proteklo vrijeme, brojati eksterne impulse (radi kao brojač u ovom
slučaju).
Tajmer 0 ima sljedeće osobine:
može obavljati funkciju 8-bitnog tajmera/brojača
može mu biti dodijeljen preskaler (dijeli ga sa watchdog tajmerom)
može mu biti dodijeljen interni ili eksterni izvor takta
može uzrokovati prekid prilikom overflova
može reagovati na rastuću ili opadajuću ivicu signala (podešavanja u OPTION registru)
Na slici 3.30 prikazan je strukturni dijagram tajmera 0 koji prikazuje njegovu zavisnost od podešavanja pojedinačnih
bitova unutar registara koji utiču na rad ovog tajmera.
Slika 3.30 Strukturni dijagram veza tajmera 0 sa bitovima i registrima zaduženim za konfigurisanje njegovog rada
57
Na slikama 3.31 i 3.32 prikazana je zavisnost stanja tajmera 0 i watchdog tajmera od vrijednosti PSA bita unutar
OPTION_REG registra.
58
Primjer: u nastavku su dati primjeri programskog koda koji demostriraju upotrebu prekida, watchdog tajmera, preskalera i tajmera 0.
//U ovom primjeru, TMR0 je konfigurisan da radi kao tajmer i dodijeljen mu je preskaler.
unsigned cnt; //Deklaracija brojačke varijable
void interrupt(){ //Prekidna rutina
cnt++; //Pojava prekida uzrokuje uvećanje brojačke varijable za 1
TMR0 = 155; //Tajmer vraća svoju inicijalnu vrijednost (155)
INTCON = 0x20; //Bit T0IE je setovan (omogućen je ponovni prekid), bit T0IF vraćen u
//stanje logičke 0 (ZAŠTO?)
}
void main() {
OPTION_REG = 0x04; //Preskaler (1:32) je dodijeljen tajmeru TMR0, a izvor takta je
//oscilator (FOSC/4)
TMR0 = 155; //Tajmer TMR0 će početi brojati od 155 do 255
INTCON = 0xA0; //Omogućen prekid za TMR0 (u čemu je razlika u odnosu na?)
...
...
}
//U ovom primjeru, TMR0 je konfigurisan da radi kao brojač i dodijeljen mu je preskaler.
unsigned cnt; //Deklaracija brojačke varijable
void interrupt(){ //Prekidna rutina
cnt++; //Pojava prekida uzrokuje uvećanje brojačke varijable za 1
TMR0 = 155; //Brojač vraća svoju inicijalnu vrijednost (155)
INTCON = 0x20; //Bit T0IE je setovan (omogućen je ponovni prekid), bit T0IF vraćen u
//stanje logičke 0.
}
void main() {
OPTION_REG = 0x20; //Preskaler (1:2) je dodijeljen brojaču TMR0, a izvor takta je RA4 pin
TMR0 = 155; //Brojač TMR0 će početi brojati od 155 do 255
INTCON = 0xA0; //Omogućen prekid za TMR0
...
...
}
//U ovom primjeru, preskaler (1:64) je dodijeljen watchdog tajmeru.
void main() {
OPTION_REG = 0x0E; //Preskaler je dodijeljen WDT tajmeru (1:64)
asm CLRWDT; //Asemblerska komanda za resetovanje WDT
...
...
asm CLRWDT; //Asemblerska komanda za resetovanje WDT
...
59
TMR1 - tajmer 1 jedinica
Ovaj modul predstavlja 16-bitni tajmer/brojač. Sastoji se od dva registra TMR1L i TMR1H (slika 3.33).
Može brojati do vrijednosti od 65 535 impulsa u jednom ciklusu nakon čega se resetuje na vrijednost 0 i započinje
novi ciklus brojanja.
Slično kao i kod TMR0 tajmera, stanje ovih registara može biti pročitano ili u njih vrijednost može biti upisana u bilo
kojem trenutku. U slučaju overflova, generira se prekid ukoliko je omogućen.
Tajmer 1 može raditi u dva moda, kao tajmer ili kao brojač. Za razliku od tajmera 0, tajmer 1 ima sljedeće dodatne
funkcije:
mogućnost brojanja do 65 535 impulsa u jednom ciklusu (tajmer 0 do 255)
3-bitni preskaler (poseban)
opcioni LP oscilator (Low Frequency (Power) Crystal)
TMR1 gate kontrola (omogućeno brojanje) na osnovu stanja komparatora ili T1G pina
Wake-up reakcija na overflow (u slučaju da MCU posjeduje eksterni izvor takta)
služi kao vremenska baza za Capture/Compare funkciju
60
Na slici 3.34 prikazana je veza tajmera 1 sa ostalim funkcionalnim blokovima mikrokontrolera kao i zavisnost njegovog
rada od stanja pojedinih bitova unutar T1CON registra.
61
T1CON registar
Većinu funkcija tajmera 1 određuje stanje pojedinačnih bitova unutar T1CON registra (konfiguracijski registar tajmera
1). Zbog toga će u nastavku biti opisani svi pojedinačni bitovi ovog registra radi boljeg razumijevanja rada tajmera 1.
62
T1OSCEN - LP oscilator Enable Control bit
1 - LP oscilator je omogućen kao izvor takta za tajmer 1 (osilator sa veoma malom potrošnjom i
frekvencijom od 32 768 Hz)
0 - LP oscilator je isključen
T1SYNC - Timer 1 External Clock Input Synchronization bit - omogućava sinhronizaciju ulaza LP oscilatora ili
T1CKI pina sa internim taktom mikrokontrolera. Ovaj bit se ignoriše kada se broje impulsi sa glavnog oscilatora
(bit TMR1CS = 0)
1 - ne sinhroniziraj se sa eksternim izvorom takta
0 - sinhroniziraj se sa eksternim izvorom takta
TMR1CS - Timer 1 Clock Source Select Bit - selektovanje izvora takta za tajmer 1
1 - broji impulse sa T1CKI pina (na rastući brid signala)
0 - broji impulse sa internog izvora takta
TMR1ON - Timer 1 On bit
1 - omogući tajmer 1
0 - zaustavi (onemogući tajmer 1)
Napomena: u slučaju generiranja prekida od strane tajmera 1, TMR1IF zastavica unutar PIR1 registra biće
podignuta u stanje logičke jedinice.
63
Preskaler tajmera 1
Tajmer 1 posjeduje potpuno odvojen preskaler koji omogućava dijeljenje frekvencije oscilatora u omjerima koji su
navedeni u tabeli 3.3. Preskaleru se ne može direktno pristupiti, već se njegova konfiguracija obavlja posredno preko
T1CON registra.
Oscilator tajmera 1
RC0/T1OSO i RC1/T1OSI pinovi se koriste za registraciju impulsa koji dolaze od strane različitih vanjskih izvora
(drugih sklopova van mikrokontrolera). Ovi pinovi se takođe mogu koristiti i kao ulazi za LP (engl. Low Power) oscilator
(slika 3.36)
Tajmer 1 GATE funkcija je softverski konfigurabilna i može se dodijeliti T1G pinu ili izlazu komparatora C2.
Ova funkcija omogućava tajmeru 1 da direktno mjeri vrijeme trajanja nekog događaja (visok ili nizak logički nivo) koji je
uzrokovao promjenu na T1G pinu ili izlazu komparatora C2.
Za omogućavanje ove funkcije potrebno je izvršiti odgovarajuću konfiguraciju unutar T1CON registra
64
Primjer: upotreba tajmera 1 za generisanje prekida sa periodom od 1ms
//Timer1
//Fosc = 20MHz
//Uvećavanje vrijednosti tajmera se dešava na svaki 4-ti impuls Fosc (na 5MHz)
//Prescaler 1:1;
//Postavljena vrijednost tajmera 1 TMR1 = 60536, od ove vrijednosti počinje brojanje sve do overflova;
//Vrijeme ponavljanja prekida: 1 ms
void InitTimer1(){ //inicijalizacija tajmera 1
T1CON = 0x01; //konfigurisanje tajmera 1 kroz T1CON registar
TMR1IF_bit = 0; //inicijalno vraćanje zastavice prekida na nulu radi omogućavanja detekcije
//sljedeće prekida
TMR1H = 0xEC; //stavljanje vrijednosti u viši bajt tajmera 1 (prvi dio od 60536)
TMR1L = 0x78; //stavljanje vrijednosti u niži bajt tajmera 1 (drugi dio od 60536)
TMR1IE_bit = 1; //omogućavanje prekida
INTCON = 0xC0; //omogućavanje globalnih prekida i prekida perifernih jedinica
}
void Interrupt(){ //rutina za obradu prekida
if (TMR1IF_bit){ //da li se desio prekid?
TMR1IF_bit = 0; //zastavice prekida vraćena na nulu radi omogućavanja detekcije sljedeće prekida
TMR1H = 0xEC; //stavljanje vrijednosti u viši bajt tajmera 1 (prvi dio od 60536)
TMR1L = 0x78; //stavljanje vrijednosti u niži bajt tajmera 1 (drugi dio od 60536)
...
...
}
}
65
ANALOGNI MODUL MIKROKONTROLERA
Mikrokontroler PIC16F887 posjeduje 10-bitni A/D konvertor sa 14 pripadajućih ulaza (14 pinova je na raspolaganju kao
ulaz za A/D konvertor). Namjena mu je da pretvara analaogne signale iz okoline, u mikrokontroleru razumljiv digitalni
oblik signala.
Konvertor generira 10-bitni rezultat korištenjem metode sukcesivne aproksimacije (Digitalna tehnika) i sprema ga u
ADC registar (16-bitni registar sastavljen od dva 8-bitna registra ADRESL i ADRESH).
Minimalna rezolucija ili kvalitet konverzije za različite primjene određuje se selektovanjem interne naponske reference
Vref- i Vref+ (Slika. 3.37).
Kod dodijeljene naponske reference od 5V (Vref+=5V i Vref-=0V), postiže se rezolucija od 0,00488V = 4.8mV što
predstavlja najmanji naponski nivo koji 10-bitni A/D konvertor može izmjeriti.
Ova razina minimalnog naponskog signala je dovoljna za većinu primjena gdje se ne zahtijeva veoma visoka prciznost
u mjerenju reda uV i nV.
66
Funkcionisanje A/D konvertora unutar mikrokontrolera svodi se na korištenje četiri osnovna registra:
ADRESH – sadrži viši bajt rezultata konverzije
ADRESL – sadrži niži bajt rezultata konverzije
ADCON0 – kontrolni registar 0
ADCON1 – kontrolni registar 1
Na slici 3.38 prikazan je funkcionalni blok dijagram A/D konvertora sa kojeg se može protumačiti njegova osnovna
funkcionalna logika rada.
67
ADRESH i ADRESL registri
Rezultati dobiveni nakon koverzije analognog signala u digitalni 10-bitni broj, pohranjuju se u ADRESL i ADRESH
registre.
Postoje dva načina „rukovanja“ s dobivenim rezultatima:
lijevo poravnanje
desno poravnanje
Format konverzije rezultata određuje se pomoću ADFM bita unutar ADCON1 konfiguracijskog registra
68
ADCON0 registar
Predstavlja jedan od osnovnih konfiguracjskih registara pomoću kojeg se upravlja radom A/D konvertora.
0 0 Fosc/2
0 1 Fosc/8
1 0 Fosc/32
1 1 RC
CHS3-CHS0- Analog Chanel Select Bits: ovi bitovi služe za selektovanje pina/pinova koji će se koristiti za A/D
konverziju – za RA0/AN0 kombinacija je 0000 sve do RB5 za kojeg vrijedi kombinacija 1101. Kombinacije 1110 i
1111 služe za dodjeljivanje specijalnih internih referentnih napona A/D konvertoru (CVref i Vref=0.6V).
GO/DONE – A/D Conversion Status Bit: pokazuje trenutni status konverzije
○ 1 – A/D konverzija je u toku
○ 0 – A/D konverzija završena (automatsko se setuje na 0 nakon završene konverzije)
ADON – A/D On Bit: ovaj bit služi za omogućavanje A/D kovertora
○ 1 – A/D konvertor omogućen
○ 0 – A/D konvertor onemogućen
69
ADCON1 registar
Takođe, predstavlja jedan od osnovnih konfiguracjskih registara pomoću kojeg se upravlja radom A/D konvertora.
VCFG1- Voltage Reference Bit: selektuje negativnu naponsku referencu potrebnu za rad mikrokontrolera
○ 1 – negativna naponska referenca dovedena na Vref- pin
○ 0 – Vss se koristi kao negativna naponska referenca
VCFG0- Voltage Reference Bit: selektuje pozitivnu naponsku referencu potrebnu za rad mikrokontrolera
○ 1 – pozitivna naponska referenca dovedena na Vref+ pin
○ 0 – Vdd se koristi kao pozitivna naponska referenca
70
Zadatak: Opisati funkciju programskog koda. Napisati programske komentare. Koristiti MikroC kompajler.
unsigned int temp_res;
void main() {
ANSEL = 0x04;
TRISA = 0x04;
ANSELH = 0x00;
TRISC = 0x00;
TRISD = 0x00;
do {
temp_res = ADC_Read(2);
PORTC = temp_res;
PORTD = (temp_res >> 2) & 0b11000000;
} while(1);
}
D5
R9
300
LED-YELLOW
D6
R10
300
LED-YELLOW
D7
U1 R3
1 15 300
RV1 RE3/MCLR/VPP RC0/T1OSO/T1CKI
16 LED-YELLOW
RC1/T1OSI/CCP2
2 17
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1 D8
B1 3
RA1/AN1/C12IN1- RC3/SCK/SCL
18
R4
4 23
99%
5V RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24 300
RA3/AN3/VREF+/C1IN+ RC5/SDO
6 25 LED-YELLOW
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
1k 14
RA5/AN4/SS/C2OUT RC7/RX/DT D1
13
RA6/OSC2/CLKOUT
19
R1
RA7/OSC1/CLKIN RD0
20 300
RD1
+4.95 33 21 LED-YELLOW
RB0/AN12/INT RD2
34 22
Volts
35
RB1/AN10/C12IN3- RD3
27 D2
36
RB2/AN8 RD4
28
R2
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29 300
RB4/AN11 RD6/P1C
38 30 LED-YELLOW
39
RB5/AN13/T1G RD7/P1D D3
40
RB6/ICSPCLK
8
R5
RB7/ICSPDAT RE0/AN5
9 300
RE1/AN6
10 LED-YELLOW
RE2/AN7
PIC16F887 D4
R6
300
LED-YELLOW
D9
R7
300
LED-YELLOW
D10
R8
300
LED-YELLOW
71