2. pic 16f628a
TRANSCRIPT
3. PIC mikrokontroleri
PIC mikrokontroler (engl. Programmable Intelligent computer), originalni proizvod tvrtke
Microchip, vrlo je popularan među inžinjerima i elektroničkim početnicima, a dolazi u puno
različitih izvedbi, svaka sa posebnim komponentama i mogućnostima. Mnogi elektronički
projekti mogu se vrlo lako izvesti pomoću mikrokontrolera iz PIC obitelji, poput digitalnih
satova, vrlo jednostavnih video igrica, robota, servo kontrolera i mnogih drugih. Njihova
primjena je vrlo široka, a njihove mogućnosti i varijante su nebrojene, a može ih se nabaviti
po vrlo pristupačnim cijenama što ih čini još popularnijima. Upravo zbog svoje raznovrsnosti,
ali ponajviše zbog prilično jednostavnog programiranja, PIC mikrokontroleri imaju dosta
veliku primjenu u edukaciji, kako srednjoškolskoj tako i fakultetskoj, u digitalnoj logici,
digitalnoj elektronici, automatici i drugim srodnim područjima. PIC skupina predstavlja do
maximuma optimiziranu RISC (Reduced Instruction Set Computer) implementaciju. Kako je
procesorska jezgra PIC-a jednostavna RISC jezgra koja podržava svega nekih tridesetak
osnovnih naredbi, to je i proces učenja kao i privikavanja na ovu arhitekturu veoma
jednostavan. PIC skupina mikrokontrolera je sa činjena od nekoliko podskupina koje zajedno
imaju velik broj različitih modela. Tako za najosnovnije primjene stoji na raspolaganju
skupina 12C sa svoja dva najosnovnija modela 12C508 i 12C509 koji vjerovali ili ne imaju 6
pinova od ukupno 8 za I/O. Za veće primjene tu je skupina 16C, dok za najzahtjevnije
primjene stoji skupina 17C i 14000. Za većinu modela iz skupine 16C kao iza sve modele
skupine 17C i 14000, ne može se reći da su mali jer na raspolaganju imaju svega od AD
konvertora pa čak do slave portova za komunikaciju sa drugim procesorima. Gotovo svi PIC-
evi se proizvode u dvije varijante EPROM i OTP. Kod EPROM varijante programska
memorija tj. prostor u koji je smješten program po kojem PIC radi je izmjenjivog sadržaja.
Proces reprogramiranja PIC-a je isti kao i kod klasičnog EPROM-a, UV zrakama se obriše
memorija nakon čega je spremna za punjenje novim programom. OTP varijanta PIC-a je vrsta
PROM-a, dakle kada se jednom programira nije više moguće izmijeniti program. Obavezno
se u razvoju sistema koristi EPROM varijanta, jer se sve korekcije nastale uslijed grešaka u
razvoju sistema mogu ispraviti u programskom kodu i ponovo upisati u jedan te isti PIC.
Nekada je programski kod potrebno mijenjati po desetak puta, dok se ne postigne željeni
cilj,ova preporuka je dakako onda iz financijskih razloga. Treća varijanta PIC-a je FLASH.
Pored programske memorije većina PIC mikrokotrolera ima ugrađenu i podatkovnu memoriju
EEPROM koja služi za memoriranje različitih varijabli i parametara u toku smog rada PIC-a.
To mogu biti različite šifre, kodovi i slično koji ostaju zapamćeni i kada PIC nije pod
naponom.
RAM memorija je po svojoj veli čini različita kod različitih modela PIC-a. Dok se po ostalim
karakteristikama ne razlikuje kod svih PIC-eva. Postoje RAM memorijske lokacije posebno
karakterizirane kao SFR ili specijalni funkcijski registri. Inače jedan registar je veličine
jednog bajta. Pošto je RAM podijeljen na bite odnosno bajte koji su adresirani od 00h
(hexadecimalno) pa do neke vrijednosti u zavisnosti od konkretnog PIC-a. Tako svaki registar
ima svoju adresu preko koje se u njega može pisati i čitati iz registra. Upis i čitanje iz SFR u
RAM-u manifestira se konkretno na neki događaj za koji je taj registar namijenjen. Npr. Ako
želimo da na PORT-u B(pinovi od 6 do 13) recimo upalimo 8 led dioda, dovoljno je u RAM-u
na memorijskoj lokaciji koja odgovara PORT-u B konkretno na adresi 06h upisati 255
decimalno, ili '11111111' binarno, ili pak ff hexadecimalno što je ustvari isto, da se upale sve
diode. Na sličan način može se ustanoviti koji je od prekidača pritisnut ukoliko se radi o
prekidačima, samo što se sada pročita vrijednost SFR PORT-a B sa adrese 06h. Na identičan
način se može podesiti tajmer čitanjem i pisanjem u SFR RAM-a namijenjen za tajmer
(konkretno adresa je 01h) kao i drugi SFR-i. Dobra osobina je da su kod svih PIC-eva ovi
registri na istim adresama, s tim što moćniji PIC-evi imaju neke nove SFR-e, ali će program iz
ovog razloga napisan za slabiji PIC sasvim dobro raditi na moćnijem PIC-u ali ne vrijedi
obrnuto.
4. Mikrokontroler PIC 16F628A
4.1. Osnovne karakteristike mikrokontrolera PIC 16F628A
4.1.1. Kratak opis mikrokontrolera
PIC 16F628A je 8-bit-ni mikrokontroler, niske cijene, velikih performansi, izveden CMOS
tehnologijom. Izveden je u RISC (Reduced Instruction Set Computer) arhitekturi. To znači da
koristi dvije sabirnice, podatkovnu (8-bit-na) i instrukcijsku (14-bit-na). PIC 16F628A ima
osam nivoa dubok stog i više prekidnih izvora, što unutarnjih, što vanjskih. Istovremeno
izvođenje i prihvaćanje slijedeće instrukcije omogućuje da se svaka instrukcija izvrši u
jednom instrukcijskom ciklusu, osim instrukcija skoka i poziva potprograma (za koje su
potrebna dva instrukcijska ciklusa). Ukupno 35 instrukcija koje ga čine i više nego
prihvatljivim. Također obično koriste 2:1 sažimanje koda i 4:1 veću brzinu rada (na 20 Mhz)
od drugih 8-bit-nih mikrokontrolera iste klase. SLEEP način rada omogućuje štednju energije.
Iz takvog načina rada mikrokontroler se može vratiti u aktivno stanje putem prekida, vanjskih
ili unutarnjih , i/ili resetom. Te ima Watchdog tajmer sa vlastitim RC oscilatorom koji štiti od
softverskog „zamrzavanja“ ili slučajne beskonačne petlje. Incircuit reprogramilnost
omogućuje optimiziranje programskog koda unutar sklopa, bez odvajanja mikrokontrolera od
gotovog sklopa. To je vrlo korisno u razvoju sklopova gdje mikrokontroler nije fizički
dostupan, a prototip zahtjeva optimizaciju.
4.1.2. Karakteristike mikrokontrolera
Visokih performansi RISC CPU
35 instrukcija veličine jedne riječi
Radna frekvencija fref = DC-20 MHz
Trajanje taktnog intervala tcpu = 200 ns, kada je fref = 20 MHz
Op-kod veličine 14 bita
hardverski stog sa 8 nivoa
Tri načina adresiranja: - direktno
- indirektno
- relativno
Programska memorija kapaciteta 2048x14 bit-nih riječi realizirane u FLASH
tehnologiji
Memorije za podatke tipa RAM kapaciteta 224x8 bita
Memorije za podatke EEPROM tipa kapaciteta 128x8 bita
10 izvora prekida
U/I portovi: A,B
Tri tajmera: - Timer0: 8-bitni tajmer/brojač događaja
- Timer1: 16-bit tajmer/brojač događaja
- Timer2: 8-bit tajmer/brojač događaja
10 to bitni 8-kanalni Analogno-Digitalni (A/D) konvertor
Serijska komunikacija: USART
Power-on Reset- reset pri uključenju napajanja(POR)
Power-up timer-unošenje kašnjenja nakon uključenja napajanja (PWRT)
Oscillator Start-up Timer unošenje kašnjenja nakon stabiliziranja radne frekvencije
oscilatora(OST)
Sleep način rada za štednju energije
Watchdog timer sa jedinstvenim integriranim RC oscilatorom za nezavisni rad
Izbor tipa oscilatora
Mala potrošnja,velika brzina rada
Radni napon od 3V do 5.5V
Mala potrošnja energije:
1. <0.6 mA pri naponu od 3V i radnoj frekvenciji od 4 MHz
2. 20µA pri naponu od 3V i radnom taktu od 32kHz
3. < 1µA u standby načinu rada
Pakovanje: - 18 pinsko DIP, SOIC,
- 20 pinsko SSOIP,
- 28 pinsko QFN
16 ulazni/izlaznih pojedinačno upravljanih nožica
velika struja U/I sklopova za napajanje LED dioda
Serijsko In-Circuit programiranje, preko dvije nožice
Power-on Reset (reset pri uključenju)
Power-up Timer (određeno kašnjenje nakon uključenja)
Oscilatorski Start-up Timer (određeno kašnjenje od stabilizacije radne frekfencije)
Watchdog Timer sa vlastitim integriranim RC oscilatorom za neovisan rad
zaštita koda
sleep način rada (za uštedu energije)
Slika 4.1.1. Blok shema mikrokontrolera PIC 16F628A
4.2. Raspored nožica
Slika 4.2.1. Raspored nožica mikrokontrolera PIC16F62A
1. RA2/AN2/Vref – druga nožica porta A
2. RA3/AN3/CMP1 – treća nožica porta A
3. RA4/TOCKI/CMP2 – četvrta nožica porta A, može biti i ulaz takta za timer/brojač
4. RA5/MCLR/Vpp – peta nožica porta A, MCLR reset ulaz i Vpp napon napajanja
5. Vss – napajanje („masa“)
6. RB0/INT – nulti pin porta B i interrupt ulaz
7. RB1/RX/DT – prva nožica porta B
8. RB2/TX/CX – druga nožica porta B
9. RB3/CCP1 – treća nožica porta B
10. RB4/PGM – četvrta nožica porta B
11. RB5 – peta nožica porta B
12. RB6/T1OSO/T1CKI/PGC – šesta nožica porta B i ulaz takta u programskom modu
13. RB7/T1OSI/PGD – sedma nožica porta B i linija za ulaz podataka u programskom
modu
14. Vdd – pozitivno napajanje
15. RA6/OSC2/CLKOUT – šesta nožica porta A te nožica koja služi za spajanje vanjskog
kristalnog oscilatora a ako imamo na OSC1 spojen RC oscilator tada služi kao djelitelj
frekvencije OSC1 sa 4
16. RA7/OSC1/CLKIN – sedma nožica porta A i nožica koja služi za spajanje vanjskog
oscilatora
17. RA0/AN0 – nulta nožica porta A, analogni komparatorski ulaz
18. RA1/AN1 – prva nožica porta A, analogni komparatorski ulaz
4.3. Takt/instrukcijski ciklus
Takt doveden s nožice OSC1 u mikrokontroleru se dijeli na četiri nepreklapajuća takta koje
nazivamo Q1, Q2, Q3 i Q4 koji skupa čine jedan instrukcijski ciklus npr. TCY1.
Instrukcijske cikluse dijelimo:
Q1 – pozivanje instrukcije iz programske memorije
Q2 – dekodiranje naredbe iz prethodnog instrukcijskog ciklusa
Q3 – izvođenje naredbe iz prethodnog instrukcijskog ciklusa
Q4 – spremanje instrukcije pozvane u Q1 u instrukcijski registar
Uzmimo za primjer instrukcijski ciklus TCY2. Na Q1 takt u instrukcijskom ciklusu TCY2
programski brojač (PC) se uvećava za 1 te poziva instrukciju iz programske memorije. U
sljedeća dva takta Q2 i Q3 instrukcijskog ciklusa TCY2 instrukcija koja je bila pozvana i
spremljena u instrukcijski registar u prijašnjem TCY1 instrukcijskom ciklusu se dekodira i
izvodi. U četvrtom taktu Q4 instrukcijskog ciklusa TCY2 se instrukcija pozvana na Q1
sprema u instrukcijski registar.
4.4. Obrada instrukcija
Ciklusi povezivanja i izvršavanja instrukcija su tako povezani da je za pozivanje potreban
jedan instrukcijski ciklus a za dešifriranje i izvršavanje još jedan. No zbog protočne obrade,
svaka instrukcija se efektivno izvršava u jednom ciklusu.
4.5. Organizacija memorije
Strukturu memorije ovog mikrokontrolera čine tri odvojena bloka:
Programska memorija
Memorija podataka RAM
EEPROM memorija podataka
Odvojeno od nabrojanih memorijskih blokova PIC 16F628A ima 13-bitni hardverski stog
dubok 8 nivoa. Memorijski prostor stog-a nije dio ni programske ni podatkovne memorije, a
pokazivač stoga nije moguće čitati i u njega upisivati vrijednosti. Njegova osnovna zadaća je
da sačuva vrijednost PC-a nakon što se iz glavnog programa skoči na adresu potprograma. Da
bi se program znao vratiti odakle je počeo mora sa stoga vratiti vrijednost PC-a. Sadržaj sa
stoga vraća se u programsko brojilo kod izvršavanja instrukcija RETURN, RETLW ili
RETFIE, koje se izvršavaju na kraju potprograma
4.5.1. Organizacija programske memorije
PIC 16F628A ima 13-bit-ni programski brojač (PC) koji je u mogućnosti da adresira
memorijski prostor veličine 8K x 14. Reset vektor je na adresi 0000h i od njega počinje
izvršavanje programa. Interapt vektor je na adresi 0000h. Mapa programske memorije i Stog
su prikazani na slici
4.5.2. Organizacija memorije podataka
Memorija za podatke je podijeljena u više cjelina banki (banks), a sastoji se od registara opće
namjene (General Purpose Registers) i registara specijalne funkcije (Special Function
Registers). U jednom od specijalnih registara, tzv. STATUS registru postoje dva bita RP1 i
RP0 koji služe za odabir željene banke podataka po principu prikazanom na slici.
Svaka banka sadrži do 128 registara (0x7F). Niže lokacije u banci zauzimaju specijalni
registri, a ostatak prostora popunjavaju registri opće namjene implementirani kao statički
RAM. Neki specijalni registri koji se često koriste mapirani su u sve banke da bi se omogućio
brz pristup i redukcija koda. Nekoliko specijalnih registara su usko povezani sa
funkcioniranjem samog mikrokontrolera. Ostali registri su vezani za periferne module i služe
njihovom upravljanju i kontroli statusa. Mapa registara mikrokontrolera PIC 16F628A
prikazana je na slici.
4.5.3. Status registar
U status registru se upisuju aritmetički status ALU (C, DC, Z), reset status (TO, PD) i bit-ovi
za odabir memorijske banke (IRP, RP1, RP0). Ovaj registar može biti odredište za bilo koju
instrukciju s bilo kojim drugim registrom. Ako je status registar odredište instrukcije koja
utječe na Z, DC ili C bit tada je upis u ova tri bit-a je onemogućen.
bit 7 IRP (Register Bank Select) – osmi bit za indirektno adresiranje RAM-a
1 = banka 2 i 3 (100h-1FFh)
0 = banka 0 i 1 (00h-FFh)
bit 6-5 RP1 RP0 (Register Bank Select) – bit-ovi za izbor memorijske banke, direktno
adresiranje
00 = banka 0 (00h-7Fh)
01 = banka 1 (80h-FFh)
10 = banka 2 (100h-17Fh)
11 = banka 3 (180h-1FFh)
bit 4 ¿ (Time out) – bit je setiran nakon uključenja napajanja i izvršenja CLRWDT i
SLEEP instrukcije, a resetira kad dođe do prekoračenja sigurnosnog brojača
1 = nije došlo do prekoračenja sigurnosnog brojača
0 = došlo je do prekoračenja sigurnosnog brojača
bit 3 PD (Power down) – bit je setiran nakon uključenja napajanja i svakog
regularnog reseta
1 = nakon uključenja napajanja ili izvršenja CLRWDT instrukcije
0 = izvršenjem SLEEP funkcije
bit 2 Z (Zero) – bit je setiran kad je rezultat aritmetičko logičke operacije nula
1 = rezultat je nula
0 = rezultat nije nula
bit 1 DC (Digit Carry) – isto kao i Carry bit samo ovaj bit predstavlja prijenos sa
četvrtog mjesta
1 = pojavio se prijenos na četvrtom mjestu
0 = nema prijenosa
bit 0 C (Carry) – bit na koji utječu operacije zbrajanja i oduzimanja, bit je setiran
kad se oduzima manja vrijednost od veće
1 = pojavio se prijenos najvišeg bit-a rezultata
0 = nema prijenosa najvišeg bit-a rezultata
4.5.4. OPTION registar
OPTION registar je registar u kojeg se može zapisivat i iz kojeg se može čitat. Sadrži različite
kontrolne bit-ove za konfiguriranje preskalera za Timer0 ili WDT (Wachdog Timer), za
odabir ivice okidanja vanjskog prekida i za omogućavanje Pull-up otpornika na PORTB
4.5.4. Direktno i indirektno adresiranje
Direktno adresiranje
Vrši se preko 8 bit-ne adrese koja se dobije povezivanjem šestog bit-a direktne adrese iz
instrukcije i dva bit-a iz STATUS registra (RP1, RP0).
Indirektno adresiranje
Ovaj način adresiranja ne uzima adresu iz instrukcije, već je radi pomoću IRP bit-a STATUS
registra i FSR registra. Adresiranoj lokaciji se pristupa preko INDF registra koji zapravo nije
fizički registar već se njegova adresa nalazi u FSR registru, FSR je pokazivač. Npr. ako
memorijska lokacija 05h sadrži vrijednost 10h i ako memorijska lokacija 06h sadrži vrijednost
0Ah, upišemo li vrijednost 05h u FSR registar, INDF registar vratit će vrijednost 10h.
Inkrementiranjem FSR registra, INDF registar vratit će vrijednost 0Ah.
4.5.5. Relativno adresiranje
Adresa operanda u postupku relativnog adresiranja ovisi o smještaju same naredbe unutar
memorije. Oblik naredbe koja koristi relativno adresiranje prikazano je na slici.
Adresa operanda izračuna se tako, da se adresi, na kojoj se nalazi kod postupka, pribroji
pomak. Naziv relativno adresiranje potječe upravo od činjenice, da je adresa operanda
određena relativno prema položaju, odnosno smještaju same naredbe. Relativni pomak računa
se kao dvojni komplement, a to znači da on može biti pozitivan i negativan. Budući da na
raspolaganju stoji 8 bitova, to je moguće adresirati bilo koju memorijsku lokaciju, udaljenu
+127 ili -128 memorijskih lokacija od lokacija same naredbe.
Naredbe koje koriste relativno adresiranje su dužine dviju riječi, što ih čini prikladnim za
upotrebu. Mana relativnog adresiranja je u relativno kratkom dometu adrese (+127, -128
memorijskih lokacija), te u potrebi za izračunavanjem relativnog pomaka prilikom pisanja
programa. Formula po kojoj se izračunava stvarna adresa glasi:
Stvarna adresa (operanda ili skoka) = adresa naredbe+relativni pomak.
4.6. Ulazno/izlazni portovi
PIC 16F628A ima dva porta, PORTA i PORTB. Portom nazivamo grupu ulazno/izlaznih
nožica (pinova) kojima možemo pristupati istovremeno. Fizički, port je registar koji je
povezan s pinovima mikrokontrolera. Svi pinovi portova se mogu definirati kao ulazni ili
izlazni, prema potrebama sustava. Definiraju se upisivanjem logičke nule i jedinice u TRIS
registru, upisivanjem „1“ pin postaje ulazni a upisivanjem „0“ postaje izlazni. Pošto imamo
dva porta imamo i dva TRIS registra, TRISA i TRISB. PORTA i PORTB se nalaze u banci 0
a TRISA i TRISB u banci 1.
4.6.1. PORTA i TRISA
PORTA je 8-bit-ni port i sadrži pinove od RA0 do RA7. RA4 je ulaz u Schmitt-ov okidač i
izlaz. Pin RA4 može se iskoristiti za ulaznu frekvenciju TIMER0, RA5 je samo ulazni pin i ne
može biti izlazni. Svi ostali pinovi imaju dvojaku funkciju kao ulazno/izlazni pinovi te imaju
mogućnost analogno-digitalne konverzije.
Primjer konfiguiranja porta
bsf STATUS, RP0 ; Prebacivanje programa u BANK1
movlw b'11111100' ; definiranje ulaznih i izlaznih pinova
movwf TRISA ; kopiranje u TRISA registar
bcf STATUS, RP0 ; Vraćanje iz BANK1 u BANK0
U primjeru su pinovi RA0 i RA1 proglašeni kao izlazni, a pinovi od RA2 do RA7 kao ulazni
4.6.2. PORTB i TRISB
PORTB je 8-bit-ni bidirekcionalni port i sadrži pinove od RB0 do RB7. Svi pinovi imaju
odgovarajuće bitove u TRISB registru kojim se pinovi konfiguriraju kao izlazni ili kao ulazni.
Logička „1“ u nekom bitu u TRISB registru stavlja odgovarajući pin u stanje visoke
impedancije i on radi kao ulazni pin. Logička „0“ u TRISB registru prosljeđuje sadržaj bita iz
izlaznog (latch) registra na pin i on radi kao izlazni. Četiri pina ovog porta mogu izazvat
prekid RB<4:7> i to samo ako su konfigurirani kao ulazni.
Primjer konfiguriranja porta:
bsf STATUS, RP0 ; Prebacivanje programa u BANK1
movlw 0x0F ; Definiranje ulaznih i izlaznih pinova
movwf TRISB ; Kopiranje u TRISB registar
bcf STATUS, RP0 ; Vraćanje iz BANK1 u BANK0
bsf PORTB, 4
bsf PORTB, 5
bsf PORTB, 6
bsf PORTB, 7
Primjer pokazuje kako su pinovi RB0, RB1, RB2 i RB3 proglašeni za ulazne, a pinovi RB4,
RB5, RB6 i RB7 za izlazne, te nakon čega su izlazni pinovi postavljeni u jedinicu.
4.8. Tajmerski modul
Koristi se za mjerenje vremena i za brojanje vanjskih događaja. PIC 16F628A posjeduje tri
tajmerska modula (TIMER 0, 1, 2) i svaki od tajmera ima svoje specifične karakteristike.
4.8.1. Timer0 modul
Je jednostavni 8 bit-ni brojač koji generira prekid (interrupt) pri prijelazu sa FFh (255) na 00h
(0), broj bita određuje do koliko će se brojač uvećavati (28 = 256). Posjeduju ga svi niži
PICmicroTM procesori i ovdje je zadržana kompatibilnost s njima. Izvor takta za Timer0 može
biti unutrašnji sistemski takt ili vanjski koji se uzima sa nožice RA4/TOCKI/CMP2. Izvor
takta se bira pomoću bit-a TOCS u OPTION registru. Izaberemo li vanjski takt tada je
moguće birati i ivicu signala (rastuća ili padajuća) na koju će brojač uvećavati svoju
vrijednost. Nakon svakog prelaska brojača sa FFh na 00h setira se TOIF bit u INTCON
registru.
U kombinaciji sa modulom Timer0 može se koristiti programibilni preskaler. Preskaler je
naziv za dio mikrokontrolera kojim se dijeli instrukcijski ciklus prije nego dođe do logike
koja uvećava stanje brojača. Broj kojim se dijeli instrukcijski se definira pomoću prva tri bit-a
u OPTION registru, odnosi dijeljenja su 1:2, 1:4,…, 1:256, čime se omogućuje mjerenje
duljih vremenskih perioda. Preskaler se može pridružiti Timer0 brojaču ili sigurnosnom
brojaču (Wachdog timer), a dodjela se radi pomoću bit-a PSA u OPTION registru. Kada je
preskaler dodijeljen Timer0 brojaču, sve instrukcije upisa u Timer0 registar (CLRF,
MOVWF, BSF,…) će obrisati preskaler. Ako je preskaler dodijeljen sigurnosnom brojaču
samo instrukcija CLRWDT će obrisati preskaler u isto vrijeme kada i sigurnosni brojač.
Promjena preskalera je kompletno pod kontrolom programera i može se mijenjati u toku rada
programa.
Sigurnosni brojač (Wachdog timer) čuva mikrokontroler od „smrzavanja“. Ako dođe do
nepravilnog rada mikrokontrolera, sigurnosni brojač ga nakon nekog vremena resetira, a
program se počinje izvršavati iz početka. Da bi se spriječilo resetiranje za vrijeme normalnog
toka programa moramo upisati nulu u WDT registar (instrukcijom CLRWDT) svaki put kad
se približi svom prekoračenju.
4.9. Komparatorski modul
PIC 16F628A posjeduje dva analogna komparatora. Ulazi u komparatore su multipleksirani sa
RA0 pinom kroz RA3 pin. CMCON (Comparator Configuration register) registar kontrolira
ulaze i izlaze u komparator. Blok dijagram komparatora je prikazan na slici.
PIC 16F628A posjeduje osam modova za operacije sa komparatorima, tu je bitan CMCON
registar jer on odabire potreban mod. Na slici je prikazano osam mogućih modova za
komparator, TRISA registar kontrolira prijenos podataka za svaki mogući mod.
RA3 pin i RA4 pin su konfigurirani kao digitalni izlazi, pinovi RA0 i RA1 su konfigurirani
kao invertirani ulazi V-, a pin RA2 je konfiguriran kao neinvertirani ulaz V+ u oba
komparatora.
4.10. Podatkovna EEPROM memorija
PIC 16F628A ima 128 bayt-a EEPROM memorijskih lokacija na adresama od 00h do 7Fh.
Najvažnija osobina ove memorije je da ne gubi sadržaj prilikom nestanka napona napajanja.
Stoga ova memorija služi za čuvanje parametara nekog procesa ili nekih važnih promjenjivih
podataka.
EEPROM memoriji se pristupa preko četiri SFR registar a to su:
EECON1 – sadrži kontrolne bit-ove
EECON2 (nije fizički implementiran registar) – služi da zaštiti EEPROM od slučajnog upisa
EEDATA – sadrži podatak koji je pročitan ili ga treba upisati
EEADR – sadrži adresu EEPROM lokacije kojoj se pristupa
Iz EEPROM memorije čitamo podatak tako da setiramo RD bit koji inicira prijenos podataka
s adrese koja se nalazi u registru EEADR u EEDATA registar. Za čitanje podataka nije
potrebno neko vrijeme kao za upis pa se taj podatak može koristiti već u sljedećoj instrukciji.
Primjer dijela programa koji vrši čitanje podataka iz EEPROM-a
BSF STATUS, RP0 ; Banka 1 jer je EECON1 na adresi 9Ch
MOVLW ADRESS ; Adresa lokacije koja se čita
MOVWF EEADR ; Adresa se prebacuje u EEADR
BSF EECON1, RD ; Čitanje iz EEPROM-a
MOVF EEDATA, W ; W ← EEDATA
BCF STATUS, RP0 ; Vraćanje u Banku 0
Da bi upisali podatak u EEPROM memoriju treba prvo upisati adresu željene memorijske
lokacije u EEADR registar a podatak u EEDATA registar. Nakon upisa, WR bit će biti
resetiran, a EEIF setiran, što se može iskoristiti za obradu prekida. Vrijednost 55h i AAh su
prvi i drugi ključ koji onemogućuje da dođe do slučajnog upisa u EEPROM. Te dvije
vrijednosti se upisuju u EECON2, koji služi samo za prihvaćanje ove dvije vrijednosti i time
spriječi slučajan upis.
Primjer dijela programa koji vrši upis podataka u EEPROM memoriju
BSF STATUS, RP0 ; Banka 1, jer je EEADR na 9Bh
BSF EECON1, WREN ; omogućavanje upisa
BCF INTCON, GIE ; svi prekidi se onemogućavaju
BTFSC INTCON, GIE
GOTO $-2
1. MOVLW 55h
2. MOVWF EECON2 ; Upis prve adrese 55h u EECON2
3. MOVLW AAh
4. MOVWF EECON2 ; Upis druge adrese AAh u EECON2
5. BSF EECON1, WR ; Inicira se upis 1
BSF INTCON, GIE ; Prekidi se omogućavaju
Programske linije u primjeru označene s 1, 2, 3, 4 i 5 moraju biti izvršene redoslijedom kojim
su napisane i u pravilnim vremenskim razmacima, tako da je vrlo važno onemogućiti prekide
za vrijeme izvršavanja tih instrukcija, nakon upisa prekidi se mogu omogućiti.
4.11. Generator takta
PIC 16F628A može raditi sa šest različitih konfiguracija oscilatora. A to su:
LP Low Power Crystal
XT Crystal/Resonator
HS High Speed Crystal/Resonator
RC External Resistor/Capacitor (2 modes)
INTOSC Internal Precision Oscillator (2 modes)
EC External Clock In
Mikrokontroler može da radi i na 32 kHz i tada ima jako malu potrošnju energije.
Najjednostavnija varijanta je RC oscilator (slika). Ova varijanta oscilatora može se koristiti u
aplikacijama gdje se ne zahtjeva precizna procjena vremenskih intervala.
Frekvencija osciliranja ovisi o naponu napajanja, vrijednosti REXT i CEXT, kao i o radnoj
temperaturi. REXT treba biti u granicama od 3kΩ do 100kΩ za napon napajanja veći od 3V, a
od 10kΩ do 100kΩ za napon napajanja manji od 3V. CEXT se može i izostaviti, ali zbog
stabilnosti se preporučuje 20pF. Na RA6/OSC2/CLKOUT generira se taktni impuls čija je
perioda četiri puta veća od periode oscilatora.
Kod vremenski zahtjevnih uređaja treba ugrađivati kvarcni oscilator ili keramički rezonator.
Vrijednosti C1 i C2 (slika), trebaju biti jednake.
Preporuka proizvođača za vrijednosti C1 i C2 kod nekih konfiguracija je:
Odabir kondenzatora za keramički oscilator
Mod Frekvencija OSC1 (C1) OSC2 (C2)
XT455 kHz2.0 MHz4.0 MHz
22-100 pF15-68 pF15-68 pF
22-100 pF15-68 pF15-68 pF
HS 8.0 MHz 10-68 pF 10-68 pF
16.0 MHz 10-22 pF 10-22 pF
Odabir kondenzatora za kristalni oscilator
Mod Frekvencija OSC1 (C1) OSC2 (C2)
LP32 kHz220 kHz
15-30 pF0-15 pF
15-30 pF0-15 pF
XT100 kHz2 Mhz4 Mhz
68-150 pF15-30 pF15-30 pF
15-200 pF15-30 pF15-30 pF
HS8 MHz10 Mhz20 Mhz
15-30 pF15-30 pF15-30 pF
15-30 pF15-30 pF15-30 pF
4.12. Reset
Reset služi da bi sve registre mikrokontrolera doveli u početni položaj. Znači ako se
mikrokontroler „smrzne“ ili smo ga tek uključili treba ga resetirati. Da bi spriječili slučajno
dovođenje logičke „0“ na MCLR nožic, potrebno ju je preko otpornika spojiti na pozitivan pol
napajanja Vdd, slika.
PIC 16F628A ima više vrsta resetiranja:
1. Resetiranje pri dovođenju napajanja Power-on reset (POR)
2. Dovođenje logičke „0“ naMCLR
3. MCLR reset za vrijeme „Sleep“ načina rada
4. Reset pri prekoračenju Watchdog tajmera
5. WDT reset za vrijeme „Sleep“ načina rada
6. Reset kod pada napona napajanja Brown-Out reset (BOR)
4.13. Prekidi (Interrupts)
Prekid je mehanizam mikrokontrolera koji omogućava da se na neke događaje odgovori u
trenutku kada se oni dogode, bez obzira što mikrokontroler radi u tom trenutku. Svaki prekid
mijenja tok izvršavanja programa, prekida ga, te nakon izvršenja prekidnog potprograma
nastavlja na istom mjestu kao što je prikazano na slici. Kontrolni registar prekida naziva se
INTCON i nalazi se na adresi 0Bh. Njegova uloga je da omogući ili zabrani prekide, a u
slučaju da su zabranjeni, registrira pojedinačne zahtjeve prekida preko svojih bitova.
PIC 16F628A ima 10 izvora prekida, neki su interni, a drugi su eksterni:
External Interrupt RB0/INT
TMR0 Overflow Interrupt
PORTB Change Interrupts (pins RB<7:4>)
Comparator Interrupt
USART Interrupt TX
USART Interrupt RX
CCP Interrupt
TMR1 Overflow Interrupt
TMR2 Match Interrupt
Data EEPROM Interrupt
Na slici je prikazana shema logike za prihvaćanje zahtjeva za prekidom
Pomoću GIE (General Interrupt Enable) bita omogućujemo bilo koji od deset mogućih
prekida
5. Set instrukcja
5.1. Aritmetika i logika
Od svih aritmetičkih operacija PIC kao i većina mikrokontrolera podržava samo zbrajanje i
oduzimanje. Zastavice (flags) C, DC i Z postavljaju se u ovisnosti rezultata te dvije operacije,
ali sa izuzetkom jer se oduzimanje vrši kao zbrajanje s negativnom vrijednošću, zastavica C je
poslije oduzimanja inverzna, znači setirana je ako je operacija moguća, a resetirana ako je
veći broj oduzet od manjeg. Logička jedinica PIC-a ima mogućnost izvođenja operacija I, ILI,
EX-ILI, negacije (COMF) i rotiranja bitova (RLF i RRF) Instrukcije koje rotiraju lijevo ili
desno pomiču bitove kroz zastavicu C za jedno mjesto. Bit koji izlazi iz registra upisuje se u
C zastavicu, te se upisuje u bit na suprotnoj strani registra.
5.2. Set instrukcija mikrokontrolera PIC 16F628A
Tablica 5.2.1. Popis instrukcija za mikrokontroler PIC 16F628A
Instrukcija OpisTrajanje
u strojnim ciklusima
Utječe na STATUS bit-ove
Operacije nad byte-imaADDWF f, d
Zbrajanje akumulatora i registra f1
C, DC, Z
ANDWF f, d
Logički I akumulatora i registra f 1Z
CLRF f Brisanje registra f 1 ZCLRW ---
Brisanje akumulatora 1Z
COMF f, d Komplement registra f 1 ZDECF f, d Smanjenje registra f za 1 1 Z
DECFSZ f,dSmanjenje registra f za 1, preskače sljedeću instrukciju ako je rezultat 0
1(2)
nijedan
INCF f, d Povećanje registra f za 1 1 Z
INCFSZ f, dPovećanje registra f za 1, preskače sljedeću instrukciju ako je rezultat 0
1(2)
nijedan
IORWF f, d Inkluzivni ILI akumulatora i f registra 1 ZMOVF f, d Premještanje sadržaja registra f 1 Z
MOVWF fPremještanje sadržaja akumulatora u registar f
1nijedan
NOP - Nul-operacija 1 nijedan
RLF f, d Rotiranje registar f u lijevo kroz Carry bit1
C
RRF f, d Rotiranje registra f u desno kroz Carry bit 1 CSUBWF f, d Oduzimanje akumulatora od registra f 1 C, DC, ZSWAPF f, d Zamjena riječi registra f 1 nijedanXORWF f, d Ekskluzivno ILI akumulatora i registar f 1 Z
Operacije nad bit-ovimaBCF f, b Brisanje bit-a b registra f 1 nijedanBSF f, b Postavljanje bit-a b registar f 1 nijedanBTFSC f, b Preskače sljedeću instrukciju ako je rezultat 0 1(2) nijedanBTFSS f, b Preskače sljedeću instrukciju ako je rezultat 1 1(2) nijedan
Instrukcije nad konstantama i kontrolne instrukcijeADDLW k Zbrajanje akumulatora i konstante k 1 C, DC, ZANDLW k Logičko I akumulatora i konstante k 1 ZCALL k Poziv potprograma 2 nijedanCLRWDT - Brisanje sigurnosnog brojača 1 ¿, PDGOTO k Grananje programa 2 nijedanIORLW k Inkluzivno ILI akumulatora i konstante k 1 ZMOVLW k Upisivanje konstante k u akumulator 1 nijedanRETFIE - Povratak iz prekidne rutine 2 nijedan
RETLW kPovratak iz potprograma s vrijednošću k u akumulatoru
2nijedan
RETURN - Povratak iz potprograma 2 nijedanSLEEP - Postavljanje mikrokontrolera u stand by mod 1 ¿, PDSUBLW k Oduzimanje akumulatora od konstante k 1 C, DC, ZXORLW k Ekskluzivno ILI akumulatora i konstante k 1 Z