Upravljanje D-A Konvertora Mikrokontrolerom

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 64

UVOD

Sistem oplemenjen mikrokontrolerom u potpunosti zamenjuje coveka,


malih je dimenzija i mala je potrosnja energije. Mikrokontroleri sve vise zalaze u
svaki segment covecanstva. Uredjaji novije generacije su nezamislivi bez
mikrokontrolera. Nalaze se svuda: u racunarau, u kucnim aparatima, na
profesionalnim uredjajima, na uredjajima zamernu tehniku i kontrolu...
Zahvaljuci cinjenici da mikrokontroler PIC16F877A firme Microchip
pretstavlja integraciju centralne procesorke jedinice (CPU), memorije i periferija,
ne zahteva se slozeni eksterni hardver da bi se realizovao mikroračunarski sistem.
Ovaj mikrokontroler je izradjen u CMOS tehnologiji sa ugradjenom FLASH i
EEPROM memorijom za memorisanje programa i podataka. PIC16F877A ima
tipicnu RISC arhtekturu. Ova arhitektura karakterise se manjim skupom
instrukcija koje se brze izvrsavaju od instrukcija kod CISC arhitekture.
U daljem tekstu cemo se truditi da detaljnije opisemo svaki deo sistema i
da pokazemo kako citav sistem radi. U prvom poglavlju reci cemo nesto vise o
samom mikrokontroleru PIC16F877. Drugi deo se bavi problematikom analogno-
digitalne konverzije,u trecem delu cemo detaljno opisan celokupni sistem. U
cetrvrtom delu prikaz je softver mikrokontrolera sa detaljnim komentarima. Bice
reci i o kompajlerima, njihovim manama i prednostima.
Napomenimo jos, da je prvobitni zadatak naseg sistema bio bezicna
komunikacija, koja bi se odvijala cipom RXQ1. Medjutim, u zavrsnoj fazi izrade
doslo je do promene plana, tako da smo uz minimalne hardverske izmene i
ponovnog pisanja celokupnog softvera realizovali generator funkcija.
1. Mikrokontroleri

1.1 Mikroprocesori u odnosu na mikrokontrolere

Da bi ukazali na to kakva razlika postoji izmedju mikroprocesora i


mikrokontrolera analiziracemo sliku 1.1 koja predstavlja jedan detaljan blok
dijagram mikroracunarskog sistema.
Dok je mikroprocesor (CPU) na jedinstvenom cipu sam, mikrokontroler, na
jedinstvenom cipu, sadrzi CPU, RAM i ROM memoriju i ostale ulazno-izlazno
orijentisane gradivne blokove (paralelni i serijski interfejsi, tajmeri, logika za
prihvatanje prekida, A/D i D/A konvertore i dr.).

Sl.1.1 Detaljni blok dijagram mikroracunarskog sistema

1.2 Mikroprocesori

Na slici 1.2 prikazan je blok dijagram mikroprocesora. CPU cine sledeci


blokovi: ALU, PC, SP, odredjeni broj radnih registara, kola za taktovanje i
sinhronizaciju i kola koja se koriste za prihvatanje zahteva za prekid.
Sl.1.2 Blok dijagram mikroprocesora(CPU-a)

Da bi se kompletirao mikroracunarski sistem pored mikroprocesora potrebno je


dodati ROM, RAM memorijske dekodere, oscilator, odredjeni broj ulazno-
izlaznih uredjaja, kakvi su paralelni i serijski portovi za podatke, A/D i D/A
konvertori i drugo. Pored ulazno-izlaznih uredjaja specijalne namene, cesto se
javlja i potreba da se ugrade i kontroleri prekida, DMA kontroleri, kao i
brojaci/tajmeri ciji je zadatak da oslobode CPU od obavljanja U/I aktivnosti.
Kada se u sistem instaliraju i uredjaji za masovno memorisanje (hard disk, CD
drajver), kao i tastatura, mis i CRT displej tada se taj ''mali racunar'' moze
koristiti za razlicite aplikacije opste namene.
Osnovna namena CPU-a je da pribavlja podatke, obavlja izracunavanja nad
podacima i memorise rezultate izracunavanja na disku kao i da za potrbe korisnika
prikaze te rezultate na displeju (CRT, TFT, LED i dr.). Programi koje koristi
mikroprocesor memorisani su na disku odakle se citaju i smestaju u RAM. Deo
programa, najcesce malog obima, se obicno smesta i u ROM-u.

1.3 Mikrokontroleri

Blok dijagram mikrokontrolera prikazan je na slici 1.3. Mikrokontroler je u


sustini pravi ''mali racunar'' na cipu, koji sadrzi sve gradivne blokove CPU-a
(ALU, PC, SP, registre i dr.), ali takodje i RAM, ROM, paralelne i seriske U/I
portove, generatore takta i dr.
Kao i mikroprocesor, i mikrokontroler je uredjaj opste namene, koji pribavlja
podatke, obavlja ogranicenu obradu nad tim podacima, i upravlja svojim
okruzenjem na osnovu rezultata izracunavanja. Mikrokontroler u toku svog rada
koristi fiksni program koji je smesten u ROM-u i koji se ne menja u toku zivotnog
veka sistema.

Sl.1.3 Blok dijagram mikrokontrolera


Mikrokontroler koristi ogranicen skup jedno- ili dvo-bajtnih instrukcija koje se
koriste za pribavljanje programa i podataka iz interne memorije. Veliki broj
ulazno-izlaznih pinova mikrokontrolera se moze koristiti za vise namena sto se
softverski definise.
Mikrokontroler komunicira sa spoljnim svetom (pribavlja i predaje podatke) preko
svojih pinova, pri cemu je arihitektura i skup instrukcija projektovan za
manipulisanje podacima obima bajt ili bit.

1.4 Razlike izmedju mikroprocesora i mikrokontrolera

Razlike su brojne ali one koje su najvaznije su sledece:


1. Mikroprocesori su najcesce CISC tipa. Za kopiranje podataka iz spoljne
memorije u CPU koriste veci broj op-kôdova, dok mikrokontroleri jedan
ili dva.
2. Za manipulisanje sa podacima tipa bit, mikroprocesori koriste jedan ili
dva tipa instrukcija, dok je kod mikrokontrolera taj broj veci.
3. Mikroprocesori su projektovani za brzi prenos podataka iz programa sa
spoljno adresiranih lokacija u cip, dok se kod mikrokontrolera brzi prenos
bitova obavlja u okviru cipa.
4. Mikrokontroler moze da funkcionise kao racunar bez dodataka spoljnih
gradivnih blokova (memorije i U/I uredjaja), dok operativnost
mikroprocesora bez spoljne memorije i U/I podsistema nije moguca.

1.6 Mikroracunar

Mikroracunar je sastavljen od tri osnovna dela: Procesor (CPU), U/I


podsistem i memoriski podsistem. Svaki deo moze varirati u kompleksnosti, od
osnovnog pa do jako slozenog. Ako je procesor realizovan na jedninstvenom cipu,
tada se on naziva mikroprocesor. Kada na jedinstvenom cipu postoji
mikroprocesor, i ograniceni iznos memorije i ulaza –izlaza tada se to integrisano
kolo naziva mikrokontroler. Na slici 1.4 prikazan je jedan tipican
mikroracunarski sistem.
Sl.1.4 Tipican mikroracunarski sistem

Ukazimo sada u kratkim crtama na strukturu i funkcije koje obavljaju osnovni


gradivni blokovi mikroracunarskog sistema:

Centralna procesorska jedinica (CPU) – srce sistema i moze biti realizovana kao
4, 8 ili16-bitna procesorska jedinica.

Memorija – moze biti RAM, ROM, EPROM, EEPROM i FLASH tipa ili bilo koja
njihova kombinacija. Memorija se koristiti za cuvanje programa i podataka.

Ulaz/Izlaz (U/I) – cine ga blokovi koji mogu da obavljaju digitalne, analogne i


specijalne funkcije. Preko ulazno-izlaznog podsistema mikrokontroler komunicira
sa spoljnim svetom.

1.7 Ostala kola za podrsku rada sistema

Oscilator –je taktni generator mikroracunar. Njegova uloga je da sinhrono


pobudjuje sva kola u okviru mikroracunarskog sistema. Oscilator moze biti
napravljen od diskretnih elemenata ili kao gotov modul.
Sistem za napajanje- moze biti izveden kao ispravljacka jedinica, autonomna
bateriska ili kombinacija. Jedinica za napajanje moze biti izvedena kao linearna
(konvertor je tipa AC-DC), kao prekidacki regulator tipa DC-DC konvertor(
konverzije tipa AC-DC-DC) ili neka kombinacija.

Pas-cuvar (watchdog timer)- koristi se kod sistema za rad u realnom vremenu da


obavesti procesor o tome da je istekao krajnji rok izvrsenja zadatka ili da aktivira
procesor iz stanja HALT u slucaju ako se rad procesora zaustavi kada se procita
neki pogresan op-kod ili dr.

1.8 Mikrokontroler PIC16F877

Kao sto je u uvodu naglaseno centralna komponenta naseg sistema je


mikrokontoler PIC16F877 firme Microchip. U ovom poglavlju cemo se truditi da
detaljnije opisemo ovo integrisano kolo.
Mikrokontroleri imaju integrisane sve gore pobrojane gradivne blokove: CPU,
memoriju, oscilator, watch-dog timer i U/I, integrisni su unutar samog cipa. I
pored prednosti koje se nude integracijom postoji jedan ozbiljan nedostatak koji se
ogleda u malom iznosu implementirane memorije (reda kB) i relativno skromnim
mogucnostima ulazno-izlaznog podsistema (dva do tri paralelna porta, do tri
tajmera, jedan do dva UART-a, jedan ADC).
PIC familija mikrokontrolera podrzava rad sa:
· velikim brojem U/I uredjaja (paralelni portovi,serijski portovi,LCD i dr.);
· memorijama razlicitog tipa (EEPROM, FLASH, RAM, ROM)

1.9 Osnovne karakteristike mikrokontrolera PIC16F877:

· Visoko performansni RISC CPU


· 35 instrukcija obima jedne reci
· Radna frekvencija ,fref = DC-20 MHz
· Trajanje taktnog intervala tcpu = 200 ns, kada je fref = 20 MHz
· Op-kôd obima14bita
· Harverski magacin sa osam nivoa
· Tri nacina adresiranja: -direktno
-indirektno
-relativno
· Programska memorija kapaciteta 8 kx14-bitnih reci realizovane u FLASH
tehnologiji
· Memorije za podatke tipa RAM kapaciteta 368x8 bita
· Memorije za podatke EEPROM tipa kapaciteta 256x8 bita
· Prekidi ( do 14 izvora prekida)
· U/I portovi: A,B,C,D,E
· Tri tajmera: -Timer0: 8-bitni tajmer/brojac dogadjaja
-Timer1: 16-bit tajmer/brojac dogadjaja
-Timer2: 8-bit tajmer/brojac dogadjaja
· 10-to bitni 8-kanalni Analogno-Digitalni (A/D) konvertor
· Seriska komunikacija: MSSP,USART
· Paralelna komunikacija: PSP
· Power-on Reset- reset pri ukljucenju napajanja(POR)
· Power-up timer-unosenje kasnjenja nakon ukljucenja napajanja (PWRT)
· Oscillator Start-up Timer-unosenje kasnjenja nakon stabilizovanja radne
frekvencije oscilatora(OST)
· Sleep -rezim rada za stednju energije
· Watchdog timer sa sopstvenim integrisanim RC oscilatorom za nezavisni
rad
· Izbor tipa oscilatora
· Mala potrosnja,velika brzina rada
· Radni napon od 2V do 5.5V
· Mala potrosnja 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
3. <1µA u standby nacinu rada

1.10 Kratak opis mikrokontrolera PIC16F877

Kao sto smo vec naglasili mikrokontroler PIC16F877 poseduje tipcnu RISC
arhitekturu. Arhitektura poseduje odvojene magistrale za podatke i programski
kôd. Obim podataka je 8-bitni, dok je programski kôd 14-bitni. Moguce je
protocno izvrsenje (pipelining). Sve insrukcije su istog obima (osim instrukcija
grananja) i izvsavaju se za cetiri taktna intervala. Dakle, ako koristimo oscilator
npr. od 20 MHz dobijamo da ciklus instrukcuije traje 200 ns. Sa blok dijagrama
(slika 1.5) mogu se uociti sledeci gradivni blokovi:
· Flash programska memorija – 8 kiloreci obima 14 bita
· RAM (File Registers) – 368 bajtova
· Aritmetičko-logička jedinica (ALU)
· Akumulator (Working Register)
· Hardverski magacin (Stack) organizivan u 8 nivoa
· EEPROM memorija podataka obima 256 bajtova
· Razne periferne jedinice (portovi, tajmeri, A/D konvertor, USART,...)
Sl.1.5 Blok dijagram mikrokontrolera PIC16F877

1.11 Raspored nozica

Jezgro mikrokontrolera PIC16F887 pakuje se u 40-pinsko DIP pakovanje ili


u 44-pinska kucista QFP i PLCC tipa. Na slici 1.6 prikazan je raspored nozica kod
40-to pinskog DIP pakovanja:
Sl.1.6 Raspored nozica mikrokontrolera PIC16F877

· Napajanje od +5V se dovodi na pinove VDD (11 i 32) a masa na pinove


VSS (12 i 31).
· Nozice OSC1 i OSC2 (pinovi 13 i 14) sluze za priklucivanje oscilatorskih
komponeti (RC-kolo ili kvarc).
· Pin 1 (MCLR/VPP) ima dvostruku ulogu. Standardno se koristi kao Reset,
a u procesu programiranja kao pin za dovodjenje visokog napona (13V).
· Ostalih 33 pina prestavljaju U/I linije. One su grupisane u pet portova
(PORTA-PORTE) i svaki od njih mozemo konfigurisati kao ulazni ili
izlazni. Osim opste namene vecina pinova ima i specificnu namenu koju
dobija u slucaju koriscenja nekih specijalnih periferija mikrokontrolera
(brojaca, ADC, serijske komunikacije).

1.12 Generator takta (Oscilator)

Moguce su cetri varijante u konfiguraciji oscilatora:


LP Low Power Crystal
XT Crystal / Resonator
HS High Speed Crystal / Resonator
RC Resistor/Capacitor
Kontroler moze da radi i na 32 kHz i tada ima jako malu potrosnju.
Najednostavnija varijanta je RC oscilator (slika 1.7).Ova varijanta oscilatora moze
se koristiti u aplikacijama gde se precizna procena vremenskih intervala ne
zahteva.

Sl.1.7 Nacin povezivanja RC oscilatora

Frekfencja oscilovanja zavisi od napona napajanja, vrednosti Rext i Cext ,kao i


radne temperature.
Rext treba da je u granicama od 5k do 100k. Van ovog opsega rad oscilatora
postaje nestabilan i osetljiv na spoljne uticaje.
Cext se moze i izostaviti, ali zbog stabilnosti se preporucuje 20pF.
Na OSC2/CLKOUT generise se taktni impuls cija je perioda cetiri puta veca od
periode oscilatora.

Kod vremenski kriticnih aplikacija treba ugradjivati kvarcni oscilator ili keramicki
rezonator. Vrednosti kondenzatora C1 i C2 (slika 1.8), treba da su jednake.

Sl.1.8 Nacin povezivanja XT oscilatora

Preporuka proizvodjaca za vrednosti C1 i C2 kod nekih konfiguracija je:

Tabela 1.1
LP
32 kHz 68-100pF - Kristal
200 kHz 15-33pF - Kristal

Tabela 1.2
XT
100 kHz 100-150pF - Kristal
455 kHz 47-100pF Rezonator -
2.0 MHz 15-33pF Rezonator Kristal
4.0 MHz 15-33pF Rezonator Kristal

Tabela 1.3
HS
4.0 MHz 15-33pF - Kristal
8.0 MHz 15-33pF Rezonator Kristal
10.0MHz 15-33pF Rezonator Kristal

Moguce je i da se oscilacije dovode iz nekog spoljnjeg izvora kao sto je prikazano


na slici 1.9:

Sl.1.9.Nacin povezivanja spoljnjeg oscilatora

Najcesce se koristi spoljni kristalni oscilator (XT) radne frekvencije 4MHz. Bice
prikazano kako se spaja kristalni oscilator sa mikrokontrolerom (slika 1.10) i kako
izgleda oblik signala generisan iz oscilatora u trenutku ukljucenja (slika 1.11).
Oscilatoru treba neko vreme ΔT da se stabilizira na potrebnu frekvenciju i
amplitudu

Sl.1.10 Spajanje kristalnog oscilatora Sl.1.11 Oblik signala pri ukljucenju


oscilatora
1.13 Takt/instrukciski ciklus

Takt koji se dovodi na nozice oscilatora OSC1 u mikrokontroleru se deli


na cetiri vremenski nepreklapajuca taktna signala nazvana Q1,Q2,Q3 i Q4. Skup
ovih signala cine jedan instrukciski ciklus (slika 1.12a). U zavisnosti od trenutka
generisanja u okviru ciklusa instrukcija taktni signali Q1-Q4 se koriste za sledece
namene:
· Q1-pribavljanje instrukcije iz programske memorije
· Q2-dekodiranje naredbe iz prethodnog instrukciskog ciklusa
· Q3-izvrsenje naredbe iz prethodna dva instrukciska ciklusa
· Q4-prenos op-kôda naredbe pozvane u Q1 u instrukcijski registar.
Uzmimo za primer instrukciski ciklus TCY2 (slika 1.12a). U toku taktnog impulsa
Q1 instrukcijskog ciklusa TYC2, stanje programskog brojaca (PC) se uvecava za
1 i pribavlja naredna instrukciju iz programske memorije. U toku intervala Q2
dekodira se instrukcija pribavljena u TCY1, a u toku Q3 se izvrsava instrukcija
pribavljena u TCY0. U cetvrtom taktu Q4 instrukciskog ciklusa TCY2 se,
instrukcija pribavljena u toku Q1, prebacuje se u instrukciski registar.

Sl.1.12 Vremenski dijagram i protocnost kod izvrsavanja instrukcije


a).Vremenski dijagram

Sl 1.12 b) Protocnost kod izvrsenja sekvence instrukcije

Na slici 1.12b prikazan je protocni nacin izvrsenja sekvence od 5 instrukcija. Kao


sto se vidi sa slika 1.12b postoje dva stepena u protocnoj obradi. Prvi se odnosi na
pribavljanje, a drugi na izvrsenje. Neka je protocni sistem inicijalno prazan. U
toku TCY0 pribavlja se instrukcija sa labele 1 tipa MOVLW 55h. U toku TCY1
izvrsava se instrukcija sa labele 1 i pribavlja instrukcija sa labele 2 tipa MOVWF
PORTB. U toku TCY2 pribavlja se instrukcija sa labele 3 koja je tipa CALL
SUB_1 i pretstavlja poziv potprograma 1, i izvrsava se instrukcija sa labele 2. U
toku TCY3 pribavlja se instrukcija sa labele 4 tipa BSF PORTA, BIT3 i izvrsava
insrukcija sa labele 3. Napomenimo da je instrukcija sa labele 3 tipa bezuslovno
grananje tako da, u principu, efekat izvrsenja instrukcije sa labele 4 ne treba da
bude vidljiv,tj. ona treba da pretstavlja neku operaciju tipa NOP (da ne menja
statusne markere procesora kao i stanja procesora). Nakon izvrsenja instrukcije
CALL SUB_1 vrednost programskog brojaca se postavlja na adresu insrukcije
koja se nalazi na labeli 5. U toku TCY4 pribavlja se instrukcija sa labele 5 tipa
Instruction @ address SUB_1 (prva naredba potprograma), a izvrsava instrukcija
na labeli 4 koja je sa stanovista procesora i programa operacija tipa NOP. U
TCY5 pribavlja se druga naredba potprograma i izvrsava prava.

1.14 Reset

Reset sluzi da bi sve registre mikrokontrolera doveli u pocetni polozaj. Ako


se mikrokontroler “zakoci” ,ili smo ga tek ukljucili, treba ga resetovati. Da bi
sprecili slucajno dovodjenje “0” na MCLR nozicu, porebno ju je preko otpornika
povezati na pol napajanja Vdd (slika 1.13)

Sl.1.13. Povezivanje kola za reset

Postoji vise vrste reseta kod PIC16F877A mikrokontrolera:


· Power-on reset (POR)
· MCLR Reset pri normalnom radu
· MCLR Reset prilikom SLEEP rezima rada
· WDT Reset pri normalnom radu
· WDT Wake-up (budjenje iz SLEEP rezima rada)
· Brown-out Reset (BOR)
Power-on reset (POR) impuls se generise u samom kolu kada se detektuje porast
napona napajanja (oko 1,2 – 1,7 V). Da bi se POR iskoristio dovoljno je MCLR
nozicu prikljuciti na Vdd direktno ili preko otpornika (sl. 1.10). Ukoliko je porast
napona napajnja spor neophodno je na MCLR postaviti spoljnje kolo za reset.
Sema kola za POR reset je prikazana na slici 1.14.

Sl.1.14 Spoljasnje kolo za reset


Interno POR kolo nece generisati Reset signal kad napon napajanja padne ispod
minimuma. Za situacije kada je moguca pojava BROWN-OUT-a (privremeni pad
napona ispod Vmin) prebno je napraviti spoljnje Brown-out reset kolo,sto je
prikazano na slici 1.15.

Sl.1.15.Kolo za BROWN-OUT reset Varijanta 1

Kolo ce generisati Reset impuls kada napon bude ispod (Vz + 0.7) V
Vz – napon na Zener diodi.
Sl.1.16. Kolo za BROWN-OUT reset Varijanta 2

Uslov da tranzistor iskljuci je:

R1
Vdd * < 0.7 V
R2 + R1

Power-up Timer (PWRT) generise impuls fiksne sirine (nominalno 72 msec) od


pojave impulsa POR-a. Za to vreme ce kontroler biti je u Reset stanju. Za ovaj
vremenski period se obezbedjuje da napon napajanja dostigne nominalnu
vrednost. Tajmeru PWRT se dozvoljava rad setovanjem PWRTE bita koji
pripada konfiguracionoj reci u fazi programiranja cipa. PWRT se taktuje
internim RC oscilator.
Oscilator Start-up Timer (OST) obezbedjuje kasnjenje od 1024 taktnih intervala
nakon isteka kvazistabilne periode PWRT-a (vidi tabelu 1.4). Ovo obezbedjuje da
kristalni oscilator ili rezonator startuju stabilnom frekvencijom. OST se aktivira
samo kod XT, LP i HS rezima rada i to pri:
· POR, i
· budjenju iz SLEEP rezima rada.

Mikrokontroler PIC16F877 ima implementiran dvo-bitni statusni registar nazvan


PCON (Power Control Register). Prvi bit nazvan POR setuje se kada se aktivira
Power-on-Reset a resetuje se kada je se aktivira neki drugi Reset. Drugi bit (BOR)
kada je setovan ukazuje da je aktivan Brown-out stanja (nepropisana naponska
stajna u napajanju mikrokontrolera), zbog kojeg se takodje može aktivirati Reset.

Tabela 1.4
Power-up
Konfiguracija PWRT omogucen PWRT Budjenje iz
oscilatora onemogucen SLEEP rezima
rada
XT, HS, LP 72 ms + 1024 1024 Tosc 1024 Tosc
Tosc
RC 72 ms - -

Stanja na kojima se postavljaju interni registri CPU-a nakon Reseta zavisi od vrste
Reseta i rezima rada u kojima se nalazi procesor (Sleep i normalni).
Stanje nekih registara ostaje nedifinisano, neki zadrzavaju svoje stanje, a ostali se
postavljaju u unapred definisana stanja (vidi Tabele 1.5 i 1.6).

Tabela 1.5: Postavljanje registara nakon reseta


Program Counter STATUS reg.
Power-on reset (POR) 000h 0001 1xxx
MCLR reset pri
000h 000u uuuu
normalnom radu
MCLR reset prilikom
000h 0001 0uuu
SLEEP rezima rada
WDT Reset pri
000h 0000 1uuu
normalnom radu
WDT Wake-up (budjenje
PC+1 uuu0 0uuu
iz SLEEP rezima rada)
Interapt 004h uuu1 0uuu

Tabela 1.6: Postavljanje registara nakon reseta


MCLR reset pri:
Budjenje iz
-normalnom radu
SLEEP
Registar Power-on reset -SLEEP mod
-interapt
WDT reset pri
-WDT time out
normalnom radu
00h INDF ---- ---- ---- ---- ---- ----
01h TMR0 xxxx xxxx uuuu uuuu uuuu uuuu
02h PCL 0000 0000 0000 0000 PC+1
03h STATUS 0001 1xxx 000q quuu uuuq quuu
04h FSR xxxx xxxx uuuu uuuu uuuu uuuu
05h PORTA ---x xxxx ---u uuuu ---u uuuu
06h PORTB xxxx xxxx uuuu uuuu uuuu uuuu
08h EEDATA xxxx xxxx uuuu uuuu uuuu uuuu
09h EEADR xxxx xxxx uuuu uuuu uuuu uuuu
0Ah PCLATH ---0 0000 ---0 0000 ---u uuuu
0Bh INTCON 0000 000x 0000 000u uuuu uuuu
80h INDF ---- ---- ---- ---- ---- ----
81h OPTION 1111 1111 1111 1111 uuuu uuuu
82h PCL 0000 0000 0000 0000 PC+1
83h STATUS 0001 1xxx 000q quuu uuuq uuuu
84h FSR xxxx xxxx uuuu uuuu uuuu uuuu
85h TRISA ---1 1111 ---1 1111 ---u uuuu
86h TRISB 1111 1111 1111 1111 uuuu uuuu
88h EECON1 ---0 x000 ---0 q000 ---0 uuuu
89h EECON2 ---- ---- ---- ---- ---- ----
8Ah PCLATH ---0 0000 ---0 0000 ---u uuuu
8Bh INTCON 0000 000x 0000 000u uuuu uuuu

Legenda:
x – Nepoznato stanje
u – Nepromenjeno stanje
q – Stanje zavisi od uslova
- - Ne postoji fizicki cita se kao 0

Struktura Reset logike za PIC 16F877A data je na slici 1.17:

Sl.1.17 Blok dijagram Reseta

1.15 Watchdog timer

Watchdog timer (WDT) taktuje se nezavisanim RC oscilatorom koji radi


cak i kad je zaustavljen rad glavnog oscilatora, u SLEEP rezimu rada, povezan na
OSC1/CLKIN i OSC2/CLKOUT pinove.
Prekoracenje intervala brojanja WDT-a, prilikom normalnog rada, izaziva RESET
kontrolera. Ako je kontroler bio u SLEEP rezimu rada prekoracenje tajmera ce
probuditi kontroler i program ce nastaviti sa radom u normalnom rezimu.
Iskljucivanje WDT-a se vrsi resetovanjem WDTE bita u konfiguracionoj reci.

Nominalno vreme WDT-a je 18 ms bez uptrebe preskalera. Ovo vreme moze da


varira od kola do kola zbog temperature i slicno. Ukoliko je potrebno duze vreme
moze se WDT-u pridruziti preskaler sa faktorom deljenja do 1:128, tako se vreme
moze produziti do 2,3 s.
Instrukcije CLRWDT i SLEEP resetuju WDT.
TO’ bit u STATUS registru ce biti 0 nakon isteka WDT.

1.16 Prekidi

Mikrokontroler PIC16F877 podrzava tehniku rada sa prekidima (interrupts).


Postoji ukupno 14 izvora pekida, neki su interni, a drugi su eksterni. Svaki prekid
nema sopstveni vektor-broj. Kada se prihvati zahtev za prekid izvrsenje
prekidnog programa pocinje od adrese 0x0004. Tada se programskim putem
testira stanje markera koji se postavljaju kada se aktivira odgovarajuci prekid
(interrupt flags polling). Kada se ustanovi koji je od uredjaja generisao zahtev za
prekid prelazi se na izvrsenje odgovarajuce rutine za obradu tog prekida.
Povratna adresa prekinutog programana cuva se automatski u hardverski magacin.
Povratak iz prekidnog programa se vrsi instrukcijom RETFIE. Upravljacki
registar INTCON se koristi za maskiranje prekida.
Pregled sadrzaja marker bitova kojim se generise zahtev za prekid je definisan na
slici 1.18. Znacenje pojedinih markera je sledece:
· T0IF (INTCON:2) setuje se na prekoracenje Timer0
· INTF (INTCON:1) setuje se u slucaju da nastupi spoljni prekid na pinu
RBO/INT
· RBIF (INTCON:0) setuje se kada se dogodi promena stanja na nekom od
pinova RB4, RB5, RB6, RB7
· PSPIF (PIR1:7) PSP marker bit koji se koristi u opreciji citanja i upisa na
PORTD kada je on konfigurisan kao PSP
· ADIF (PIR1:6) marker koji se koristi za vreme analogno-digitalne
konverzije
· RCIF (PIR1:5) marker koji oznacava da je prijemni bafer koji koji koristi
USART blok, pun
· TXIF (PIR1:4) marker koji pokazuje da je bafer za slanje podataka koji
koristi USART prazan
· SSPIF (PIR1:3) marker koji se koristi za rad sinhronog serijskog porta
· CCP1IF (PIR1:2) marker koji koristi CCP1 blok
· TMR2IF (PIR1:1) marker koji setije Timer2 kada dodje do prkoracenja
· TMR1IF (PIR1:0) marker koji setije Timer2 kada dodje do prkoracenja
· EEIF (PIR2:4) marker koji se setuje kada se zavrsi upis u interni
EEPROM
· BCLIF (PIR2:3) marker koji koji korist SSP blok kada je konfigurisan da
radi u I2C master rezimu rada
· CCP2IF (PIR2:0) marker koji koristi CCP2 blok.
Pored bita za dozvolu rada svih prekida General Interrupt Enable (GIE) i bita za
dozvolu rada prekida generisanih od strane periferija (PEIE), ovom registru
pripadaju i markeri prekida (interrupt-flags) i bitovi koji dozvoljavaju prekid koji
izaziva tajmer0, spoljasnji prekid na pinu RB0/INT i prekida porta B na promenu
stanja. Osim ova tri osnovna prekida postoji jos 11 periferijskih prekida. Bitovi za
njihovo omogucenje nalaze se u registrima PIE1 i PIE2, a korespodentni flegovi,
u registrima PIR1 i PIR2. Ovi se flegovi setuju cim se ispuni uslov interapta bez
obzira na stanje njihovog bita omogucenja, a po izvrsenju servis rutine potrebno ih
je soſtverski resetovati.
Na sledecoj slici (sl. 1.18) prikazana je logicka sema svih interrupt-a sa tabelom
u kojoj su oni pobrojani:
Sl.1.18 Sema logike za prihvatanje zahteva za prekid i sadrzaj

1.17 U/I Portovi

Za vezu mikrokontrolera sa spoljnim svetom zaduzeni su ulazno/izlazni


portovi. Ima ih pet i oznaceni kao PORTA, PORTB, PORTC, PORTD i PORTE.
Razlicitog su obima. PORTE cine tri pina, PORTA sest, a ostala tri porta su
osmopinski. Odredjeni pinovi U/I portova u zavisnosti od rezima rada mogu da
imaju fiksne ili promenljive funkcije. Konfiguracija smera prenosa na
odgovarajucoj bit poziciji porta vrsi se upisom konfiguracione reci u pripadajuci
TRIS registar pri cemu nula konfigurise pin kao izlazni, a jedinica kao ulazni.
Svaki port poseduje odgovarajuci registar podataka (PORTX) preko kojeg se
programski pristupa U/I pinovima. Upis u neki od tih registara inicirace upis u lec
tog porta, a njegovo citanje rezultirace citanjem logickih stanja direktno sa pinova.
Sve instrukcije upisivanja su tzv. read-modify-write instrukcije. To znaci da se pri
upisu u port prvo ocitaju stanja pinova, izvrsi modifikacija, a potom ispravljena
vrednost upise u lec porta. Nema velike razlike u elektricnoj konstrukciji
navedenih pet portova. Port B se od ostalih razlikuje posebnom opcijom koju nude
cetiri MSB. Ukoliko se setuje bit RBIE u registru INTCON, svaka promena stanja
na ovim pinovima generisace prekid mikrokontrolera.

Port A

Port A je 6-to bitni bidirekcioni port i sadrzi pinove od RA0 do RA5. TRISA je
direkcioni registar koji odredjuje smer pinova na portu. Ako postavimo TRIS na 1
pin je ulazni, u suprotnom pin je izlazni. Npr. ako je TRISA=0b111111 ceo port A
je ulazni, a ako je TRISA=0b000000, ceo port A je izlazni. Moguce je podeliti
port A, tako da, na primer, prva 2 bita budu ulazna,a ostala 4 izlazna
(TRISA=0b110000).
Na slikama 1.19 i 1.20 bice prikazan blok dijagram porta A:

Sl.1.19 Port A od RA0 do RA3 i RA5 Sl.1.20 Pin RA4 na portu A

Pin RA4 je izlaz sa otvorenim drejnom pa se zahteva od projektanta da veze


otpornik odgovarajuce vrednosti za pozitivan napon. Pri tome mora se voditi
racuna o strujnom ogranicenju pina o cemu ce biti kasnije reci. Ceo port A ima
mogucnost analogno-digitalne konverzije i prvenstveno se korisi u te svrhe. A/D
konvertor je 10-to bitni sa 8 ulaznih kanala, jer se u ove svrhe korite i svi pinovi
na portu E (i pinovi porta A od RA0 do RA3 i pin RA5). Pin RA4 moze da se
izkoristi za ulaznu frekvenciju timer0. Timer0 moze da se okida preko ovog pina
na rastucu ili opadajucu ivicu ulaznog signala, sto se odradjuje selekcijom bita
T0SE u registru OPTION.
Na slici 1.21 dat je tabelarni prikaz funkcija pojedinih pinova porta A i registri
koji se koriste za konfigurisanje porta:

Sl.1.21 tabelarni prikaz registara za konfigurisanje porta A


Port B

Port B je 8-mo bitni bidirekcioni port. Svi pinovi imaju odgovarajuce bitove u
TRISB registru kojim moze da se pinovi konfigurisu kao izlazni ili kao ulazni. ‘1’
u nekom bitu u TRISB registru stavlja odgovarajuci pin u stanje visoke impedanse
i on radi kao ulazni pin. ‘0’ u TRISB registru prosledjuje sadrzaj bita iz izlaznog
(latch) registra na pin i on radi kao izlazni.
Svi pinovi u PORTB imaju pull-up otpornike. Ovi otpornici se mogu ukljuciti
jednim kontrolnim bitom. To se radi stavljanjem RBPU' bita na ‘0’. Pull-up
otpornici se automatski iskljucuju kad se pin konfigurise kao izlazni. Otpornici su
iskljuceni kod Power-on-reset-a.
Cetri pina na PORTB (RB7-RB4) imaju mogucnost generisanja interapta. Samo
pinovi definisani kao ulazni mogu prouzrokovati interapt. Vrednost na pinovima
se poredi sa starom vrednoscu uhvacenoj kod zadnjeg citanja porta B. Nad ovim
vrednostima se vrsi OR operacija da bi se generisao interapt na promenu stanaja
na PORTB. Ovaj interapt moze probuditi kontroler iz SLEEP rezim rada. Korisnik
moze u rutini za obradu prekida ponistiti prekid sledecim postupcima:
· Citanjem ili pisanjem u PORTB. Ovo ce ukloniti neslaganje na portu i
uslov za interapt.
· Resetovanjem flag bita RBIF.
Neslaganje na portu B ce nastaviti da setuje RBIF. Citanje PORTB-a ce prekinuti
neslaganje i uslov za interapt i omoguciti resetovanje bita RBIF
Kombinacija interapta na promennu stanja PORTB i pull up otpornika se moze
iskoristiti za jednostavan interfejs za tastaturu.
Da bi promena na U/I pinu bila prepoznata sirina impusa mora da bude najmanje
koliko i jedan masinski ciklus (4 * Tosc).
Na slikama 1.22 i 1.23 prikazana je struktura PORTB.

Sl.1.22 Struktura pinova od RB0 do RB3 Sl.1.23 Struktura pinova od RB4 do RB7
Na slici 1.24 su prikazane tabele sa funkcijama pojedinih pinova i registara koji
se koriste za konfigurisanje porta B.

Sl.1.24 Tabela registara koji sluze za konfigurisanje PORTB.

Pin RB0 ima mogucnost da izazove prekid mikrokontrolera. Ako je ovaj interapt
omogucen (setovan bit 4 (INTE) u INTCON registru) i na RB0/INT pinu se pojavi
odgovarajuca ivica (definisana INTEDG bitom OPTION registra) nastupice
interapt. Na kraju interapt rutine potrebno je u programu resetovati INTF bit u
INTCON registru, kako bi naredni interapt bio moguc.

Port C

Port C je 8-mo bitni bidirekcioni port. Ovaj port je poseban sto na pinovima RC6 i
RC7 ima ugradjen USART modul koji sluzi za serisku komunikaciju (npr. sa
racunarom). Prilikom koriscenja modula za serisku komunikaciju potrebno je
softverski konfigurisati pinove RC6 i RC7 tako da budu u funkciji USART
modula. Na slikama 1.25 i 1.26 su prikazane blok seme PORTC, a funkcionalna
tabela registara koji se koriste za konfigurisanje samog porta data je na slici 1.27.
Sl.1.25. Struktura pinova od RC0 do RC2 Sl.1.26.Struktura pinova od RC3 i
i od RC5 do RC7 RC4
Sl.1.27 Tabela registara koji sluze za konfigurisanje PORTC

Port D

Port D je 8-mo bitni bidirekcioni port. Ovaj port se moze konfigurisati kao 8-mo bitni
paralelni mikroprocesorski port (parallel slave port-PSP), podesavanjem
konfigurisuceg bita PSPMOTE (TRISC<4>). U tom rezimu rada ulazni bafer je TTL
tipa. Na slikama 1.28 i 1.29 je prikazana blok sema PORTD i funkcionalna tabela
registara koji se koriste za konfigurisanje samog porta.

Sl.1.28. Struktura porta D


Sl.1.29 Tabela registara koji sluze za konfigurisanje PORTD

Port E

Port E je sirine 3 bita.Ima mogucnost A/D konverzije. Svaki pin porta E moze da se
konfigurise softverski kao ulazni ili izlazni. Ulazni bafer je Schmitt Trigger tipa.
Pinovi se mogu konfigurisati kao digitalni ili analogni,kao i u slucaju porta A, sto je
vec pomenuto. Na slikama 1.30 i 1.31 prikazana je strukturna blok sema PORTE i
tabelarni prikaz registara koji sluze za konfigurisanje.

Sl.1.30 Struktura porta E


Sl.1.31 Tabela registara koji sluze za konfigurisanje porta

1.18 A/D konverzija

S obzirom na kontinualnost pojava u spoljasnjem svetu, tesko je upravljati bilo


kojim procesom bez digitalizacije analognih velicina. Kao sto smo vec napomenuli
PORTA i PORTE imaju mogucnost A/D konverzije sto podrazumeva da se mogu
konfigurisati kao analogni ili digitalni. Ako zelimo da koristimo A/D konverziju
moramo ukljuciti modul za tu svrhu i podesiti ga na nacin koji nam najvise odgovara.
Da bi to uradili potrbno je da pravilno podesimo registre ADCON0 i ADCON1. Zato
u nastavku dajemo prikaz tih registara i prikaz tabele koji su potrebni za
konfigurisanje. Na slici 1.32 je prikazan je registar ADCON0. Registar ADCON0
sluzi za podesavanje A/D konverzije: frekvencije semplovanja A/D konvertora, kanal
koji se koristi za A/D konverziju, pocetak A/D konverzije i ukljucuje se modul za A/D
konverziju. Registrom ADCON1 (na slici 1.33) odredjujemo ulogu pojedinih pinova
(analogni ili digitalni). Modul za A/D konverziju se bazira na A/D konvertor sa
sukcesivni aproksimacijama.
Sl.1
.32 Registar za podesavanje A/D konverzije
Sl.1.33 Podesavanje tipa kanala (analogni/digitalni)

1.19 Strujna,naponska i temperaturna ogranicenja

U tabeli 1.7 dat je pregled strujnih, naponskih i temperaturnih ogranicenja


mikrokontrolera i pojedinih portova.

Tabela 1.7: Strujna,naponska i temperaturna ogranicenja mikrokontrolera


Radna temperatura ambijenta -55 do +125ºC
Napon na pojedinim pinovima u odnosu na Vss (bez Vdd, -0.3V do(Vdd+0.3)
MCLR i RA4)
Temperatura cuvanja mikrokontrolera -65 do +150ºC
Napon Vdd u odnosu na Vss -0.3V do +7.5V
Napon na MCLR u odnosu na Vss 0 do +14V
Napon na RA4 u odnosu na Vss 0 do +8.5 V
Ukupna disipacija 1W
Maksimalna izlazna struja na pinu Vss 300mA
Maksimalna ulazna struja na pinu Vdd 250mA
Ulazna struja kroz klamp diode IIK (VI < 0 ili VI > VDD) +/- 20mA
Izlazna struja kroz klamp diode IOK (VO < 0 or VO > VDD) +/- 20mA
Maksimalna struja koju moze da primi jedan pin 25mA
Maksimalna struja koju moze da da svaki pin 25mA
Maksimalna struja koju moze port da primi(port A,B,C,D i E) 200mA
Maksimalna struja koju moze port da da (port A,B,C,D i E) 200mA

1.20 Organizacija memorije

Strukturu memorije ovog mikrokontrolera cine tri odvojena bloka:


1. Programska memorija
2. Memorija podataka
3. EEPROM memorija podataka

Odvojeno od nabrojanoh memorijskih blokova egzistira zasebna struktura magacina


(Stack), koji se satoji od osam 13-bitnih registara. Stack pointer se ne moze citati, niti
se u njega moze upisivati. Prilikom izvrsenja instrukcije CALL ili prilikom poziva
prekida mikrokontrolera, adresa sledece instrukcije se stavlja na magacin. Magacin
radi na principu ciklicnog bafera, sto znaci da se u njega mogu staviti osam razlicitih
adresa, a da se upisom devete brise prva i tako redom. Programski se ne moze utvrditi
da li je doslo do prepunjeja steka.

Organizcija programske memorije

PIC16F877 imaju 13-bitni programski brojac (PC) koji je u mogucnosti da adresira


memorijski prostor od 8k programskih reci od 14 bita. Reset vektor je 0x0000 i od
njega pocinje izvrsavanje programa. Interapt vektor je 0x0004. Mapa programske
memorije i magacin prikazani su na slici 1.34.
Sl.1.34 Mapa programske memorije i stack

Organizacija memorije podataka

Memorija za podatke je izdeljena u vise celina–banki (banks), a sastoji se od registara


opste namene (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 sluze za odabir zeljene banke podataka po principu
prikazanom na slici 1.35.

Sl.1.35.Nacin kodovanja Bank


Svaka banka moze da sadrzi do 128 registara (0x7F). Nize lokacije u banci zauzimaju
specijalni regisri, a ostatak prostora popunjavaju registri opste namene implementirani
kao staticki RAM. Neki specijalni registri koji se cesto koriste mapirani su u sve
banke da bi se omogućio brzi pristup i redukcija kôda. Mapa registara
mikrokontrolera PIC16F877 prikazana je na slici 1.36. Nekoliko specijalnih registara
su registri jezgra, usko povezani sa funkcionisanjem CPU. Ostali registri su vezani za
periferne module i sluze njihovom upravljanju i kontroli statusa.

Programski brojac (PC) odredjuje adresu instrukcije u programskom flesu koja ce


sledeca biti pribavljena. Rec je o 13-bitnom registru. Simbolicko ime nizeg bajta je
PCL. To je registar koji se moze i upisivati i iscitavati. Težih pet bita programskog
brojaca smesteni su u izolovani registar PCH kojem se pristupa samo preko leca
PCLATH mapiranom u internom RAM-u na adresi 0x0A.

STATUS registar je veoma bitan i zato je predvidjeno da se moze adresirati iz bilo


koje banke. On pokazuje status aritmeticko-logicke jedinice, reset status
mikrokontrolera i sadrzi bite za selekciju banki internog RAM-a. Od navedenih
flegova posebno treba izdvojiti Zero bit (Z) koji se postavlja kad je rezultat
aritmeticke operacije jednak nuli i bit prenosa/pozajmice Carry (C).

Registar OPTION_REG se koristi za konfiguraciju preskalera za tajmer 0 ili


Watchdog, za upravljanje tajmerom0, selekciju ivice okidanja eksternog interapta, i za
omogucavanje Pull-up otpornika na portu B.

Kada je rec o registrima jezgra ne treba zaboraviti par FSR (File Select Register) i
INDF (Indirect File), koji sluze za indirektno adresiranje memorije podataka. Bilo
koja instrukcija koja se obraca INDF registru ustvari indirektno pristupa onoj lokaciji
internog RAM-a cija je adresa trenutno u registru FSR.
Sl.1.36 Mapa registra PIC16F877
Interni EEPROM za podatke

Ako je potrebno neke podatke sacuvati i po ukidanju napajanja mikrokontrolera, treba


ih prethodno zapisati u interni EEPROM. Ova memorija sadrzi 256 bajtova.

1.21 Tajmeri

Ove se periferije koriste za merenje vremena i brojanje eksternih dogadjaja.


Ugradjena su tri tajmerska modula (TIMER 0,1,2) i svaki ima svoje specificnosti.
Tajmer0 je jednostavni 8-bitni brojač koji generise interapt pri prelasku sa 0xFF na
0x00 (overflow). Poseduju ga svi nizi PICmicro™ procesori i ovde je zadrzana
kompatibilnost s njima. Izvor takta za tajmer0 moze biti bilo interni sistemski sat
(Fosc/4), bilo spoljni generator takta spojen na pin RA4/T0CKI. Moguce je podesiti
da se brojac inkrementira na rastucu ili opadajucu ivicu spoljnjeg signala. U
kombinaciji sa modulom tajmera 0 moze se koristiti programabilni preskaler (delilac
frekvencije) sa odnosima deljenja od 1:2 do 1:256. Ukoliko deljenje nije potrebno
preskaler se dodeli watchdog tajmeru. Kada je preskaler u upotrebi maksimalna
frekvencija eksternog izvora iznosi 50 MHz sto je vece od maksimalne frekvencije
samog mikrokontrolera.
Tajmer1 je 16-bitni i takodje je osposobljen da radi kao brojac ili merac vremena.
Ima tri izvora takta: sistemski sat (Fosc/4), spoljasnji takt ili spoljasnji kristal. Brojac
eksternih dogadjaja moze se sinhronizovati sa internim oscilatorom, a postoji i
asinhroni nacin rada koji omogucuje da se brojac inkrementira i u sleep rezimu.
Preskaliranje je upotrebljivo sa vrednostima deljenja 1:1, 1:2, 1:4 i 1:8.
Tajmer2 je 8-bitni tajmer sa programabilnim preskalerom i postskalerom. Moze biti
tajmer/brojac opste namene. Medjutim, potreban je CCP modulu prilikom generisanja
PWM signala i modulu za sinhronu serijsku komunikaciju (SSP) kao Baud Rate
generator. U kooperaciji sa tajmerom 2 koristi se registar PR2 (Period Register). Kada
se vrednost brojaca izjednaci sa vrednoscu upisanom u registar PR2, generise se
odgovarajuci interapt.

1.22 CCP moduli

CCP je skracenica za Compare/Capture/PWM. PIC16F877 poseduje dva


ovakva modula koji mu pomazu da se lakse nosi sa raznim zahtevima real-time
aplikacija. U rezimu rada Capture kada se desi dogadjaj na pinu RC2/CCP1 16-bitna
vrednost tajmera 1 preslikava se u registre CCPR1H:CCPR1L. Istovremeno se setuje
korespondentni interapt fleg u registru PIR1. Da bi ova operacija bila uspesna tajmer1
mora raditi u tajmerskom rezimu ili rezimu sinhronizovanog brojanja.
U rezumu rada Compare 16-bitna vrednost registra CCPR1 se stalno poredi sa
vrijednoscu para registara tajmera1. Kada dodje do izjednacenja moguce je da se pin
RC2/CCP1 setuje, resetuje ili ostane nepromenjen, sto se ranije podesi odgovarajućim
konfiguracionim bajtom upisanim u registar CCP1CON. I u ovom slucaju se setuje
interapt fleg CCP1IF.
U rezimu rada PWM (Pulse Width Modulation) pin RC2/CCP1 proizvodi sirinsko-
impulsni modulisani signal rezolucije do 10 bita. Pojednostavljeni blok-dijagram
PWM modula dat je na slici 1.37.
Sl.1.37 Pojednostavljeni blok-dijagram PWM modula

Period PWM signala odredjuje se upisom u PR2 registar po formuli:

PWM_perid = [(PR2)+1]*4*Tosc*TMR2_preskajler

Vreme ispune (Duty Cycle Time) menja se upisom u registar CCPR1L i dva bita
registra CCP1CON (biti 5 i 4). Time je omogucena maksimalno 10-bitna rezolucija
PWM izlaza. Formula za proracun je:

PWM_Duty_Cycle = (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2_preskajler

1.23 Ostale periferne jedinice

Mikrokontroler PIC16F877 poseduje jos nekoliko korisnih periferijskih modula


koji ce u ovom odjeljku biti samo kratko spomenuti. Mikrokontroler obicno nije
usamljen, nego je deo mreze uredjaja koji trebaju medjusobno komunicirati i
razmenjivati podatke. U tu svrhu, on je opremljen sa tri hardverska komunikaciona
modula.
Prvi od njih je SSP modul (Synchronous Serial Port), koji sluzi za komunikaciju sa
serijskim EEPROM-ima, pomerackim registrima, displej-drajverima, itd. Ovaj modul
moze raditi u jednom od dva rezima:
1. Serial Peripheral Interface (SPI)
2. Inter-Integrated Circuit (I2C)
Drugi serijski komunikacioni modul je USART (Universal Synchronous
Asynchronous Receiver Transmiter). On uglavnom sluzi za povezivanje sa
personalnim racunarom, ali to nije njegova jedina mogucnost primene. USART se
moze konfigurisati u neki od sledecih modova rada:
1. Asinhroni rad (full duplex)
2. Sinhroni master rad (half duplex)
3. Sinhroni slave rad (half duplex)
Osim serijskih, postoji i jedan paralelni komunikacioni modul. Rec je o modulu PSP
(Parallel Slave Port). On sluzi da se PIC16F877 direktno poveze na 8-bitnu
magistralu podataka drugog mikroprocesora. Eksterni procesor tada koristeci linije
Read (RD) i Write (WR) moze citati i upisivati PORTD registar kao svaki drugi 8-
bitni lec.
2. Digitalno-analogni konvertor
Da bi se, koriscenjem digitalnih sistema za obrdau (racunara) izvrsila efikasna
obrada izmerenih fizickih velicina, neophodno je fizicke velicine mernim
pretvaracima transformisati u elektricne, napon ili struju, a zatim napon ili struju, koja
reprezentuje izmerenu velicinu u analognoj formi, transformisti u digitalno kodovan
broj. Elektronsko kolo koje velicinu i polaritet napona (struje) konvertuje u
odgovarajucu digitalnu formu naziva se analogno-digitalni konvertor, ili skraceno
A/D konvertor.
Takodje, nakon digitalne obrade, potrebno je digitalno izrazenu velicinu
konvertovati u napon ili struju, kako bi se odgovarajucim naponom (strujom) delovalo
na sklopove sistema da obavljaju funkcije na nacin kako je digitalnim sistemom
definisano..
Da bi digitalni broj mogao da se konvertuje u analognu velicinu, broj mora biti
dekodovan, tako da svakom broju odgovara unapred odredjena vrednost napona ili
struje, ili broj mora biti kodovan u nekom tezinskom kodu,tako da svaka cifra,
zavisno od pozicije (tezine) srazmerno doprinosi velicini izlaznog napona, odnosno
struje.
Osnovni gradivni blokovi digitalno-analognog konvertora su: registar za
pamcenje digitalne informacije, izvor referetnog napona, mreza pasivnih komponenti
za skaliranje referetnog napona, skup analognih orekidacaza izbor konfiguracije
pasivne mreze u zavisnosti od ulazne digitalne informacije i izlazvi analogni
pojacavac za dovodjenje izlaznog signala na zeljeni nivo i prilagodjenje izlazne
impedanse. Blok dijagram digitalno-analognog konvertora data je ne slici 2.1.

Sl:2.1 Blok sema digitalno-analognog konvertora


Svaki od blokova digitalno-analognog konvertora sa slike 2.1 unosi
statickui/ili dinamicku gresku, ili nepreciznost prilikom konverzij.
Idealna prenosna karakteristika za cetvorobitni digitalno-analogni konvertor
prikazana je na slici 2.2.

Sl:2.2 Idealna karakteristika digitalno-analognog konvertora

Na apcisi karakteristike prenosa je vreme t u kome se, u jednakim vremenskim


intervalima, menja binarno kodovan broj od 0 (0000) do 15 (1111). Broj je formiran
digitalnim sinmalima d0, d1, d2, d3 sa slike 2.1. Na ordinati je vrednost izlaznig
napona, normalizovana u odnosu na maksimalni izlazni napon, koji se cesto naziva
napon pune skale (Vmax=Vps). Za svaku kombinaciju ulaznih digitalnih signala postoji
samo jedna vrednost izlaznog napona. Razlika izlaznih napona koji odgovaraju
susednim brojevima naziva se promena za jedan bit najmanje tezine, ili skraceno LSB
(least significant bit). Ukupan broj diskretnih vrednosti koje izlazni napon digitalno-
analognog konvertora moze da zauzme se naziva rezolucuja digitalno-analognog
konvertora. Ako se konvertuju binarni brojevi od n cifara, Viz teorijski moze imati 2n
razlicitih vrednosti. Ako je sum izlaznih napona digitalno-analognog konvertora po
apsolutnoj vrednosti veci od LSB, stvara rezolucija je manja od 2n.
Rezolucija digitalno-analognog konvertora se cesto izrazava brojemcifara n,
umesto brojem nivoa izlaznih napona. Tako digitalno-analogni konvertor sa slike 2.2
je rezolucije 16, odnosno, rezolucije 4 bita.
Svako odstupanje u odnosu na idealnu karakteristiku prenosa prikazanu na
slici 2.2 prestavlja gresku konverzije. Greska konverzije mogu biti staticke i
dinamicke.
Staticke greske unose gresku linearnosti digitalno-analognog konvertora.
Linearnost se definise kao maksimalno odstupanje izlaznog napona (za bilo koji kôd
ulaznih promenjivih) od prave linije povucene od nultog, do proracunatog napona
pune skale. Izrazava se u procentima opsega pune skale ili u frakcijama LSB. Ovako
definisana linearnost se naziva apsolutna linearnost.
Graficki prikaz apsolutne linearnosti prikazan je na slici 2.3. Za razliku od
karakteristike prikazane na slici 2.2 na apcisi nije vreme, vec kôd ulazne digitalne
informacije.

Sl: 2.3 Graficki prikaz apsolutne linearnosti

Isprekidanim linijamana slici 2.3 definisana je apsolutna linearnost.


Odstupanje izlaznog napona od 0 za kôd 000 naziva se greska nule, a odstupanje na
maksimalnoj vrednosti, greska pune skale.
Linearnost se moze definisati i u odnosu na pravu liniju koja je povucena
izmedju izmerenih vrednosti po kriterijumu da je apsolutna vrednost rastojanja
izmerenih vrednosti od prave minimalna. Ovakva linearnost se naziva linearnost
optimalne prave (best-straight-linelinearity).
Odstupanje nagiba optimalne prave od nagiba idealne karakteristike naziva se
greska pojacanja. Presek optimalne prave sa naponskom osom definise nulti ofset.
Na slici 2.4 prikazan je primer karakteristike digitalno-analognog konvertora
koji nema zadovoljavaljucu apsolutnu linearnost, ali je odstupanje izmerenih
vrednosti od optimalne prave malo. Oduzimanjem napona ofseta od izlaznog napona i
povecanjem pojacanja izlaznog pojacavaca, tako da nagib optimalne prave bude
jednak nagibu teoretske karakteristike, staticka karakteristika prenosa sa slike 2.4 bi se
uklopila u granice apsolutne linearnost.

Sl: 2.4 Linearnost u odnosu na optimalnu pravu

Merenjem karakteristika kvalitetnijih digitalno-analognih konvertora moze se


ustanoviti da je optimalna prava u vecini slucajeva veoma bliska (ili se poklapa) sa
pravom povucenom kroz tacku izmerenog napona za nulti ulazni kôd i tacku stvarno
izmerenog napona pune skale. Linearnost u odnosu na ovako povucenu oravu naziva
se linearnost krajnih tacaka (end point linearity). S obzirom da je merenje
jednostavnije, a rezultati su priblizni, u praksi se linearnost krajnih tacaka mnogo
cesce koristi nego linearnost optimalne prave.
Mera kvaliteta digitalno-analognog konvertora je i diferencijalna linearnost.
Diferencijalna linearnost je definisana kao maksimalno odstupanje susednih
naponskih nivoa u odnosu na teoretsku, idealnu vrednost. Apsolutna vrednost razlike
izlaznog napona dva susuedna binarna broja od n cifara je u idealnom slucaju:

VPS
V LSB =
2n - 1
medjutim, zbog tolerancije koriscenih komponenti, promena izlaznog napona ΔV,
moze biti veca ili manja od VLSB, tako da je diferncijalna linearnost DL definisana
kao:

DV - VLSB
DL =
VLSB
i izrazava se u frakcijama od VLSB, odnosno, od LSB. Da bi izlazni napon digitalno-
analognog konvertora bio monotono rastuca funkcija kodovane brojne vrednosti,
diferencijalna linearnost mora da bude bolja od ±1/2 LSB.
Pored linearnosti, vazna karakteristika digitalno-analognog konvertora je i
stabilnost. Stabilnost je funkcija temperature i vremena. Temperaturna stabilnost se
izrazava u frakcijama LSM/ºC, ili ppm/ ºC, odnosi se na stabilnost pojacanja,
linearnosti i ofseta. Dugorocna stbilnost (long term stability) se odnosi na iste
parametre i najcesce se izrazava u ppm/god.
Dinamicke karakteristike digitalno-analognog konvertora definisu vreme za
koje, nakon promene ulazne informacije, izlazni napon dostigne zadatu vrednost. Ovo
vreme se naziva vreme postavljanja tst (settling time) i definise se, ili za maksimalnu
promenu (od 0 do Vps), ili za promenu ulazne informacije za jedan LSB. Vreme
postavljanja digitalno-analognog konvertora se racuna od trenutka zadavanja nove
digitalne vrednosti, do trenutka kada se izlazni napon stabilisao na zadatu vrednost
±1/2 LSB. Umesto vremena postavljanja, cesto se definise vreme prekidanja tsw
(switching time) digitalno-analognog konvertora. Vreme prekidanja je vreme od
trenutka zadavanja digitalnog kôda do trenutka kada Viz dostigne 50% zadate
vrednosti.
Karakteristicno za dinamicku karakteristiku prenosa digitalno-analognog
konvertora je pojava glica na izlaznom naponu prilikom promene ulaznog koda za 1
LSB. Do pojave glica dolazi zbog razlicite brzine prekidanja analognih prekidaca u
konvertoru. Ako je, na primer, prekidac bita najvece tezine brzi od ostalih prekidaca u
mrezi, nakon stanja 01...111,umesto stanja 10...000, kratkotrajno ce postojati
stanje11...111, sto generise maksimalni napon,da bi, kad se ostali prekidaci iskljuce,
napon pao na zadatu vrednost.
Do pojave negativnog glica ce doci ako je, na primer, prekidac MSB sporiji od
ostalih prekidaca. Korektno specificiranje glica bi zahtevalo definisanje maksimalnog
trajanja i maksimalne amplitude glica, medjutim, proizvodjaci najcesce definisu samo
vreme postavljanja u koje je ukljuceno i trajanje glica. Glicevi se javljaju uvek kada
vise od jednog prekidaca menja stanje. Po pravilu su glicevi izrazeniji kada se menja
bit vece tezine, a najveci se javlja kada se menja MSB.

2.1 Digitalno-analogni konvertor sa lestvicastom


mrezom
Lestvicasta otporna mreza je prikazana na slici 2.5, a dobila je naziv po svojoj
slicnosti sa letvicama.
Kao sto se sa slike vidi,u mrezi se koriste samo dve vrste otpornika, R i 2R po
celiji. Mreza je bez obzira na broj celija, zatvorena sa obe strane otpornicima 2R
prema masi.
Lestvicasta mreza ima osobinu da ekvivaletna otpornost svake grane prema
masi iz svakog cvora Ai iznosi 2R. Takodje je iz svake tacke Pi ekvivaletna otpornost
mreza 3R. Ovo ima za posledicu, da kada se bilo koji prekidac Pi prikljuci na napon
VREF kroz granu Pi-Ai ce teci struja istog intenziteta, Ii=VREF/3R. U svakom cvoru Ai,
s obzirom da je otpornost svih grana jednaka, struja se deli na dve jednake
komponente.
Sl:2.4 Lestvicasta otporna mreza

Ako je, na primer, samo prekidac Pn-1 prikljucen na referetni napon, kroz
granu Pn-1-An-1 teci ce struja In-1=VREF/3R, kroz grane An-1-M i An-1-An-2 struja ce biti
In-1/2. ako je prikljucen samo prekidac Pn-2, struja In-2 se u cvoru An-2 deli na dve
jednake komponente intenziteta In-2/2. Komponente struje koja tece kroz granu An-2-
An-1 se u cvoru An-1 ponovo deli na dve jednake komponente intenziteta In-2/4, tako da
kroz granu An-1-M kao posledica ukljucivanja prekidaca Pn-2 protice struja In-2/4.
Slicnim razmatranjem se moze pokazati da ce ukljucivanjem narednog prekidaca Pn-3,
struja I u grani An-1-M biti In-3/8, odnosno, ukljucivanjem svakog sledeceg prekidaca
generise upola manju struju u grani An-1-M.
Ako se primeni zakon superpozicije, struja I kroz granu An-1-m ima vrednost

× (2 n -1 Qn -1 + 2 n -2 Qn -2 + × × × + 2 2 Q2 + 21 Q1 + 2 0 Q0 )
VREF 1
I= ×
6 R 2 n -1
gde Qi=1 oznacava da je i-ti prekidac prikljucen na referetni napon, Qi=0, da je
prikljucen na masu.
Ako se tacka M, umesto na masu, prikljuci na virtuelnu masu operacionog
pojacavaca, a upravljacki signali prekidaca na izlaz stacionarnog registra, dobija se
digitalno-analogni konvertor sa lestvicastom otpornom mrezom.
3.Realizacija sistema
Na slici 3.1 prikazana je blok sema sistema. Srce sistema je mikrokontroler
firme Microchip PIC16F877.

Sl: 3.1 Blok sema sistema

Mikrokontroler, kao centralni deo sistema ima ulogu da vrsi kontrolu ostalih blokaova
sistema (blok zakomunikaciju sa racunarom, blok za analogno-digitalnu konverziju).
Mikrokontroler je isprogramiram da generise na portu D sekvence za analogno-ditalni
konvertor, tako da na izlazu konvertora imamo tri potrebna talasna oblika. Druga
uloga mikrokontrolera je da preko RS232 interfejsa posalje informacije racunaru.
Prvi talasni oblik koji treba de se generise je prikazan na slici 3.2 Sastoji se od
256 nivoa, koji se medjusobno razlikuju za LSB. Na ovaj nacin dobija se talasni oblik
koji je vrlo slican trouglastom talasnom obliku. Vreme trajanja stabilnog nivoa na
izlazu, za odredjenu sekvencu na portu D mikrokontrolera, zavisi od stanja prekidaca
4. Ako je prekidac ukljuven vreme strajanja stabilnog nivoa je 4 mikrosekunde, a ako
je iskljuce trajanje je 2 milisekunde. Ostala tri prekidaca sluze za izbor talasnog oblika
na izlazu analogno digitalnog konvertora. Ako je ukljucen prekidac 3, a prekidaci 2 i
1 iskljuceni generise se signal 3, ili ako je ukljucen prekidac 2, a prekidaci 1 i 3
iskljuceni generise se talasni oblik broj tri. Za bilo koju drugu kombinaciju prekidaca
generisemo talasni oblik broj jedan. Ovo ce biti mnogo jasnije iz samog listinga
programa mikrokontrolera, koji ce biti prikazan i obljasnjen u nastavku.
Sl: 3.2 Dve priode talasnog oblika 1

Talasni oblik broj dva prikazan je na slici 3.3. Ovaj talasni oblik se generise
tako sto u 256 sukcesivnih vrenmenskih intervala na portu D postavljamo vrednosti
redom od 0x00 do 0xFF. Ovaj talasni oblik je vlrlo slicac testerastom talasnom obliku.

Sl: 3.3 Dve periode talasnog oblika 2

Talasni oblik broj tri prikazan je na slici 3.4. Ovaj talasni oblik je slican
talasnom obliku broj dva, stom razlikom sto je dodata pauza izmedju periode.Nacin
sinteze je slican sintezi talasnog oblika broj dva, stom razlikom sto je dodat kod koji
generise pauzu trajanja 256 vremenskih intervala od 4 ili 2 milisekunde, sto je
odredjeno stanjem prekidaca 4. Sve ovo ce biti jasnije kasnije kada budemo
kometarisali kôd mikrokontrolera.

3.1. Mikrokontrolerski deo

Na slici 3.5. prikazana je sema sistema ciji glavni deo zauzima mikrokontroler
i prateci elementi, koji sluze za njgov ispravan rad. Kao sto je vec receno, ovde
koriscen Microchip-ov mikrokontroler PIC16F877, i on je opisan u pethodnim
poglavljiva, tako da ovde nece biti reci o njemu. Pored mikrokontrolera, u
neposrednoj njegovoj okolini uocavamo taster za reset (oznacen nasemi sa S2),diodu
D3, koja ima ulogu u ICSP programiranja. Otpornik R2 i kondezator C4 imaju ilogu
NF filtra, tako da slucajne VF promene ,koje bi mogle da se pojave na pinu MCLR i
nepotrebno resetovale mikrokontroler, budu eliminisane. Pored ovih elemenata nalaze
se jos i kvarcni oscilator na 10MHz sa dva prateca kondezatora od 22pF. Kako je
kvarcni oscilator Y1 sa frekfencijom od 10MHz, nas mikrokontroler ima vreme
izvrsenja masinskog ciklusa 400ns. Ovde se nalazi i konektor J2 koji sluzi za
povezivanje sistema sa programatorom.

Sl:3.4 Dve periode talasnog oblika 3

3.2. Napajanje

Napajanje korisceno u ovom sistemu je relativno stsndardno. Satoji se od


transformatora koji koji smanjuje mrzni napon od 220V na nama potrebnih 9V. Iza
njega dolazi integrisani grecov ispravljac U5, koji previdjen za struju do jednog
ampera. Zatim dolaze blok kondezatori, za filtriranje VF smetnji, i linijski stabilizator
7805 , koji je , kao i grecov ispravljac predvidjen za struju od jednog ampera. Sastavni
deo napajanja je i jedna crvena LE-dioda crvene boje i precnika 3mm, koja ima ulogu
signalizacije ispravnosti napajanja

3.3. Kolo za komunikaciju sa racunarom

Protokol RS232 zahteva naponske nivoe:


1. Logicka nula „SPACE“ u opsegu od +3V do +25V
2. Logicka jedinica „MARK“ u opsegu od -3V do -25V.
Oblast izmedju -3V i +3V je nedefinisana. S druge strane sistem koji se realizuje radi
na naponu od +5V. Da nebi doslo do ostecenja sistema previsokim naponom koji se
javlja na strani racunara, bilo je neophodno uvesti kolo MAX 232, koje ce izvrsiti
potrebnu translaciju naponskih nivoa. Pored ovog kola nalaze se i elektrolitski
kondezatori C6, C11, C12, C13 koji su preporuceni od strane proizvodjaca.

3.4. Prekidaci

Kako je na izlazu bilo potrebno dobiti tri talasna oblika, koji mogu da imaju
jednu od dve razlicite frekfencije, bilo je neophodno uvesti prekidace. Prekidaci
korisceni u ovom sistemu su DIP prekidaci (DIP-4). Povezani su na port B i
isprogramirani su tako, da od njihovog stanja zavisi talasni oblik na izlazu. O nacinu
podesavanjaprekidaca bilo je reci u prethodnom delu (kada su opisani talasni oblici),
tako da se sada nece biti reci o tome.
Sl: 3.5 Sema sistema u programskom paketu PROTEL 99SE
3.5. Digitalno-analogni konvertor

Da bi dobili anlogne signale na izlazu sisteme neophodno je ralizovati


analogno digitalni konvertor. Ovde je odluceno da se koristi digitalo-analogni
konvertor sa letvicastom strukturom (odnosno R-2R mrezom). Ovaj konvertor je
odabran pre svega zbog jednostavne realozacije i niske cene komponenata. Naime za
ovaj konvertor potreboj je samo jedan registar (koriscen je D lec 74HC373) i nekoliko
otpornika otpornosti 1KΩ i 2KΩ. Kolo 74HC373 poseduje pinove LE i OE, koji sluze
za kotolu samog integrisanog kola. Pin OE na logickoj jedinici izlazi leca su u stanj
visoke impedanse, a kada je na logickoj nuli izlaz je u stanju niske impedanse. Kada
je pin LE na logickoj jedinici moguce je upisivati podatke u lec, dok kada le na
logickoj nuli lec zadrzava prethodno stanje.
Na istoj plocici nalazi se indikator napona napajanja u vidu jedne crvene LE-
diode precnika 3mm. Karakteristike ovog analogno-digitalnog koverora su opisane u
prethodnoj glavi, tako da sada nece biti reci o tome. Sema analogno-digitalnog
konvertora prikazana je na slici 3.6.

Sl: 3.6 Sema analogno-digitalnog konvertora u programskom paketu PROTEL 99SE


3.6 Ostali deovi sistemna

Kao sto je vec u uvodu receno prvobitna uloga ovog sistama je bila bezicna
komunikacija. Predvidjeno je bilo da se komunikacija obavlja pomocu cipa RXQ1.
Medjutim, kako je doslo do izmene u trenutku kada je sistem za bezicnu
komunikaciju vec bio zavrsen, reseno je da se promeni softver mikrokontrolera i uz
minimalne hardverske izmene realizuje generator funkcije. Zog toga je na glavnoj
plocicici ostale neke komponente koje nisu potrebne generatoru funkcija. Ovde se pre
svega misli na indikatore sa LE-diodama i ostavljenom slobodnom mestu za cip
RXQ1.

3.7. Fizicki izgled plocica

U ovom delu bice prizan izgled stampanih plocica koje su koriscene za razvoj
sistema. Sve plocice su projektovane u programskom paketu „PROTEL 99SE“. Na
slici 3.7 prikazana je plocica glavnog dela sistema. Na njoj se jasno vidi mesto gde se
nalazi mikrokontroler, kao i slobodno mesto koje je bilo predvidjeno za cip RXQ1.

Sl:3.7 Fiziki izgled donjeg sloja glavne ploce

Na slici 3.8 vidimo raspored elemenata glavne plocice. Sa slike se vidi da


raspored elemenata nije gust. To je ucinjeno s namerom da se izmegne nezeljeni uticaj
izmedju komonenata, jer je ovaj sistem,kao sto smo vec rekli, bio namenjem za
bezicnu komunikaciju. Iz istog razlloga se i trasformator nalazi na posebnoj plocici.
Slika 3.9 prikazuje fizicki izgled stampane plocice analogno-digitalnog
konvertora. Ova plocica je relativno malih dimenzija, i komponente su gusto
postavljene, za razliku od prethodne, glavne, plocice.
Sl:3.8 Raspored elemenata glavne ploce

Sl:3.9 Fizicki izgled donjeg sloja analogno-digitalnog konvertora


Slika 3.10 okazuje raspored elemanta na plocici analogno-digitalnog
konvertora. Na ovoj plocici se nalazi i dzamper J2 koji je namenjem za povezivanje sa
osciloskopom.

Sl:3.10 Raspored elemenata analogno-digitalnog konvertora

Sl:3.11 Fiziki izgled plocice trafoa

Sl:3.12 Raspored elemenata na plocici trafoa

Na slikama 3.11 i 3.12 prikazan je fizicki izgled stampane plocice trafoa i raspored
elemenata na plocici.
4.SOFTVER
Za rad miktrokontrolera napisan je poseban softver u programskom jeziku C.
Za razvoj sistema koristili smo pozanti kompajler HI-TECH. Ovaj kompajler spada u
profesionalne alate za razvoj softvera mikrontolera. Njegova osnovna karakteristika je
ta sto generise vrlo efikasan kôd, nema ugradjene biblioteke za rad sa periferijama,
nema IDE okruzenje. Sama cinjenica da nema ugradjene biblioteke za rad sa
periferijama zahteva odlicho pozanavane samog mikrokontrolera, periferija, ali i
digitalne i impulsne elekronike. S druge strane ovo omogucava bolju kontrolau
programa, jer sve bibliote pise sam programer u toku razvijanja sistema. Pored ovog
kompajlera postoje i CCS, MicroC, MicroBasic...
Program koji upravlja radom mikrokontrolera sastoji se iz tri celine:
1. main rutine u kojoj se nalazi beskonatna petlja i u kojoj se pozivaju
potprogrami za generisanje talasnih oblika
2. interrupt rutine koja se izvrsava na svako prekoracenje TIMER-a 0, i u kojoj
se vrsi obrada tastera
3. potprograma za generisanje potrebnih talasnih obloka
Listing glavog programa sa detaljnim komentarom je dat u nastavku:

#include <pic.h>
#include "delay.c" //ucitavamo rutinu koja unosi kasnjenje
#include "rs232.c" //ucitavamo rutinu koja omogucava RS232 komunikaciju
__CONFIG(LVPDIS&HS&PWRTEN&WDTDIS&DEBUGDIS); //osnovna podesavanja
//mikrokontrolera

//upisujemo podatke za evidenciju u eprom mokrokontrolera


__EEPROM_DATA('D','A','C','_','1','.','0','0');
__EEPROM_DATA('O','K','T','O','B','A','R','_');
__EEPROM_DATA('2','0','0','7','.','G','O','D');

//dajemo ime pojedinim pinovima


#define PORTBIT(adr,bit) ((unsigned)(&adr)*8+(bit))
static bit taster1 @ PORTBIT(PORTB,1);
static bit taster2 @ PORTBIT(PORTB,2);
static bit taster3 @ PORTBIT(PORTB,3);
static bit taster4 @ PORTBIT(PORTB,4);
static bit oe @ PORTBIT(PORTE,0);
static bit le @ PORTBIT(PORTE,1);

//deklarisemo promenjive
unsigned char vreme,h,f,d,s,o,p,r,funkcija,t;
int i,j,k,l,q;

//formiramo masku za prikaz na racunaru


char const maska4[43]="******************************************";
char const maska0[43]="* Mikroprocesorski sistemi *";
char const maska1[43]="* Upravljanje DAC -a mikrokontrolerom *";
char const maska2[43]="* Ver SW:1.00 *";
char const maska3[43]="* Projakat su uradili: *";
char const maska5[43]="* Vladimir Stankovic 9786 *";
char const maska6[43]="* Branko Vojicic 9589 *";
char const maska7[43]="******************************************";

void interrupt isr(void) //intrrupt rutina za obradu tastera


{
if(T0IF)
{
if(!taster1&&taster2&&taster3) //proveravamo prvi taster
{
funkcija=1;
}
else if(taster1&&!taster2&&taster3) //proveravamo drugi taster
{
funkcija=2;
}
else if(taster1&&taster2&&!taster3) //proveravamo treci taster
{
funkcija=3;
}
else
{
funkcija=1;
}
if(taster4) //proveravamo cetvrti taster
{
t=4;
}
else if(!taster4)
{
t=2;
}
T0IF=0;
}
}

//potprogram za generisanje prvog talasnog oblika


void signal1(unsigned char vreme)
{
for(i=0; i<=255; i++)
{
PORTD=i; //upisujemo vrednost brojaca na port d
DelayUs(vreme); //pauza
}
for(j=254; j>=0; j--) //drugi deo signala
{
PORTD=j;
DelayUs(vreme);
}
}

//potprogram za generisanje drugog talasnog oblika


void signal2(unsigned char vreme)
{
for(k=0; k<=255; k++)
{
PORTD=k;
DelayUs(vreme);
}
PORTD=0;
DelayUs(vreme);
}

//potprogram za generisanje treceg talasnog oblika


void signal3(unsigned char vreme)
{
for(l=0;l<=255;l++)
{
PORTD=l;
DelayUs(vreme);
}
for(q=0;q<=255;q++)
{
PORTD=0;
DelayUs(vreme);
}
}

void main(void)
{
GIE=0; //iskljucujemo sve interrupt-e
rs232_init(); //inicijalizuje RS232 interfejs
TRISC=0x00; //tris c je izlazni
PORTC=0x00; //port c je postavljen na logicku nulu
TRISA=0x00; //tris a je izlazni
PORTA=0x00; // port a je postavljen na logicku nulu
TRISE=0x00; //tris e je izlazni
PORTE=0x00; // port e je postavljen na logicku nulu
TRISB=0x1F; //tris b je i ulazni i izlazni
PORTB=0x00; // port b je postavljen na logicku nulu
TRISD=0x00; //tris d je izlazni
PORTD=0x00; // na poertd prikljucujemo DAC
OPTION=0b11000111; // iskljucujemo pull-up otpornike, dodeljujemo
//unutrasnji klok timer-u 0, i preskajler je 1/256, iterrupt na 102.2us
ADCON1=0b1100111; // svi pinovi su digitalni
T0IE=1; //omogucujemo interrupt na timer 0
funkcija=1; //automatski se generise prvi talasni oblik
t=2; //pocetna perioda je 2 milisekunda
le=1; //pin LE je stalno na logicku nulu
oe=0; //pin OE je stalno na logicku 0;

//ispisujemo prateci tekst na racunaru


for(h=0;h<43;h++)
{
RS232_putch(maska4[h]);
}
RS232_putch(10);
RS232_putch(13);

for (f=0;f<43;f++)
{
RS232_putch(maska0[f]);
}
RS232_putch(10);
RS232_putch(13);

for(d=0;d<43;d++)
{
RS232_putch(maska1[d]);
}
RS232_putch(10);
RS232_putch(13);

for(s=0;s<43;s++)
{
RS232_putch(maska2[s]);
}
RS232_putch(10);
RS232_putch(13);

for(l=0;l<43;l++)
{
RS232_putch(maska3[l]);
}
RS232_putch(10);
RS232_putch(13);

for(o=0;o<43;o++)
{
RS232_putch(maska5[o]);
}
RS232_putch(10);
RS232_putch(13);

for(p=0;p<43;p++)
{
RS232_putch(maska6[p]);
}
RS232_putch(10);
RS232_putch(13);

for(r=0;r<43;r++)
{
RS232_putch(maska7[r]);
}
RS232_putch(10);
RS232_putch(13);

GIE=1; omogucujemo globalni interrupt

while(1) //beskonacka petlja


{

if(funkcija==1) //ako je prekidac 1 na logicku 1 ->funkcija1


signal1(t);
if(funkcija==2)
signal2(t);
if(funkcija==3)
signal3(t);
}
}

Predhodni program koristi biblioteke rs232.c i daley.c. U nastavku prikazecemo


listinig bibloteka bez posebnih komentara, jer je kod dovoljno jasan. Ove bibliote
nalase se i na pratecem disku.
Listing biblioteke rs232.c:
#define PIC_CLK 10000000 // frekvencija XTAL -a
#define BAUD 56818 // RS232 baud rate
#define DIVIDER ((PIC_CLK/(16UL * BAUD) -1)) // interni proracun
#define HIGH_SPEED 1 // interno podesavanje RS232 registara

// slanje jednog karaktera


void RS232_putch(unsigned char c)
{
while(!TXIF); //prelazi u '1' kada je prazan
TXREG = c;
DelayUs(60);
}

// prijem jednog karaktera


unsigned char RS232_getch(void)
{
if(RCIF) //prelazi u '1' kada je prazan
{
RCIF = 0;
return RCREG;
}
CREN = 0; //ukoliko je doslo do greske obrisi je
CREN = 1; //enable reception
return 255; // ako nema podatka primljenog
}

// slanje stringa
void RS232_putst(register const char *str)
{
while((*str)!=0)
{
RS232_putch(*str);
if (*str==13) RS232_putch(10);
if (*str==10) RS232_putch(13);
str++;
}
}

// *-----------------------------------------
// * Konverzija decimalnih brojeva u string
// u opsegu od 0..99 za RS232 komunikaciju
// *---------------------------------------- */
void RS232_dec2str2(unsigned int x)
{
unsigned int y;
if (x<100)
{
y=x/10;RS232_putch(y+0x30);x-=(y*10);
RS232_putch(x+0x30);
}
else RS232_putst("Err");
}

void rs232_init(void)
{
// SERIAL PORT SETUP
SPBRG = DIVIDER;
BRGH = HIGH_SPEED; //data rate for sending
SYNC = 0; //asynchronous
SPEN = 1; //enable serial port pins
CREN = 1; //enable reception
SREN = 0; //no effect
TXIE = 0; //disable tx interrupts
RCIE = 0; //disable rx interrupts
TX9 = 0; //8-bit transmission
RX9 = 0; //8-bit reception
TXEN = 0; //reset transmitter
TXEN = 1; //enable the transmitter
}

Listing biblioteke delay.c:

#include "delay.h"

void
DelayMs(unsigned char cnt)
{
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif

#if XTAL_FREQ > 2MHZ


unsigned char i;
do {
i = 4;
do {
DelayUs(250);
} while(--i);
} while(--cnt);
#endif
}

void
DelaySec(char sec)
{
char loop;
for(loop=0;loop<=sec*4;loop++)
{
DelayMs(250);
}
}

Biblioteka delay.c koristi za svoj rad biblioteku delay.h u kojo je definisana


ucestanost oscilatora i procedura koja unosi kasnjenje od jedne mikrosekunde
Listing biblioteke delay.h:
#ifndef XTAL_FREQ
#define XTAL_FREQ 10MHZ /* Crystal frequency in MHz */
#endif

#define MHZ *1000L /* number of kHz in a MHz */


#define KHZ *1 /* number of kHz in a kHz */

#if XTAL_FREQ >= 12MHZ


#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else

#define DelayUs(x) { unsigned char _dcnt; \


_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif

extern void DelayMs(unsigned char);


extern void DelaySec(char sec);

Kada razvijemo program u programskom jeziku C, vrsimo njegovo kompajliranje.


HI-TECH kompajler grerise hex fajl koji sadrzi kôd koji treba da loadujemo u
mikrokontroler. Za loadovanje programa koristimo softver Ic-prog i programator
TAIT.
5.Dodatak

Sl: 5.1 Blok sema kola 74hc373

Sl: 5.2 Struktura kola 74hc373

Na slikama 5.1 i 5.2 prikazana je blok sema i struktura kola 74hc373. Ovo
kolo je D lec kolo sa trostatickim izlazom. Pinovi OE i LE sluze za kontolu leca i
trostatickog izlaza.
Slika 5.3 prikazuje tabeli istinitosti kola 74hc373, dok slika 5.4 jednosmerne
karakteristike ovog D lec kola. Od jendnosmernih karakteristika najvaznije su one
koje odredjuju izlazne naponske nivoe na izlazu leca (VOH i VOL). Izlazni naponski
nivo logicke jedinice je ujedno referetni napo koji se kristi u izrazu za napon na izlazu
analogno-digitalnog konvertora.
Slika 5.5 je proizvodjacka preporuka povezivanje kola MAX232. Na slici su
prikazani svi potrebni elementi, i nacin na koji ih treba povezti da bi kolo ispravni
radilo. Pri realizaciji naseg sistema iskoristili smo upavo ovu preporuku.
Na slici 5.6 prikazane su dimenzije i karakteristike koriscenih LE dioda. Ove
diode su vrlo zahvene za koriscene u situacija kada je potrebna jednostavna i jeftina
indikacija nekog stanja. Imaju veoma malo potrosnju struje, tako da mikrokontroler
PIC16F877 moze direkno da ih podjuje.
Slika 5.7 prikazuje fiziki izgled i karakteristike koriscenih DIP prekidaca. U
nasem sistemu korisceni su cetvoropolni DIP prekidaci.
Sl: 5.3 Tabela istinitost kola 74hc373

Sl: 5.4 Jednosmerne karakteristike kola 74hc373


Sl: 5.5 Struktura kola MAX232

Sl: 5.6 Fizicki izgled i karakteristike LE-dioda

Sl: 5.7 Fizicki izgled i karateristike DIP prekidaca


Sl: 5.8 Fizicki izgled linijskog stabilizatora 7805

Sl: 5.9 Fizicki izgled i karakteristike impulsnih tastera


Sl: 5.10 Fizicki izgled NYLON konektora

Sl: 5.11 Fizicki izgled i karaktristike grecovog ispravljaca

Slika 5.8 prikazuje fizice dimenzije linijskog stabiliora 7805. Ovaj stabilizator
je dimenzionisan za nazivnu struju od jednog ampera, sto je bilo sasvim dovoljno za
nas sistem.
Za reset mikrokontrolera koristili smo impulsne tastere. Oni su malih
dimenzija, a i cena imje pristupacna, tako da sve vise nalaze mesto u
mikrokontrolerskim sistemima. Fizicki izgled i karateristike impulsnih tastera
prikazana je na slici 5.9.
Na slici 5.10 prikaz je zizicki izgled NYLON konektra. Ovi konektori su
korisceni za povezivanje napajanja i programatora sa sistemom.
Slika 5.11 prikazuje karakteristke i fizicki izgled integrisanog grecovog
ispravljaca. U sistemu je koriscen grecov ispravljac dimenzionisan za struje do jednig
ampera.
Sl: 5.12 Sema TAIT programatora

Za programiranje mikrokontrolera koristili smo TAIT programator. Ovaj


programator spada u grupi ICSP programatoa, sto zanaci da moze da programira
mikrokntroler dok se on nalazi u sistemu, bez njegovog vadjenja. Vrlo je zahvalan za
izrdu pre svega zbog cene komponenata i jednostavnosti izrade. Sema ovog
programatora prikazana je na slici 5.12.
Literatra

1. Programski jezik C za PIC mikrokontrolere, Ingoelktronika


2. PC interfejsi, V. Milanovic
3. Impulsna i digitakna elektronika, D. Zivkovic i M. Popovic
4. Seminarski rad: Razvojni sistem za PIC16F877A mikrokontroler, B.
Dimitrijevic, S. Aleksic, I. Antic

You might also like