razvojni sistem za pic16f877a

138
Elektronski fakultet u Nisu Mikroprocesorski sistemi RAZVOJNI SISTEM ZA MIKROKONTROLER PIC 16F877A Mentor: Studenti: Prof.Dr Mile Stojcev Branislav Dimirijevic, Slobodan Aleksic, Ivan Antic

Upload: tarik-omercehajic

Post on 26-Aug-2014

175 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Razvojni Sistem Za PIC16F877A

Elektronski fakultet u Nisu Mikroprocesorski sistemi

RAZVOJNI SISTEM ZA MIKROKONTROLER

PIC 16F877A

Mentor: Studenti: Prof.Dr Mile Stojcev Branislav Dimirijevic, Slobodan Aleksic, Ivan Antic

Page 2: Razvojni Sistem Za PIC16F877A

2

Sadrzaj:

UVOD------------------------------------------------------------------------------------ 1.MIKROKONTROLERI-------------------------------------------------------------

1.1 Mikroprocesori u odnosu na mikrokontrolere-------------------------------- 1.2 Mikroprocesori------------------------------------------------------------------- 1.3 Mikrokontroleri ----------------------------------------------------------------- 1.4 Razlika izmedju mikroprocesora i mikrokontrolera------------------------- 1.5 Terminologija-------------------------------------------------------------------- 1.6 Mikroracunar--------------------------------------------------------------------- 1.7 Ostala kola za podrsku rada sistema----------------------------------------- - 1.8 Mikrokontroler PIC16F877A--------------------------------------------------- 1.9 Osnovne karakteristike mikrokontrolera PIC16F877A--------------------- 1.10 Kratak opis mikrokontrolera PIC16F877A---------------------------------- 1.11 Raspored nozica ---------------------------------------------------------- ----- 1.12 Generator takta (Oscilator)----------------------------------------------- ---- 1.13 Takt/Instrukcijski ciklus------------------------------------------------------- 1.14 Reset------------------------------------------------------------------------------ 1.15 Watchdog timer----------------------------------------------------------------- 1.16 Prekidi---------------------------------------------------------------------------- 1.17 U/I portovi----------------------------------------------------------------------- 1.18 A/D konverzija------------------------------------------------------------------ 1.19 Strujna,naponska i temperaturna ogranicenja------------------------------- 1.20 Organizacija memorije--------------------------------------------------------- 1.21 Tajmeri -------------------------------------------------------------------------- 1.22 CCP moduli --------------------------------------------------------------------- 1.23 Ostale periferne jedinice------------------------------------------------------- 1.24 Set instrukcija mikrokontrolera PIC16F877A------------------------------

2.HARDVERSKA STRUKTURA RAZVOJNOG SISTEMA------------------- 2.1 Programator---------------------------------------------------------------------- 2.2 Modifikovani Tait programator------------------------------------------------ 2.3 Mikrokontrolerski sistem-------------------------------------------------------- 2.4 Tasteri------------------------------------------------------------------------------ 2.5 Led--------------------------------------------------------------------------------- 2.6 Max232---------------------------------------------------------------------------- 2.7 Deo za ispravljanje i stabilizaciju napona------------------------------------- 2.8 Deo za analogno-digitalnu konverziju----------------------------------------- 2.9 Deo za povezivanje LCD-a----------------------------------------------------- 2.10 Povezivanje kola za reset i oscilatora---------------------------------------- 2.11 Fizicki izgled stampanih plocica---------------------------------------------- 2.12 Tabelarni prikaz komponenata sa vrednostima koriscenih za razvojni sistem----------------------------------------------------------------------------------

3.PRATECI SOFTVER ZA PC I DEMO PROGRAMI--------------------------

4 5 5 5 7 8 8 9

10 10 11 11 13 14 16 17 22 22 24 31 32 33 37 37 38 39 60 60 63 63 64 65 67 67 68 68 73 73

75 78

Page 3: Razvojni Sistem Za PIC16F877A

3

3.1 Instalacija softvera--------------------------------------------------------------- 3.2 Kreiranje aplikacija na programskom jeziku C za mikrokontroler PIC16F877A-------------------------------------------------------------------------- 3.3 Tipovi podataka------------------------------------------------------------------ 3.4 Prekidi----------------------------------------------------------------------------- 3.5 Primena programskog jezika C (primeri) ------------------------------------ 3.6 Upisivanje parametara u DATA EEPROM----------------------------------- 3.7 Opcije za optimizaciju kôda pri kompajliranju ------------------------------ 3.8 Program za ukljucivanje i iskljucivanje LED-------------------------------- 3.9 Program koji upravlja radom LCD-a------------------------------------------ 3.10 Program za komunikaciju razvojnog sistema sa racunarom--------------

ZAKLJUCAK-------------------------------------------------------------------------- DODATAK-----------------------------------------------------------------------------

78

105 106 107 108 110 111 111 116 120 125 126

Page 4: Razvojni Sistem Za PIC16F877A

4

UVOD Sistem oplemenjen mikrokontrolerom u potpunosti zamenjuje coveka, malih je dimenzija i mala je potrosnja energije. To nas je podstaklo da odaberemo zadatak koji zahteva realizaciju razvojnog sistema sa LED indikatorima, LCD-om i komunikaciju s racunarom. Naravno, centralana komponenta naseg sistema je mikrokontroler PIC16F877A. Realizacija ovakvog sistema zahtevala je veliku upornost,trud i pozrtvovanje pocev od idejnog resenja zadatka, preko projektovanja plocica u programskom paketu “Protel” , stampanja plocica, lemljenja komponenata na ploce, testiranja i usavrsavanja citavog sistema. Cilj nam je bio da od svih ideja odaberemo onu pravu koja podrazumeva, pre svega, jedostavnost, male dimenzije i nisku cenu. U ovom trenutku smo svesni da je resenje moglo da bude efikasnije, ali permanentnim ispitivanjem smo se uverili da i ovo nase resenje daje dobre rezultate. Program napravljen na racunaru se uz pomoc adekvatnog softvera (mi smo koristili IC-Prog) i 25-to pinskog kabla prenosi u nas razvojni sistem. Tu ga prihvata programator koji puni mikrokontrler zahtevanim programom. Po zavrsetku programiranja na monitoru racunara dobijamo informaciju da je zahtevano ucitavanje programa u mikrokontroler zavrseno i tada mozemo poceti sa radom. Komunikacija korisnika sa ovim sistemom omogucena je sa 7 tastera od kojih je jedan Reset taster,a ostali su tasteri za odabir režima rada. Pritiskom svakog tastera izvrsava se razlicita sekvenca programa koja se nalazi u mikokontroleru. Korisnik od sistema moze da dobija informacije o njegovom radu na tri nacina: preko LED indikatora koji se pali onako kako je to korisnik unapred programski definisao u odredjenom modu rada, LCD-a na kome se ispisuje tekst koji,takodje, korisnik prethodno definise u programu i komunikacija sa racunarom gde, na primer, mozemo posmatrati brojac na monitoru racunara i resetovati ga sa Reset tastera na nasem sistemu. Razvojni sistem je, za komunikaciju sa racunarom, vezan devetopinskim kablom. 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 izvsavaju 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 PIC 16F877A. Drugi deo ce sadrzati hardverski opis citavog sistema, a u trecem delu cemo detaljno opisati kako se kreira program na racunaru koji treba loadovati (ucitati) u PIC, koji softver se koristi u te svrhe, kako se do njega dolazi, kako se on instalira i kako ga treba podesiti na racunaru. Tu cemo se potruditi da kroz primere objasnimo kako se koristiti razvojni sistem i kako funkcionise sam mikrokontroler.

Page 5: Razvojni Sistem Za PIC16F877A

5

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.

Page 6: Razvojni Sistem Za PIC16F877A

6

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

Page 7: Razvojni Sistem Za PIC16F877A

7

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

Page 8: Razvojni Sistem Za PIC16F877A

8

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.5 Terminologija

Kako bi opis mikrokontrolera bio jasni dacemo, pre svega, objasnjenja za neke osnovne termine koje cemo koristiti u daljem tekstu: U/I pin – spoljni pin prema spoljasnjem svetu koji se moze konfigurisati kao ulazni, odnosno izlazni. U/I je neophodan u vecini slucajeva da omoguci mikrokontroleru da komunicira, upravlja ili cita informacije. Softver – informacije koje su mokrokontroleru potrebne za rad. Ovaj softver kreira onaj koji odredjuje kako ce mikrokontroler raditi. Bez softvera mikrokontroler nije upotrebljiv. Softver se moze kreirati u raznim jezicima kao sto su: C, Paskal, Asembler, Basic. Programator – uredjaj koji omogucava da program bude upisan u memoriju mikrokontlolera. Postoje razni programatori za PIC mikrokontrolere. Nabrojimo samo neke koji se najcesce koriste: AllPIC programator, TAIT programator, PONY programator. Ovi programatori u stanju su da programiraju pored PIC mikrokontrolera i dosta drugih tipova kola slicnih funkcionalnosti (sto zavisi uglavnom od tipa programatora), kao sto su recimo Atmel mikrokontroleri ili serijski EEPROM. U nasem projektu smo koristili TAIT programator i softver za njega Icprog. Nesto vise o ovom programatoru recicemo kasnije.

Page 9: Razvojni Sistem Za PIC16F877A

9

Izvorna datoteka – program napisan u asemblerskom jeziku koji mi razumemo. Izvorna datoteka se mora prvo obraditi (iskompajlirati) kako bi je mikrokontroler razumeo. Asembler / kompajler – softverki paket koji prevodi izvornu datoteku u objektnu. Provera gresaka je vec ugradjena i ona je veoma korisna mogućst u trazenju gresaka u programu posto se greske markiraju za vreme procesa asembliranja. MPASM je najnovija verzija asemblera firme Microchip koji podrzava celu PIC familiju. Objektna datoteka – ovo je datoteka koju generise asembler / kompajler.. Ekstenzija ove datoteke je .OBJ ili .HEX zavisno od direktive u asembleru. Mi cemo u nasem projeku i za nas programator koristiti datoteke sa ekstenzijom .HEX. Bagovi – greske koje mi kreiramo nenemerno u toku pisaja programa. Ovde spadaju greske od jednostavnih u kucanju do pogresnog koriscenja sintakse jezika. Vecinu ovih gresaka ce pronaci kompajler. 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

Page 10: Razvojni Sistem Za PIC16F877A

10

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 PIC16F877A

Kao sto je u uvodu naglaseno centralna komponenta naseg sistema je mikrokontoler PIC16F877A 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)

Page 11: Razvojni Sistem Za PIC16F877A

11

1.9 Osnovne karakteristike mikrokontrolera PIC16F877A:

• 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 PIC16F877A

Kao sto smo vec naglasili mikrokontroler PIC16F877A 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

Page 12: Razvojni Sistem Za PIC16F877A

12

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 PIC16F877A

Page 13: Razvojni Sistem Za PIC16F877A

13

1.11 Raspored nozica

Jezgro mikrokontrolera PIC16F887A 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 PIC16F877A

• 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).

Page 14: Razvojni Sistem Za PIC16F877A

14

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 jednaki.

Sl.1.8 Nacin povezivanja XT oscilatora

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

Page 15: Razvojni Sistem Za PIC16F877A

15

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-33 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

Page 16: Razvojni Sistem Za PIC16F877A

16

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

Page 17: Razvojni Sistem Za PIC16F877A

17

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 pribvljanje, 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)

Page 18: Razvojni Sistem Za PIC16F877A

18

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

Page 19: Razvojni Sistem Za PIC16F877A

19

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:

V7.0R1R2

R1Vdd <+

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

Page 20: Razvojni Sistem Za PIC16F877A

20

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 PIC16F877A 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

oscilatora PWRT omogucen PWRT

onemogucen Budjenje iz

SLEEP rezima rada

XT, HS, LP 72 ms + 1024 Tosc

1024 Tosc 1024 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 normalnom radu 000h 000u uuuu

MCLR reset prilikom SLEEP rezima rada 000h 0001 0uuu

WDT Reset pri normalnom radu 000h 0000 1uuu

WDT Wake-up (budjenje iz SLEEP

rezima rada) PC+1 uuu0 0uuu

Interapt 004h uuu1 0uuu

Page 21: Razvojni Sistem Za PIC16F877A

21

Tabela 1.6

Registar Power-on reset

MCLR reset pri: -normalnom radu

-SLEEP mod WDT reset pri normalnom radu

Budjenje iz SLEEP -interapt

-WDT time out

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

Page 22: Razvojni Sistem Za PIC16F877A

22

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 normalnim radom. 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 PIC16F877A 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

Page 23: Razvojni Sistem Za PIC16F877A

23

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 os 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 sostverski resetovati. Na sledecoj slici (sl. 1.18) prikazana je logicka sema svih interrupt-a sa tabelom u kojoj su oni pobrojani:

Page 24: Razvojni Sistem Za PIC16F877A

24

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).

Page 25: Razvojni Sistem Za PIC16F877A

25

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

Page 26: Razvojni Sistem Za PIC16F877A

26

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 majmanje koliko i jedan masinski ciklus (4 * Fosc). 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

Page 27: Razvojni Sistem Za PIC16F877A

27

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.

Page 28: Razvojni Sistem Za PIC16F877A

28

Sl.1.25. Struktura pinova od RC0 do RC2 i od RC5 do RC7

Sl.1.26.Struktura pinova od RC3 i RC4

Sl.1.27 Tabela registara koji sluze za konfigurisanje PORTC

Page 29: Razvojni Sistem Za PIC16F877A

29

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

Page 30: Razvojni Sistem Za PIC16F877A

30

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

Page 31: Razvojni Sistem Za PIC16F877A

31

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

Page 32: Razvojni Sistem Za PIC16F877A

32

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, MCLR i RA4)

-0.3V do(Vdd+0.3)

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

Page 33: Razvojni Sistem Za PIC16F877A

33

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 PIC16F877A 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.

Page 34: Razvojni Sistem Za PIC16F877A

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

Page 35: Razvojni Sistem Za PIC16F877A

35

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 brojač (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.

Page 36: Razvojni Sistem Za PIC16F877A

36

Sl.1.36 Mapa registra PIC16F877

Page 37: Razvojni Sistem Za PIC16F877A

37

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 (TMR 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. PIC16F877A 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.

Page 38: Razvojni Sistem Za PIC16F877A

38

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:

Page 39: Razvojni Sistem Za PIC16F877A

39

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. 1.24 Set instrukcija mikrokontrolera PIC16F877A U tabelei 1.8 dat je prikaz instrukcija mikrokontrolera PIC16F877A. Tabela 1.8: Set instrukcija PIC16F877A

Instrukcija instr flegovi trajanje ADDWF f, d add W and f C,DC,Z 1 ANDWF f, d AND W with f Z 1 CLRF f Clear f Z 1 CLRW Clear W Z 1 COMF f, d Complement f Z 1 DECF f, d Decrement f Z 1

DECFSZ f, d Decrement f, Skip if 0 - 1

INCF f, d Increment f Z 1

INCFSZ f, d Increment f, Skip if 0 - 1

IORWF f, d Inclusive OR W with f Z 1

MOVF f, d Move f Z 1 MOVWF f Move W to f - 1 NOP Operation - 1

RLF f, d Rotate left f through carry C 1

RRF f, d Rotate right f through carry C 1

SUBWF f, d Subtract W from f C,DC,Z 1 SWAPF f, d Swap nibles in f - 1

XORWF f, d Exclusive OR W with f Z 1

BCF f, b Bit Clear f - 1 BSF f, b Bit Set f - 1

Page 40: Razvojni Sistem Za PIC16F877A

40

BTFSC f, b Bit Test f, Skip if Clear - 1/2

BTFSS f, b Bit Test f, Skip if Set - 1/2

ADDLW k Add literal and W C,DC,Z 1

ANDLW k AND literal with W Z 1

CALL k Call subrutine - 2

CLRWDT Clear Watchdog Timer TO’, PD’ 1

GOTO k Go to address - 2

IORLW k Inclusive OR literal with W Z 1

MOVLW k Move literal to W - 1

RETFIE Return from interrupt - 1

RETLW k Return with literal in W - 1

RETURN Return from subroutine - 1

SLEEP Go into stanby mode TO, PD 1

SUBLW k Subtract W from literal C,DC,Z 1

XORLW k Exclusive OR literal with W Z 1

1. ADDWF f,d Operandi: f (0 - 255) d (0 - 1) Operacija: (W) + (f) →(dest) Dodaje sadrzaj registra W sadrzaju registra 'f'. Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer: ADDWF FSR, 0 Pre instrukcije:

W= 0x17 FSR = 0xC2

Page 41: Razvojni Sistem Za PIC16F877A

41

Posle instrukcije

W= 0xD9 FSR = 0xC2

2. ANDWF f,d Operandi: f (0 - 127) d (0 - 1) Operacija: (W) .AND. (f) → (dest) Logicki AND sa sadrzajima reistra W i 'f' Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer 1: ANDWF FSR, 1 Pre instrukcije:

W= 0x17 FSR = 0xC2 Posle instrukcije: W = 0x17 FSR = 0x02 Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 0 a da pritom ostali zadrze svoje stanje. Recimo u PORTB treba ugasiti 2,3 i 6 bit, bez obzira na mjihovo renutno stanje. Ostali bitovi (0,1,4,5,7) treba da zadrze njihovo trenutno stanje.(Na izlazu nam treba x0xx00xxb) MOWLW 10110011b ;u bitove koje gasimo ide 0 ANDWF POTRB, 1 Pre instrukcije: W = 10110011b PORTB = 01100110b Posle instrukcije: W = 10110011b

Page 42: Razvojni Sistem Za PIC16F877A

42

PORTB = 00100010b

3. CLRF f Operandi: f (0 - 127) Operacija: 00h → (f) Brise sadrzaj registra 'f' i setuje Z flag. Primer: CLRF FLAG_REG Pre instrukcije:

FLAG_REG = 0x5A Posle instrukcije:

FLAG_REG = 0x00 Z = 1

4. CLRW Operandi: nema Operacija: 00h → (W) Brise sadrzaj registra W i setuje Z.flag Primer: CLRW Pre instrukcije:

W = 0x5A Posle instrukcije

W = 0x00 Z = 1

5. COMF f,d Operandi: f (0 - 127) d (0 - 1) Operacija: (f) → (dest) Pravi komplement sadrzaja registra 'f'.

Page 43: Razvojni Sistem Za PIC16F877A

43

Ako je 'd' = 0 rezultat se smesta u registat W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer: COMF REG1,0 Pre instrukcije:

REG1 = 0x13 Posle instrukcije

REG1 = 0x13 W = 0xEC

odnosno

REG1 = 0b00010011 W = 0b11101100

6. DECF f, d Operandi: f (0 - 127) d (0 - 1) Operacija: (f) - 1 → (dest) Umanjuje zadrzaj registra 'f' Ako je 'd' = 0 rezultat se smesta u registat W. Ako je 'd'= 1 rezultat se smesta u registar 'f'. Primer: DECF CNT,1 Pre instrukcije:

CNT = 0x01 Z = 0

Posle instrukcije

CNT = 0x00 Z = 1

7. DECFSZ f,d Operandi: f (0 - 127) d (0 - 1)

Page 44: Razvojni Sistem Za PIC16F877A

44

Operacija: (f) - 1 → (dest); preskoci ako je rezultat 0 Umanjuje sadrzaj registra 'f'. Ako je 'd' = 0 rezultat se smesta u registat W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Ako je rezultat 0, preskace se operacija koja neposredno sledi. Umesto nje se izvrsava NOP. Instrukcija traje 2 ciklusa. Operacija se koristi za uslovno granjane programa. Primer: OVDE DECFSZ CNT, 1 GOTO PETLJA DALJE ---

--- ---

Pre instrukcije:

PC = adresa OVDE Posle instrukcije

CNT = CNT - 1 Ako je CNT = 0

PC = adresa DALJE Ako je CNT <> 0

PC = adresa OVDE + 1

8. INCF f, d Operandi: f (0 - 127) d (0 - 1) Operacija: (f) + 1 → (dest) Uvecava sadrzaj registra 'f' Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer: INCF CNT,1 Pre instrukcije:

CNT = 0xFF

Page 45: Razvojni Sistem Za PIC16F877A

45

Z = 0 Posle instrukcije

CNT = 0x00 Z = 1

9. INCFSZ f,d Operandi: f (0 - 127) d (0 - 1) Operacija: (f) + 1 → (dest); preskoci ako je rezultat 0 Uvecava sadrzaj registra 'f'. Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'.Ako je rezultat 0, preskace se operacija koja neposredno sledi. Umesto nje se izvrsava NOP. Instrukcija traje 2 ciklusa. Operacija se korist za uslovno granjane programa. Primer: OVDE INCFSZ CNT, 1 GOTO PETLJA DALJE --- --- --- Pre instrukcije:

PC = adresa OVDE Posle instrukcije:

CNT = CNT + 1 Ako je CNT = 0:

PC = adresa DALJE Ako je CNT <> 0:

PC = adresa OVDE + 1

10. IORWF f,d Operandi: f (0 - 127) d (0 - 1)

Page 46: Razvojni Sistem Za PIC16F877A

46

Operacija: (W) .OR. (f) → (dest) Logicki OR sa sadrzajima reistra W i 'f' Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u registar 'f'. Primer:

IORWF RESULT,0 Pre instrukcije:

W = 0x91 RESULT = 0x13

Posle instrukcije:

W = 0x13 RESULT = 0x93

Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 1 a da pritom ostali zadrze svoje stanje. Recimo u PORTB treba ugasiti 2,3 i 6 bit, bez obzira na njihovo renutno stanje. Ostali bitovi (0,1,4,5,7) treba da zadrze svoje trenutno stanje. (Na izlazu nam treba x1xx11xxb) MOWLW 01001100b ;u bitove koje palimo ide 1 ANDWF POTRB,1 Pre instrukcije: W = 01001100b PORTB = 01100110b Posle instrukcije: W = 01001100b PORTB = 01110110b

11. MOVF f,d Operandi: f (0 - 127) d (0 - 1) Operacija : (f) → (dest) Sadrzaj registra 'f' ce biti stavljen u odredisni registar. Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat ce biti smesten u taj isti registar 'f'. Ovo moze da se koristi kao test sadrzaja registra jer ce status Z biti normalno opsluzen. Primer: MOVF FSR,0 Posle instrukcije:

Page 47: Razvojni Sistem Za PIC16F877A

47

W ce imati vrednist FSR registra.

12. MOVWF f Operandi: f (0 - 127) Operacija: (W) → (f) Sadrzaj registra W ce biti stavljen u registar 'f'. Primer: MOVWF OPTION,0 Pre instrukcije:

OPTION = 0xFF W = 0x4F

Posle instrukcije:

OPTION = 0x4F W = 0x4F

13. NOP

Operandi: Nema Operacija: Nema Kontroler jednostavno ne radi nista, osim sto trosi vreme, jer ova instrukcija traje jedan masinski ciklus. Primer: NOP

14. RLF f, d Operandi: f (0 - 127) d (0 - 1)

Operacija: Rotira sardrzaj registra u levo, i po potrebi setuje C bit u statusnom registru. Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'.

Page 48: Razvojni Sistem Za PIC16F877A

48

Primer: RLF REG1,0 Pre instrukcije:

REG1 = 1110 0110 C = 0

Posle instrukcije

REG1 = 1110 0110 W = 1100 1100 C = 1

15. RRF f, d Operandi: f (0 - 127) d (0 - 1)

Operacija: Rotira sardrzaj registra u desno, i po potrebi setuje C bit u statusnom registru. Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u u registar 'f'. Primer: RRF REG1,0 Pre instrukcije:

REG1 = 1110 0110

C = 0 Posle instrukcije:

REG1 = 1110 0110 W = 0111 0011 C = 0

16. SUBWF f, d

Operandi: f (0 - 127) d (0 - 1)

Page 49: Razvojni Sistem Za PIC16F877A

49

Operacija: (f) - (W) → (dest) Oduzima sadrzaj registra W od sadrzaja 'f' registra i zavisno od rezultata setuje C bit u statusnom registru.Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u registar 'f'. Primer 1: SUBWF REG1,1 Pre instrukcije:

REG1 = 3 W = 2 C = ?

Posle instrukcije:

REG1 = 1 W = 2 C = 1 ; rezultat je pozitivan

Primer 2: Pre instrukcije:

REG1 = 2 W = 2 C = ?

Posle instrukcije

REG1 = 0 W = 2 C = 1 ; rezultat je nula

Primer 3: Pre instrukcije:

REG1 = 1 W = 2 C = ?

Posle instrukcije

REG1 = FF W = 2 C = 0 ; rezultat je negativan

Page 50: Razvojni Sistem Za PIC16F877A

50

17. SWAPF f, d Operandi: f (0 - 127) d (0 - 1) Operacija: (f <3:0>) → (dest <7:4>), (f <7:4>) → (dest <3:0>) Visi i nizi nibl u registru 'f' ce zameniti mesta.Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u registar 'f'. Primer: SWAPF REG1,0 Pre instrukcije:

REG1 = A5 Posle instrukcije:

REG1 = A5 W = 5A

18. XORWF f, d Operandi: f (0 - 127) d (0 - 1) Operacija: (W) .XOR. (f) → (dest) Logicki ekskluzivni OR sa sadrzajima reistra W i 'f'Ako je 'd' = 0 rezultat se smesta u registar W. Ako je 'd'= 1 rezultat se smesta u registar 'f'. Primer: XORWF REG,1 Pre instrukcije:

W = B5 RESULT = AF

Posle instrukcije:

W = B5 RESULT = 1A

Page 51: Razvojni Sistem Za PIC16F877A

51

19. BCF f, b Operandi: f (0 - 127) b (0 - 7) Operacija: 0 → (f<b>) Resetuje bit 'b' u registru 'f'. Primer: BCF FLAG_REG, 7 Pre instrukcije:

FLAG_REG = C7 Posle instrukcije:

FLAG_REG = 47

20. BSF f, b Operandi: f (0 - 127) b (0 - 7) Operacija: 1 → (f<b>) Setuje bit 'b' u registru 'f'. Primer: BSF FLAG_REG, 7 Pre instrukcije:

FLAG_REG = 0A Posle instrukcije

FLAG_REG = 8A

21. BTFSC f, b Operandi: f (0 - 127) b (0 - 7) Operacija: Preskoci ako je (f<b>) = 0.

Page 52: Razvojni Sistem Za PIC16F877A

52

Ako je bit 'b' u registru 'f' nula tada ce naredna instrukcija biti preskocena.Ako je bit 'b' nula, instrukcija koja neposredno sledi se ne izvrsava. Umesto nje se izvrsava NOP i u tom slucaju instrukcija traje dva ciklusa. Primer: OVDE BTFSC FLAG,1 NIJE GOTO RUTINA1 NASTAVI -- -- Pre instrukcije:

PC = adresa OVDE Posle instrukcije Ako je FLAG<1> = 0

PC = adresa NASTAVI Ako je FLAG<1> = 1

PC = adresa NIJE

22. BTFSS f, b Operandi: f (0 - 127) b (0 - 7) Operacija: Preskoci ako je (f<b>) = 1. Ako je bit 'b' u registru 'f' setovan tada ce naredna instrukcija biti preskocena.Ako je bit 'b' setovan, instrukcija koja neposredno sledi se ne izvrsava. Umesto nje se izvrsava NOP i u tom slucaju instrukcija traje dva ciklusa. Primer: OVDE BTFSC FLAG,1 NIJE GOTO RUTINA1 NASTAVI -- -- Pre instrukcije:

PC = adresa OVDE Posle instrukcije: Ako je FLAG<1> = 0

PC = adresa NIJE

Page 53: Razvojni Sistem Za PIC16F877A

53

Ako je FLAG<1> = 1 PC = adresa NASTAVI

23. ADDLW k Operandi: k (0 - 255) Operacija: (W) + k → (W) Sadrzaju registra W bice dodata osmobitna vrednost literala 'k', i rezultat ce biti smesten u registar W. Primer:

ADDLW 15 Pre instrukcije:

W = 10 Posle instrukcije

W = 25

24. ANDLW k perandi: k (0 - 255) Operacija: (W) .AND. (k) → (W) Sa sadrzajem registra W i osmobitnom vrednosti literala 'k' bice izvrseno logicko .AND. i rezultat ce biti smesten u registar W. Primer:

ADDLW 5F Pre instrukcije:

W = A3 Posle instrukcije: W = 03 Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 0 a da pritom ostali zadrze svoje stanje.

Page 54: Razvojni Sistem Za PIC16F877A

54

Recimo u PORTB treba ugasiti 1,4 i 5 bit, bez obzira na njihovo renutno stanje. Ostali bitovi (0,2,3,6,7) treba da zadrze svoje trenutno stanje. (Na izlazu nam treba x0xx00xxb) ANDLF 10110011b ; u bitove koje gasimo ide 0 Pre instrukcije: W = 11101001b Posle instrukcije: W = 10100001b

25. CALL k Operandi: k (0 - 2047) Operacija: (PC) + 1 → TOS k → (PC<10:0>), (PCLATH<4:3>) → (PC<12:11>) Poziv podprograma. Najpre se adresa povratka (PC+1) smesta na stek.Jedanaest bitova direktne adrese smestaju se u PC<10:0> a visi bitovi PC-a se ucitavaju iz PCLATH. Ova instrukcija traje dva ciklusa. Primer:

OVDE CALL TAMO Pre instrukcije:

PC = adresa OVDE Posle instrukcije

PC = adresa TAMO TOS = adresa OVDE

26. CLRWDT Operandi: nema Operacija: 00h → WDT

0 → WDT preskaler

1 →TO 1 → PD

Resetuje watchdog tajmer. Takodje resetuje preskaler za WDT isetuje bitove TO' i PD'.

Page 55: Razvojni Sistem Za PIC16F877A

55

Primer:

CLRWDT

Pre instrukcije: WDT = ?

Posle instrukcije WDT = 0 WDT preskaler = 0 TO' = 1 PD' = 1

27. GOTO k Operandi: k (0 - 2047) Operacija: k → (PC<10:0>) (PCLATH<4:3>) → (PC<12:11>) Naredba bezuslovnog skoka (granjanja). Jedanaest bitova adrese neposredno iza instrukcije bice upisano u PC<10:0>, visi bitovi PC-a ce biti upisani iz PCLATCH<4:3>. Instrukcija traje dva ciklusa. Primer:

GOTO TAMO Posle instrukcije

PC = adresa TAMO

28. IORLW k Operandi: k (0 - 255) Operacija: (W) .OR. (k) → (W) Sa sadrzajem registra W i osmobitnom vrednosti literala 'k' bice izvrseno logicko .OR. i rezultat ce biti smesten u registar W. Primer:

IORLW 35 Pre instrukcije:

W = 9A

Page 56: Razvojni Sistem Za PIC16F877A

56

Posle instrukcije

W = BF Primer 2: Primena ove instrukcije je zgodna ukoliko treba nekoliko bita u nekom registru postaviti da budu 1 a da pritom ostali zadrze svoje stanje. Recimo u PORTB treba ugasiti 1,4 i 5 bit, bez obzira na njihovo renutno stanje. Ostali bitovi (0,2,3,6,7) treba da zadrze svoje trenutno stanje. (Na izlazu nam treba x1xx11xxb) IORLF 01001100b ; u bitove koje gasimo ide 1 Pre instrukcije: W = 00110110b Posle instrukcije: W = 01111110b

29. MOVLW k Operandi: k (0 - 255) Operacija: (k) → (W) Osmobitna vrednost 'k' bice smestena u registar W. Primer:

MOVLW 5A Posle instrukcije

W = 5A

30. RETFIE Operandi: nema Operacija: TOS → (PC) 1 → GIE Uzima se vrednost sa vrha steka (TOS) i stavlja u PC. Dalji interapt je omogucen automatskim setovanjem bita GIE (Global Interapt Enable). Instrukcija traje dva ciklusa. Primer:

RETFIE

Posle instrukcije

Page 57: Razvojni Sistem Za PIC16F877A

57

PC = TOS GIE = 1

31. RETLW k Operandi: k (0 - 255) Operacija: k → W TOS → (PC) Registar W uzima osmobitnu vrednost literala 'k'. PC uzima vrednost sa vrha steka (adresa povratka) Instrukcija traje dva ciklusa. Primer:

CALL TABELa ;W sadrzi offset vrednost tabele -- ;W sada zahtevanu ima vrednost iz -- ;tabele

TABELA ADDWF PC ;W = offset RETLW k1 ;Pocetak tabele RETLW k2 RETLW k3 RETLW k4 Pre instrukcije

W = 04 Posle instrukcije

W = k4

32. RETURN Operandi: nema Operacija: TOS → (PC) Povratak iz podprograma. Uzima se vrednost sa vrha steka (TOS) i stavlja u PC. Instrukcija traje dva ciklusa. Primer:

RETURN Posle instrukcije

PC = TOS

Page 58: Razvojni Sistem Za PIC16F877A

58

33. SLEEP Operandi: nema Operacija: 00h → WDT 0→WDT preskaler 1 → TO’ 0 → PD’ Power down bit (PD’) se resetuje. Setuje se bit Time-out (TO’). Watchdog Timer i njegov preskaler se resetuju i procesor ide u SLEEP mod sa zaustavljenim oscilatorom. Primer:

SLEEP

34. SUBLW k Operandi: k (0 - 255) d (0 - 7) Operacija: (W) - k → (W) Od sadrzaja registra W bice oduzeta osmobitna vrednost literala 'k',i rezultat ce biti smesten u registar W. Primer:

SUBLW 02 Pre instrukcije:

W = 1 C = ?

Posle instrukcije

W = 1 C = 1 ; rezultat je pozitivan

Pre instrukcije:

W = 2 C = ?

Page 59: Razvojni Sistem Za PIC16F877A

59

Posle instrukcije

W = 0 C = 1 ; rezultat je nula

Pre instrukcije:

W = 3 C = ?

Posle instrukcije

W = FF C = 0 ; rezultat je negativan

35. XORLW k Operandi: k (0 - 255) Operacija: (W) .XOR. (k) → (W) Sa sadrzajem registra W i osmobitnom vrednosti literala 'k' bice izvrseno logicko .XOR. i rezultat ce biti smesten u registar W. Primer:

XORLW AF Pre instrukcije:

W = B5 Posle instrukcije

W = 1A

Page 60: Razvojni Sistem Za PIC16F877A

60

2.Hardverska struktura razvojnog sistema

U ovom delu je detaljno opisana hardverska struktura razvojnog sistem, kao i detaljan prikaz svih delova koji cine razvojni sistem. Krakteristike komponenata date su u Dodatku . Na mestima gde je bilo potrebno prikazan je detaljan proracun za pojedine komponente.

Ovaj razvojni sistem mozemo grubo podeliti u dva dela: 1. Programator-gradivni blok koji se koristi za punjenje kreiranog programa.

Kreirani program se prethodno unosi, kompajlira i debagira u host-u tipa PC masina, a zatim se program serijskom komunikacijom prenosi do programatora. Nakon programiranja kontroler je sposoban da izvrsava odgovarjuci program.

2. Mikrokontrolerski sistem-predstavlja srce sistema i definisano je hardverom tipicnim za aplikaciju.

2.1 Programator

Za programator je iskoriscen dobro poznati i vec provereni TAIT programator. Njega karekterise relativna jednostavost, kako same seme tako i proces izrade (od projektovanja stampane plocice pa do samog kraja, lemjenja i testiranja), relativno mala cena izrade, mogucnost da radi kao „programator u kolu“ (In Circuit Serial Programmer-ICSP ) i standardne komponte koje koristi. Sema ovog programatora data je na slici 2.1.

Sl.2.1. Sema Tait programatora

Page 61: Razvojni Sistem Za PIC16F877A

61

Na semi sa slike 2.1 mozemo uociti dva glavna dela programatora: deo za napajanje i logika koje se koristi za programiranje. Deo za napajanje se sastoji od dva linearna stabilizatora napona: LM7805 i LM7812. Stabilizator 7805 se koristi za napajanje mikrokontrolera i dela logickih kola, dok stabilizator 7812 obezbedujuje potrebne napone za programiranje. Za programiranje mikrokontrolera potreban je napon od 12V do 14V koji se dovodi na pinu MCLR. Ovaj napon se generise na izlazu stabilizatora 7812 (slika 2.2) koji na pinu GND ima povezane dve diode prema masi, cime je obezbedjeno da napon na pinu OUT bude 13.2V . Logiku programatora cini kolo SN 74LS07 i tranzistor BC557. Kolo SN 74LS07 je sestostruki bafer sa otvorenim kolektorom, dok PNP traznistor BC557 ima ulogu prekidaca napona za programiranje. Programator se povezuje preko LTP porta na host. Na hostu je instaliran softver nazvan IC-PROG cijim se pokretanjem vrsi programiranje kontrolera. Komunikacija izmedju PC-racunara i programatora je serijska i sinhronizovana sa bitskom brzinom. To znaci da imamo jednu liniju kojom se prenosi taktni signal, a drugu liniju po kojoj se prenose podaci. Tranzistor Q2 na slici 2.1 se koristi kao prekidac. Kada je u stanju ON tada je napon na pinu MCLR 13 V, a kada je ustanju OFF napon na pinu MCLR je 0 V.

Sl. 2.2 Sema za dobijanje potrebnih napona

Nacin povezivanja programatora u rezimu rada In Circuit Serial Programmer je prikazan na slici 2.3.

Page 62: Razvojni Sistem Za PIC16F877A

62

Sl.2.3. Povezivanje programatora

Elementi sa sl.2.3, R1, C1, D1 se koriste da se obezbedi reset mikrokontrolera. Za vreme programiranja, na pinu MCLR potrebno je dovesti napon oko 13V. Ovaj uslov je ostvaren inverznom polarizacijom diode D2. Sastavni deo programatora je konektor. Sa ovog konektora ne koriste se pinovi 2 i 3 jer su pinovi mikrokontrolera 11 i 32, kao i 12 i 31 direktno povezani na napon napajanja od 5 V ( VDD) i zajednicki kraj (VSS), respektivno. Pin 4 ( PGD) sluzi za punjenje programa u mikrokontroler i on je povezan na pin 40 (RB7/PGD), vidi sliku 2.3. Preko pina 5 (PGC) dovode se taktni impulsi za programiranje mikrokontrolera na pinu 39 (RB6/PGC). Otpornici R2 i R3 sluze da ogranice struju programiranja.

Logicka sema, tablica istinitosti, raspored pinova na kucistu, izgled i fizicke dimenzije kucista, kao i elektricne karakteristike logickog kola U3 sa slike 2.1 dati su u dodatku( slike od D.1 do D.7 ).

Page 63: Razvojni Sistem Za PIC16F877A

63

2.2 Modifikovani Tait programator

Na slici (sl.2.4.) prikazan je deo seme reazvojnog sistema koji sluzi za programiranje mikrokontrolera (deo TAIT programatora) i nacin povezivanja sa ostalim delovima sistema.

Sl.2.4. Modifikovani Tait programator

2.3 Mikrokontrolerski sistem

Na slici (sl.2.5.) prikazana je blok sema razvojnog sistema. Kolo za reset ima ulogu da resetuje mikrokontroler ako je to potrebno. LED mreza za indikaciju stanja pinova sastoji se od LED dioda vezanih na pojedinim pinovima. Kada je neki od pinova na visokom nivou (5 V) svetlece dioda koja je vezana sa njim. LCD modul se sastji od LCD-a baziranog na cip-setu HD44780. Sasravni deo razvojnog sistema je i programator. Radi se o TAIT programatoru o kome je bilo reci u prethodnom odeljku. Programator se vezuje za PC masinu pomocu 25-pinskog kapla na LTP port. Mrezu tastera cine sest tastera vezanih za pinove porta B (RB0, RB1, RB2, RB3, RB4, RB5). Oscilator koriscen u konkretnom slucaju je kvarcni rezonator frekfencije oscilovanja 4MHz. Za komunikaciju sistema sa PC masinom iskoricen je blok MAX232. Srce ovog bloka je integrisano kolo MAX232, koje ima ulogu da obezbedi potrebne naponske nivo za serijsku komunikaciju. Blok za serijsku komunikaciju se pomocu 9-pinskog kabla

Page 64: Razvojni Sistem Za PIC16F877A

64

vezuje sa COM port PC masine. D1 je sotki dioda i ima ulogu za vreme programiranja.

Sl.2.5. Blok sema razvojnog sistema

2.4 Tasteri

Mikroprekidaci, T1,..,T7, prikazani na slici 2.6 se koriste za realizaciju tastature. Sa ciljem da se ogranici struja kontakata prekidaca svaki od tastera povezan je preko otpornika Rx, x=1,..,7, na +5V. U konkretnoj realizaciji tasteri su povezani na deo porta B, od RB0 do RB5. Pritisak tastature registruje se promenom stanja na bilo kom ulazu porta B, na taj nacin sto se po automatizmu generise zahtev za prekid, pa time ne postoji potreba za programskim testiranjem rada tastature. Pinovi RB6 i RB7 su iskorisceni za programiranje.

Na slici (sl.2.6.) skiciran je nacin povezivanja tastera sa mikrokontrolerom. Kada taster nije pritisnut ulazni pin porta B, RBx,x=1,..,5, je na logickoj jedinici, a kad se pritisne na logickoj nuli.

Page 65: Razvojni Sistem Za PIC16F877A

65

Sl.2.6. Nacin povezivanja tastera sa mikrokontrolerom

Za proracun otpornika koji se vezuju izmedju napona napajanja i tastera (slika 2.6.) potrebno je poznavati maksimalu struju koja moze da se propusti kroz taster. Iz kataloskih podataka (koji su dati u Dodatku slika D.13 ) vidi se da je maksimalna struja 50mA. Ostali podaci nisu od velikog znacaja jer koristimo nizak napon napajanja. Otpornici se proracunavaju na sledeci nacin:

Gde je: VDD – napon napajanja; R- otpornost otpornika vezakog izmedju 5 V napajanja i tastera Itas – maksimalna dozvoljena struja kroz taster.

Kao sto se vidi iz proracuna otpornik treba da je veci od 100Ω. U konkretnom resenju koriscen je otpornik od 4k7 sto je znatno veci od proracunatog. Ova vrednost je uzeta da bi smanjili potrosnju sistema, jer u ovom slucaju kroz tastere protice struja od 1mA. 2.5 LED

LED (LED-Light Emmiting Diode) koje su koriscene su crvene, zute i zelene boje. Za svaki port na cijem je izlazu vezana LED koriscena je posebna boja diode. Tako da na deo PORTA (od RA1 do RA6) su vezane crvene LED, za deo PORTC (od RC0 do RC5) zute, za PORTE zelene i za deo PORTD (RD0 i RD1) crvene. Sve diode su precnika 3mm i difuznog su tipa. U Dodatku (slika D.14) date su elektricne, mehanicke i opticke karakteristike dioda.

Struja LED-a, za odgovarajuci osvetljaj, na osnovu kataloskih podataka, iznosi 10mA. Svaka od dioda je preko odgovarajuceg otpornika povezana na +5 V, cija se vrednost odredjuje na sledeci nacin.

Ω==≥ 10050mA

V5Itas

VDDR

Page 66: Razvojni Sistem Za PIC16F877A

66

a)Proracun za crvene LED:

Ω=== 330mA101.7V-V5

IfUf-VDDRr

Gde su: VDD – napon napajanja Uf – napon na diodi If - struja kroz diodu Uzimamo proracunatu vrednost za otpornost, je postoji u nizu E24.

b)Proracun za zelene LED:

Ω=== 290mA102.1V-V5

IfUf-VDDRg

Gde su: VDD – napon napajanja Uf – napon na diodi If - struja kroz diodu Uzimamo vrednost za otpornik 270Ω, jer tacna vrednost ne postoji u E24 nizu.

c)Proracun za zute LED:

Ω=== 290mA102.1V-V5

IfUf-VDDRy

Gde su: VDD – napon napajanja Uf – napon na diodi If - struja kroz diodu Uzimamo vrednost za otpornik 270Ω, jer tacna vrednost ne postoji u E24 nizu.

Na slici 2.7. prikazan je nacin povezivanja LED-a na portu C. Nacin povezivanja LED dioda na drugim portovima je identican.

Sl.2.7. Nacin povezivanja LED za port C

Page 67: Razvojni Sistem Za PIC16F877A

67

2.6 Max232

MAX232 se koristi za povezivanje razvojnog sistema sa racunarom po standardu RS232C. U konkretnoj realizaciji iskorisceno je pakovanje DIP16. Kolo se napaja jednostrukim naponom od 5 V. Veza razvojnog sistema sa PC-ijem je dupleks tipa. Podaci od PC masine ka razvojnom sistemu se vode preko drajverskog stepena koji povezuje pinove 11 i 14 (T1IN i T1OUT-slika 2.8), a od razvojnog sistema ka PC masini preko drajverskog stepena 12 i 13 (R1OUT i R1IN-slika 2.8). S obzirom da prenos podataka ne prati i prenos taktnih impulsa komunikacija je asinhrona serijska. U Dodatku (slike D.15 do D.18) su dati tehnicki podaci koji se odnose na kolo MAX232..

Sl 2.8. Povezivanje MAX232 saistemom 2.7 Deo za ispravljanje i stabilizaciju napona

Struktura bloka za napajanje prikazana je na slici 2.9. Pomocu transformatora T1 mrezni napon od 220 V se transformise u AC napon amplitude 12 V. Nakon toga vrsi dvostruko ispravljanje pomocu Grecovog ispravljaca (B1/80). Nestabilizovani napon od 18 V se dovodi na ulaz linijskog stabilizatora 7812. Na izlazu stabilizatora dobija se stabilisani napon od 13.2 V. Napon napajanja od +5 V se dobija na izlazu linearnog stabilizatora 7805. Stabilisani napon od 13.2 V se koristi za programiranje mikrokontrolera, a napon od 5 V za napajanje logike. U Dodatku (slike D.19 do D.21) prikazani su tehnicki detalji usmeraca i stabilizatora.

Page 68: Razvojni Sistem Za PIC16F877A

68

Sl.2.9. Usmeracki deo razvojnog sistema

Na slici (sl. 2.9.) je prikazan usmeracki deo razvojnog sistema. Na njegovim

izlazima imamo napone od 13 i 5V (VDD). Transformator je postavljen na drugoj plocici radi povecanja sigurnosti. Preporucljivo je da se koristi transformator od 12V na sekundaru, mada moze da se iskoristi i transformator od 15V. Transformator bi trebalo da je dimenzionisan za snagu od nekih 6VA.

Sl.2.10. Transformator

2.8 Deo za analogno-digitalnu konverziju U konkretnoj realizaciji izvrseno je samo prosledjivanje naponskih nivoa sa spoljneg ulaza na pin RA0.Povezivanje je ostvareno preko pina konektora J5. 2.9 Deo za povezivanje LCD-a

Siroku primenu u savremenim mikrokontrolerskim sistemima postigli su LCD displeji koji pored prikaza numerickih karaktera imaju u sebi implementiran ceo ASCII alfabet, kao i razne specijalne znake. Postoje razliciti tipovi alfanumerickih LCD displeja, ali najveci procenat se bazira na istom cip-setu tipa Hitachi HD44780. Iz tog razloga displeji koji su kompatibilni sa HD44780 mogu koristiti iste softverske rutine, bez obzira na tip ili proizvidjaca. U konkretnom resenju za povezivnje LCD-a koriscena su sledeca tri konektora:

Page 69: Razvojni Sistem Za PIC16F877A

69

1. konektor za prenos podtaka, LCD_DATA; 2. konektor kojim se predaju komande LCD-u, LCD_DATA1; 3. konekor za napajanje, LCD_NAP.

LCD displej je instaliran na gornjrm desnom uglu osnovne ploce. Regulacija osvetljaja LCD displeja ostvarena je preko potenciometra R24 nominalne vrednosti 10k. Nacin povezivanja LCD displeja na napajanje i interfejsa, za regulaciju osvetljaja prikazan je na slici na slici sl.2.11.:

Sl.2.11. Povezivanje LCD displeja na napajanje i interfejsa za regulaciju osvetljaja

LCD displej je formata 2x16 karaktera. Svaki karakter moze da prikaze maksimalno 7x9 osnovnih elemenata. Format prikaza karaktera je programabilan i definise se na pocetku prikaza informacije u redu. Pristup displeju radi upisa karaktera ostvaruje se preko 14-to pinskog konektora, paralelnim pristupom 8-mo bitnog podatkana nozicama od D7 do D14 (vidi sliku 2.12 i 2.13).

Page 70: Razvojni Sistem Za PIC16F877A

70

Sl.2.12. Fizicki izgled organizacije prikaza LCD-a i adresne organizacije memorije za prikaz

Funkcija i namena svakog od pina na konektoru LCD displeja je definisana na slici 2.13.

Sl.2.13. Raspored i funkcije pinova konektora LCD-a Ukazacemo sada na princip rada LCD displeja. Sa mikrokontrolerom LCD displej komunicira preko sledece dve magistrale:

Page 71: Razvojni Sistem Za PIC16F877A

71

• dvosmerne magistrala za podatke, D0 do D7, preko ovih linija mikrokontroler moze da upisuje u ili cita podatke iz LCD displeja

• jednosmerne upravljacke magistrale – cine je linije RS, R\W i E. Signal E kada je aktivan (E=1) dozvoljava rad displeja. Signal R\W definise operaciju citanja ili upisa (R\W=1 obavlja se operacija citanja, u suprotnom je upis). Signalom RS definise se kom se registru vrsi pristup, kada je RS =1 registrima za podatke nazvanih DDRAM-a (Display Data Ram) i CGRAM-a (Character Generator Ram), a kada je RS=0 pristupa se komandnom registru.

Upisom u DDRAM podaci se prikazuju na ekranu LCD-a. CGRAM prikazuje karaktere na displeju u matricno tackastoj formi. Sadrzaj CGRAM-a je moguce softverski menjati, tako da se mogu prikazati forme karaktera kreiranih po zelji korisnika. Internu memoriju LCD displeja koja se koristi za prikaz karaktera cine dva reda od po 40 lokacija(vidi sliku 2.14). U svakoj lokaciji se memorise po jedan karakter, a ukupno je vidljivo 16 karaktera, a nevidljivo 24. To znaci da je moguce ostvariti horizontalno pomeranje informacija u toku prikaza. Na slici 2.12. prikazane su adrese vidljivih lokacija na LCD displeju, pri cemu se pocetna adresa prikaza definise komandom za prikaz u fazi inicijalizacije.

Sl.2.14. Dvoredni smart LCD U cilju ustede broja pinova kojim se LCD displej povezuje na mikrokontroler projektanti cesto koriste cetvorobitni rezim rada komuniciranja. Naime, umesto da se vrsi istovremeni prenos svih osam bitova karaktera prenos se ostvaruje na nivou niblova, i to tako sto se prvo prenosi MS a nakon toga LS nibl. Treba pri ovome naglasiti da se cetvorobitni rezim komuniciranja definise odgovarajucom komandom u fazi inicijalizacije. Na ovaj nacin umesto da se povezivanje ostvari sa 11, realizuje se sa 7 linija. Ako se LCD koristi samo za prikaz poruka, pin RW se može povezati na masu i broj potrebnih pinova je tako smanjen na 6. Na slici 2.15. je pikazno povezivanje LCD-a sa PIC16F877A u 4-bitnom rezimu komuniciranja. U konkretnoj realizaciji koriscen je PORT D i to tako da su za prenos podataka iskorisceni pinovi od RD4 do RD7, a za upravljanje radom displeja pinovi RD2 i RD3.

Page 72: Razvojni Sistem Za PIC16F877A

72

Sl.2.15. Nacin povezivanja LCD-a i mikrokontrolera

LCD displej je programibilna periferija, pa kao takva podrzava odredjeni skup komandi. Spisak komandi i funkcije koje obavljaju te komande prikazan je na slici 2.16.

Sl.2.16. Tabela instrukcija LCD-a

Page 73: Razvojni Sistem Za PIC16F877A

73

2.10 Povezivanje kola za reset i oscilatora

Strukturu kola za reset cine pasivni elementi R1 i C1 cija je vremenska konstanta tako izabrana da obezbedi korektni start programa nakon ukljucenja sistema na napajanje. Uloga tastera T1 je da obezbedi manuelni reset za slucaj da mikrokontroler iz odredjenih razloga blokira rad u toku izvrsenja programa.

Nacin povezovanja kola oscilatora je prikazan na slici 2.17. U konkretnom resenju, koje se odnosi na povezivanje kristalnog oscilatora, postovane su preporuke firme Microchip. Frekvencija oscilatora je 4 MHz.

Sl.2.17. Nacin povezivanja mikrokontrolera Kondezator C1 ima ulogu da filtrira napon na pinu MCLR za vreme rada kontrolera, tj. da ne dodje do nezeljenog resetovanja mikokontrolera usled postojanja VF smetnji na vodovima za napajanje. 2.11 Fizicki izgled stampanih plocica Na slikama 2.18 do 2.24 prikazan je oblik stampanih plocica razvojnog sistema projektovanih u programskom paketu '' Protel 99SE'' .

Page 74: Razvojni Sistem Za PIC16F877A

74

Sl.2.18. Izgled stampane plocice sa raspodelom elemenata-pogled odozgo

Sl.2.19. . Izgled stampane plocice sa raspodelom elemenata-pogled odozgo

Page 75: Razvojni Sistem Za PIC16F877A

75

Sl.2.20. . Izgled stampane plocice napajanja sa raspodelom veza-pogled odozgo

2.12 Tabelarni prikaz komponenata sa vrednostima koriscenih pri realizaciji razvojnog sistema

Spisak ugradjenih elemenata koriscenih u razvojnom sistemu dat je u tabeli 2.1

Tabela 2.1: Spisak komponenata

Oznaka komponente Naziv komponente Vrednost komponente R1 Otpornik 1/4W 4k7 R2 Otpornik 1/4W 4k7 R3 Otpornik 1/4W 4k7 R4 Otpornik 1/4W 4k7 R5 Otpornik 1/4W 4k7 R6 Otpornik 1/4W 4k7 R7 Otpornik 1/4W 4k7 R8 Otpornik 1/4W 270Ω R9 Otpornik 1/4W 270Ω

R10 Otpornik 1/4W 270Ω R11 Otpornik 1/4W 270Ω

Page 76: Razvojni Sistem Za PIC16F877A

76

R12 Otpornik 1/4W 270Ω R13 Otpornik 1/4W 270Ω R14 Otpornik 1/4W 270Ω R15 Otpornik 1/4W 270Ω R16 Otpornik 1/4W 270Ω R17 Otpornik 1/4W 330Ω R18 Otpornik 1/4W 330Ω R19 Otpornik 1/4W 330Ω R20 Otpornik 1/4W 330Ω R21 Otpornik 1/4W 330Ω R22 Otpornik 1/4W 330Ω R23 Otpornik 1/4W 330Ω R24 Potenciometar 10k R25 Otpornik 1/4W 1k R26 Otpornik 1/4W 1k R27 Otpornik 1/4W 1k R28 Otpornik 1/4W 10k R29 Otpornik 1/4W 10k R30 Otpornik 1/4W 100k C1 Blok kondenzator 100nF C2 Keramicki kondenzator 27pF C3 Keramicki kondenzator 27pF C4 Elektrolitski kondenzator 10μF C5 Elektrolitski kondenzator 10μF C6 Elektrolitski kondenzator 10μF C7 Elektrolitski kondenzator 10μF C8 Elektrolitski kondenzator 470μF C9 Elektrolitski kondenzator 100μF

C10 Elektrolitski kondenzator 100μF D1 LED 3mm Zuta D2 LED 3mm Zuta D3 LED 3mm Zuta D4 LED 3mm Crvena D5 LED 3mm Crvena D6 LED 3mm Zelena D7 LED 3mm Zelena D8 LED 3mm Zelena D9 LED 3mm Zelena D10 LED 3mm Zelena

Page 77: Razvojni Sistem Za PIC16F877A

77

D11 LED 3mm Crvena D12 LED 3mm Zelena D13 LED 3mm Crvena D14 LED 3mm Crvena D15 LED 3mm Crvena D16 LED 3mm Crvena D17 Dioda BAT42 D18 GREC 1A D19 L7812CV 1A D20 TS7805 1A D21 Dioda 1N4148 D22 Dioda 1N4148 Q1 Mikrokontroler PIC16F877A Q2 MAX232 - Q3 PNP Tranzistor BC557 Q4 TTL Bafer SN 74LS07 J3 D9 PCB Konektor Zenski J4 Konektor Dvopinski J6 D25 PCB Konektor Zenski J7 Muska kontaktna letvica Dvopinska J11 Konektor 220V TS Transformator 6VA 220/15V 400mA

OSC Oscilator 4MHz T1 Mikroprekidac - T2 Mikroprekidac - T3 Mikroprekidac - T4 Mikroprekidac - T5 Mikroprekidac - T6 Mikroprekidac - T7 Mikroprekidac -

LCD Hitachi HD44780 - Kabl 25-pinski 1:1 Musko/Muski Kabl 9-pinski 1:1 Musko/Zenski Kabl Za Napajanje -

Page 78: Razvojni Sistem Za PIC16F877A

78

3.Prateci softver za PC i demo programi 3.1 Istalacija softvera

Za kreiranje programa na HLL-u C koristicemo programski paket Hi-Tech. Koraci koje treba preuzeti da bi se instalirao paket Hi- Tech i kreirala aplikacija na programskom jeziku C, su sledeci:

1. Pre istalacije ovog programskog paketa potrebno je istalirati MPLAB, jer se kasnije Hi-Tech integrise u MPLAB programski paket. Instalacija MPLAB-a pocinje pokretanjem aplikacije MPLAB v6.41, koja se nalazi na prilozenom disku u sklopu ovog rada ( u folderu MPLAB_IDE pokrenuti aplikaciju MPLAB v6.41.EXE). Po pokretanju aplikacije na monitoru se generise prozor:

2. Za nastavak istalacije potreban je jednostruki klik levim tasterom na polje NEXT . Nakon ovoga se generise sledeci prozir:

Page 79: Razvojni Sistem Za PIC16F877A

79

3. Cekira se polje ''I ACCEPT'' i klikom misa na polje ''NEXT'' sledi

nastavak nstalacije i generise se prikaz sledeceg oblika

4. Klikom na taster (polje) Browse bira se direktorijum gde se instalira MPLAB, a zatim klikom na polje NEXT nastavlja se instalacija.

Page 80: Razvojni Sistem Za PIC16F877A

80

5. Aplikacija nas pita da li zelimo da napravimo precicu u start meniju. Odabiramo jednu od ponudjenih opcija(npr. Yes), a zatim sledi klik na taster NEXT.

6. Bira se da li zeli precica (shortcut) na radnoj povrsini (desktop), a zatim treba kliknuti na NEXT.

Page 81: Razvojni Sistem Za PIC16F877A

81

7. Ako je korisnik spreman za instalaciju to potvrdjuje tasterom NEXT pa se dobija sledeci prozor:

8. Potrebno je sacekati odredjeni vremenski period da se zavrsi instalacija, a zatim se pojavljuje prozor prikazan na sledecoj slici:

Page 82: Razvojni Sistem Za PIC16F877A

82

9. Za nastavak instalacije (posle odabira yes ili no) kliknuti na NEXT.

10. nakon citanje poruke koja seodnosi na USB Driver Installition Please read

treba kliknuti na NEXT.

Page 83: Razvojni Sistem Za PIC16F877A

83

11. nakon citanje poruke koja seodnosi na Driver Installition You MUST read treba kliknuti na NEXT.

12. nakon citanje poruke koja seodnosi na USB Driver Installition Please read treba kliknuti na CONTINUE.

Page 84: Razvojni Sistem Za PIC16F877A

84

13. nakon citanje poruke koja seodnosi na USB Driver Installition Please read treba kliknuti na CONTINUE.

14. Za kraj instalacije kliknuti na FINISH. 15. Pozeljno je u ovom trenutku restartovati racunar.

Page 85: Razvojni Sistem Za PIC16F877A

85

Nakon instalacije paketa MPLAB potrebno je instalirati programski paket Hi-Tech i integrisati ga u MPLAB. Da bi se obavila ova aktivnost potrebno je preuzeti sledece korake:

1. Instalacija pocinje pokretanjem aplikacije picclite-setup koja se nalazi na prilizenom disku (u folderu Hi-Tech_PICC_v8.05_lite pokrenuti aplikaciju picclite.exe). Po pokretanju aplikacije na monitoru dobijamo sledeci prozor:

2. Klikom na NEXT nastavlja se instalacija.

Page 86: Razvojni Sistem Za PIC16F877A

86

3. Da bi se nastavilo sa instalacijom treba kliknuti na NEXT.

4. U generisanom prozoru nude se uslovi koriscenja licenciranog softvera. Klikom na YES nastavlja se proces instalacije.

Page 87: Razvojni Sistem Za PIC16F877A

87

5. Klikom na taster (polje) Browse bira se direktorijum gde se instalira Hi-

Tech, a zatim klikom na polje NEXT nastavlja se instalacija

6. Za nastvak istalacije potreno je kliknuti na polje NEXT

Page 88: Razvojni Sistem Za PIC16F877A

88

7. u ovom trenutku potrebno je scekat izvesni vremenski period da se zavrsi istalacija Hi-Tech..

8. Odgovorom na YES na generisnom prozoru izvrsice se integracija Hi-Tech u MPLAB razvojnom okuzenju.

Page 89: Razvojni Sistem Za PIC16F877A

89

9. Za nastavak kliknuti na OK.

10. Kliknuti na NEXT za nastavak.

Page 90: Razvojni Sistem Za PIC16F877A

90

11. Klikom na YES zavrsavamo instalaciju Hi-Tech i po automatizmu se

restaruje racunar. Sada je potrebno podesiti MPLAB tako da koristi Hi-Tech kompajler u procesu kompajliranja.

1. Klikom na ikonu MPLAB koja se nalazi na radnoj povrsini pokrece se kompajler i generise se prozor

Sada je potrebno podesiti MPLAB tako da koristi Hi-Tech kompajler u procesu kompajliranja. Klikom na Project → Project Wizard pojavice se novi prozor na monitoru.

Page 91: Razvojni Sistem Za PIC16F877A

91

2. Za natavak kliknuti na NEXT.

3. U polju Device potrebo je odabrati PIC16F877A.

4. U polju Actiive Toolsuite potrebno je odabrati opciju HI-TECH Toolsuite,a zatim kliknuti na polje NEXT.

Page 92: Razvojni Sistem Za PIC16F877A

92

5. Kliknuti NEXT za nastavak instalacije.

6. U polju Poject Name potrebno je upisat ime projekta, a zatim u polju Project Directory odabrati direktorijum gde cemo smestiti prethodno napisani kôd.

Page 93: Razvojni Sistem Za PIC16F877A

93

7. Na ovom prozoru treba odabrati folder u kojoj se nalazi napisan nas program koji zelimo da kompajliramo. Klikom na potrebni fajl, pa zatim na ADD , stikliranjem polja ispred imena odabranog fajla i klikom na NEXT generise se prozir:

Page 94: Razvojni Sistem Za PIC16F877A

94

8. Klikom na FINISH zavrsavaju se potrebna podesavanja i generise se prozor:

Page 95: Razvojni Sistem Za PIC16F877A

95

9. U potprozoru koji se nalazi na sedini glavnog prozora nalazi se listing napisanog programa koji moze da se dodatno edituje ili ako je sve u redu da se pokrene proces kompajliranja.

10. Kompajliranje se ukljucuje klikom na Projekt→Build All, ili pritiskom tastera Ctrl+F10. Nakon toga, ako je napisani program ispravan, dobijamo sledeci prozor.

Page 96: Razvojni Sistem Za PIC16F877A

96

11. U slucaju da ima greske u programu kompajler ce dati detaljno obavestenje o gresci.

12. Rezultat kompajliranja je HEX fajl koji se kasnije da ucitava u Ic-Prog. Kada ovo zavrsimo potrebo je instalirati programski paket Ic-Prog.

1. Instalacija pocinje pokretanjem aplikacije icprog (u folderu ic prog

pokrenuti aplikaciju icprog.exe). Nakon toga na monitoru se generise prozor:

2. Za nastavak instalacije kliknuti OK.

3. Potrebno je izvrsiti podesavanja kao na prilozenoj slici, a zatim kliknuti na polje OK. Nakon nekoliko upozorenja ( jer u ovom trenutku jos nije ukljucen odgovrajuci drajver) na koje treba odgovoriti sa OK generisace se prozor:

Page 97: Razvojni Sistem Za PIC16F877A

97

4. Za ukljucivanje drajver potrebno je uraditi: Odabrati settings→optionns (kao na slici)

Page 98: Razvojni Sistem Za PIC16F877A

98

5. Da bi ukljucili drajver, koji je potreban za rad IC-Prog pod OS XP, potrbno je podesiti Ic-Prog kao na prilozenoj slici, a zatim kliknuti na polje OK:

6. Nakon toga se generise prozor sa pitanje da li se zeli resetovati

aplikacija.Potrbno je kliknuti na polje Yes.

Page 99: Razvojni Sistem Za PIC16F877A

99

7. Treba sacekati da se program resetuje i potvrdno odgovoriti na

postavljeno pitanje na pitanje.

8. Kada se program resetovao potrbno je odabrati mikrokontoler PIC16F877A. To mozemo da uradimo tako sto cemo kliknuti Settings→Device→ Microchip PIC→More→More→PIC16F877A.

9. Nakon toga se generise prozor kao na sledecoj slici:

Page 100: Razvojni Sistem Za PIC16F877A

100

10. Sada je potrbno ucitati HEX fajl koji se dobija kompajliranjem programa. To mozeme da se uradi klikom na: File→Open File... (kao na sledecoj slici).

11. Nakon toga se generise prozor kao na sledecoj slici na kome je potrebno selektovati zeljeni HEX fajl i kliknuti na polje OK.

Page 101: Razvojni Sistem Za PIC16F877A

101

12. Kada se prethodna procedura, na monitoru ce se generisti prozor. Na njemu se moze videti hexadecimalni sadrzaj iskompajliranog programa. Potrbno je na njemu podesiti tip oscilatora i fuses podesavanja, ako vec nisu programski podesena. U nasem slucaju potrbno je samo iskljuciti fleg ''CP''.

Page 102: Razvojni Sistem Za PIC16F877A

102

13. Pre pocetka loadovanja prozor bi trebalo da izgleda kao na prilozenoj

slici:

14. Loadovanje se pokrece klikom na: Command→Program All (kao na prilozenoj slici):

Page 103: Razvojni Sistem Za PIC16F877A

103

15. Na prozoru koji ce se pojaviti treba kliknuti Yes za nastavak.

16. Zatim pocinje proces loadovanja i prozor izgleda kao na prilozenoj slici:

Page 104: Razvojni Sistem Za PIC16F877A

104

17. Nakon zavrsetka loadovanja, ukoliko nije bilo greski, proram ce generisati prozor sa obavestenjem da je proces zavrsen. Tada je potrebno kliknuti OK. U slucaju da je doslo do greske program ce dati detaljne informisati o gresci. Posle toga je potrbno utvrditi gde je greska, otkloniti je i ponoviti proces loadovanja.

18. Ako je proces loadovanja prosao uspesno preostaje samo ispitivanje programa na razvojnom sistemu.

Napomena: Posle svakog pokretanja programa Ic-Prog potrebno je izvrsiti pocetna podesavanja. Potrebno uraditi: Settings→Hardware ( ili pritiskom na taster F3) kao na slici:

Page 105: Razvojni Sistem Za PIC16F877A

105

Nakon toga dobijamo sledeci prozor:

Sada je potrebno decekirati, a odmah zatim cekirati polje ''Invert MCLR'' i kliknuti OK. Posle toga nastaviljamo sa normalnim radom.

3.2 Kreiranje aplikacija na programskom jeziku C za mikrokontroler PIC16F877A

Kako je mikrokontroler bez softvera samo obican komad plastike, metala i prociscenog peska, na ovom mestu cemo dati nekoliko mogucih softverskih resenja za nas razvojni sistem i tako kompletirati iskoristivu celinu.

Programski jezik C je dosta mocan i fleksibilan jezik. Programiranje

mikrokontrolera je dosta slicno standarnom programiranju, ali ima i neke svoje specificnosti. U daljem tekstu nastojacemo da objasnimo nacim programiranja na konkretnim primerima. U toku pisaanja programa bice korisceni neki standardni potprogrami koji se lako mogu naci na Internetu, a usput cemo i reci nesto o njima. Na disku koji cemo priloziti uz ovu dokumetciju naci ce se izmedju ostalog i ti potrogrami. Neke osnovne napomene

Razvojni sistem ima neka svoja ogranicenja koja moramo da ispostujemo prilikom programiranja mikrokontrolera. Kao prvo moramo da poznajemo dovoljno dobro arhitekturu kontrolera ( registre, velicinu memorije za program, velicinu memorije za smestaj podataka, itd.). O ovim ogranicenjima bilo je reci u prethodnim odeljcima, tako da sada necemo da se zadrzavamo na njih. Pored njih tu su i hardverska ogranicenja razvojnog sisstema, a to su:

Page 106: Razvojni Sistem Za PIC16F877A

106

1. kod PORTA , pinovi RA1- RA5 su povezani na LED, pa se zbog toga ovi pinovi moraju programski konfigurisati kao izlazni. RA0 je predvidjen kao ulaz za analogno-digitalnu konverziju, i njega je potrebo konfigurisati kao ulazni upisom komandne 0b000001 reci u registar TRISA.

2. PORTB je predvidjen kao ulazni port zbog toga sto ima mogucnost da generise prekid usled promene stanja na nekim od njegovih pinova (pinovi od RB4 do RB7). Ova mogucnost se pokazala kao veoma korisna pri analizi tastera pa smo se zbog toga opredelili da to iskoristimo. Pinovi od RB0 do RB3 nemaju ovu mogucnost, pa je zato njih potrebno analizirati softverski (najcesce primenom Timer0). Pinovi RB6 i RB7 iako imaju mogucnost, kao sto smo vec rekli, da generisu prekid, nismo ih iskoristili kao ulazne nego su ostali slobodni (koriste se u procesu programiranja). Ovaj port se kofigurise upisom komandne reci 0x3f u registar TRISB.

3. PORTC je predvidjen za komunikaciju sistema sa racunarom i za LED indikaciju stanja na pojedinim pinovima. Pinovi RC0-RC5 su povezani na LED diode, a preko pinova RC6 i RC7 povezano je kolo MAX232. Aktiviranjem USART modula po programskom automatizmu pinovi RC6 i RC7 se konfigurisu ka RxD i TxD, respektivno, a pinove RC0-RC5 je potrebno rucno konfiguristi kao izlazne. Nije greska ako se inicjalizira registar TRISC na vrednost 0x00, a zatim aktivira modul za komunikaciju sa racunarom.

4. PORTD je predvidjen za povezivanje LCD displeja i LED indikaciju. LCD modul je povezan na pinove od RD2 do RD7 ( RD2 se vezuje na RS pin displeja, RD3 vezuje se za E pin, a RD4, RD5, RD6, RD7 su iskorisceni za prenos podataka). Za pinove RD0 i RD1 su vezane LED za indikaciju stanja. Ovaj port se konfigurise kao izlazni TRISD=0x00.

5. PORTE je ceo iskoriscen za LED indikaciju. Konfigurise se kao izlazni TRISE=0b000.

Za pobudu oscilatora koriscen je kvarcni oscilator od 4MHz, tako da je vreme

trajanja instukcijskog ciklusa 1us. 3.3 Tipovi podataka

C programski jezik podrzava pet osnovnih tipova podataka (character, integer, float, void, double) i cetiri modifikovana tipa podataka(signed, unsigned, long, short). Tabela 3.1 pokazuje znacenje osnovnih tipova podataka i modifikovanih tipova: Tabela 3.1: Tipovi podataka u programskom jeziku C

Tip Znacenje Kljucna rec character Karakter podataka char integer Neoznaceni celi brojevi int float Brojevi u pokretnom zarezu float

double Brojevi u pokretnom zarezu dvostruke preciznosti

double

Page 107: Razvojni Sistem Za PIC16F877A

107

void Bez vrednosti void signed Pozitivni ili negativni brojevi signed

unsigned Samo pozitivni brojevi unsigned long Duzi opseg broja long short Kraci opseg broja short

Svakpm tipu podatka odgovara odredjeni opseg kod prezentacije brojeva. Ovaj opseg se moze menjati u zavisnosti od koriscenog modifikatora. Tabela 3.2 prikazuje moguci opseg vrednosti za sve kombinacije osnovnih tipova podataka i modifikatora

Tabela 3.2: Opseg vrednosti tipova podataka

Tip Obim u bitovima Opseg short 1 0 ili1

short int 1 0 ili 1 int 8 0 do 255

char 8 0 do 255 unsigned 8 0 do 255

unsigned int 16 0 do 65535 signed 8 -128 do 127

signed int 8 -128 do 127 long 16 0 do 65535

long int 16 0 do 65535 signed long 16 -32768 do 32767

float 32 3.4E-38 do 3.4E+38

3.4 Prekidi

Prekidi mogu se inicirati od strane velikog broja razlicitih internih ili eksternih izvora u odnosu na PICmicroMCU. Kada se javi prekid, PIC hardver sledi fiksni model ponasanja prikazan na slici 3.1.

Page 108: Razvojni Sistem Za PIC16F877A

108

Sl. 3.1 Algoritam izvrsenja programa pri nastanku prekida

Hardver je u potpunost pod PICmicroMCU kontrolom, a softver je u celini odgovornost projektanata. Kada se desi prekid, prvi korak je da se testira i odredi izvor prekida. U slucaju vise prekida, rutina za indetifikacuju izvora prekida na osnovu dodeljenog prioriteta odredjuje koji ce se prekid prvo obraditi. 3.5 Primena programskog jezika C (primeri)

Jedni od najpoznatijih ANSI C kompajlera koji su namenjeni Microchip PIC mikrokontrolerima su svakako Hi-Tech PICC i CCS PCW kompajleri.HI-Tech kompajler spada u profesionalne alate i namenjen je najzahtevnijim korisnicima. Baziran je na DOS aplikaciji koja se poziva iz komandne linije,ali zahvaljujuci MPLAB integraciji moze se dobiti zadovoljvajuce IDE okruzenje.Biblioteke koje se isporucuju zajedno sa kompajlerima spadaju u osnovne, pa ce za bilo kakvu dodatnu periferiju je potrebno kreirati odgovarajuce funkcije i procedure. Za razliku od Hi-Tech kompajlera, CCS PCW kompajler sadrzi u sebi kompletno IDE okruzenje, takodje sadrzi i veliki broj biblioteka za rad sa razlicitim periferijama (SPI, I2C, LCD, GLCD, USB, RTC...), kao i dodatne funkcije koje implementiraju odredjene tipove algoritama za manipulaciju nad podacima kao sto su CRC8, CRC16, upravljane radom AD konvertora itd. Napomena: Obratite paznju da je C jezik ''case-sensitive'' pa nije sve jedno da li se koriste mala ili velika slova!!! Primer: ako deklarisete promenljivu unsigned char bRojAC; Pokusaj da je koristite kao brojac=0; izazvace gresku. Pravilno je bRojAC=0;

Page 109: Razvojni Sistem Za PIC16F877A

109

''fuses'' podesavanja __CONFIG (LVPDIS&XT&PROTECT&PWRTEN&WDTDIS&DEBUGDIS);

Ovom direktivom omogucavamo da kompajler umetne u HEX datoteku i ''fuses'' podesavanja shodno potrebama programera. Kada se ovako izgenerisani HEX fajl ucita u program programatora (recimo u Ic-Prog ) programator ce automatski podesiti podesavanja koji tip oscilatora koristimo, da li ce mikrokontroler biti zasticen od citanja ili ne, da li ce ''watch-dog''(WDT) tajmer biti aktivan ili ne, itd. U konkretnom primeru je podeseno sledece: Low Voltage In-Circuit Serial Programming - DISABLED Oscilator - XT Protect(zastiti mikrokontroler od citanja) - ENABLED Power-up Timer(PWT) - ENABLED Watchdog Timer(WDT) - DISABLED In-Circuit Debugger - DISABLED Pravljenje ALIAS-a ulazno/izlaznih pinova

Jako korisna mogucnost C jezika je definisanje logickih imena ulazno/izlaznim pinovima. Prva pogodnost ovakvog pristupa je sto se na ovaj nacin jednostavnije mogu pamtiti imena pinova i njihova funkcija, a druga mozda jos bitnija, je da se portabilnost ovako pisanog kôda znacajno uproscava.Naime, ukoliko je iz nekog razloga potrebno u toku razvoja prebaciti neki izlazni uredjaj na neki drugi pin od planiranog, ovo se bezbolno moze izvrsiti izmenom u samoj definiciji bez da se pretrazuje ceo kôd kako bi se izvrsile promene na svim mestima gde se taj pin upotrebljava.

Dole navedeni kôd je jasan sam po sebi i moze se usvojiti kao takav, bez da se preterano zalazi u analizu. Primera radi, ukoliko na pinu PORTC.0 imamo povezan taster, taj pin mozemo nazvati Taster1. Konkretna primena ove olaksice data je u sledecem primeru: Napomena: Ne sme se zaboraviti obavezno podesavanje smerova pinova koji se koriste u odgovarajucim TRIS registrima. #define PORTBIT(adr,bit) ((unsigned)(&adr)*8+(bit)) //pinovi static bit Taster1 @ PORTBIT(PORTC,0); // static bit Taster2 @ PORTBIT(PORTC,1); // static bit Taster3 @ PORTBIT(PORTC,2); //

Page 110: Razvojni Sistem Za PIC16F877A

110

static bit LED0 @ PORTBIT(PORTB,0); // static bit LED1 @ PORTBIT(PORTB,1); // static bit LED2 @ PORTBIT(PORTB,2); // 3.6 Upisivanje parametra u DATA EEPROM

Ponekad je jako zgodno da parametre ili info-tekst upisemo u interni DATA EEPROM mikrokontrolera vec pri samom pisanju programa (npr. Default vrednosti parametara). To je najlakse izvesti uz pomoc makroa __EEPROM_DATA( ), koji su sastavni deo Hi-Tech PICC kompajlera. __EEPROM_DATA('L','C','D','T','_','B','R','1'); __EEPROM_DATA('v','e','r','-','1','.','0','0'); __EEPROM_DATA('s','e','p','-','2','0','0','6');

U datom primeru u EEPROM memoriju mikrokontrolera od adrese 0 redom bice upisan ''tekst'' kao na sledecoj slici:

Sl 3.2 Izgled Ic-prog-a

3.7 Opcije za optimizaciju kôda pri kompajliranju

Prilikom kompajliranja kôda Hi-Tech kompajler moze primeniti vise modela optimizacije.

Optimizacija se ukljucuje navodjenjem parametara u komandnoj liniji pri pozivu kompajlera: -0 (ukljucuje post-pass optimizaciju), i –Zg (ukljucuje Global optimizaciju).Ukoliko je ukljucen neki od metoda optimizacije dobija se povecanje brzine izvrsavanja kôda, kao i smanjenje objektnog (HEX) kôda. Pozeljno je uvek koristiti optimizaciju, ukoliko kôd radi kako je specificirano

Page 111: Razvojni Sistem Za PIC16F877A

111

zahtevima. U primerima koji su navedeni, obavezno je koriscenje maksimalne optimizacije kako bi generisani kôd rutine Delay bio odgovarajuceg trajanja.

Ukljucivanje optimizacije Hi-Tech kompajlera u MPLAB razvojnom okruzenju se izvodi na sledeci nacin: u meniju Project>Build options... potrebno je odabrati Project. U tabu PICC Compiler treba stiklirati Use alternate settings i zatim u praznom polju upisati -0 –Zg (ako vec nije bilo upisano). Zatim se klikne na OK. Ukljucivanje optimizacije Hi-Tech kompajlera prikazana je na slici3.3.

Sl 3.3 Izgled prozora na kome je ukljucena maksimalna optimizacija 3.8 Program za iskljucivanje i ukljucivanje LED

Svrha ovog programa je upoznavanje sa nekim osnovnim naredbama programskog jezika C. Program je dosta jednostavan i lak za razumevanje, a ima zadatak da, u zavisnosti od toga koji je taster pritisnut, ukljuci neki pin odgovrajuceg porta ili da ukljucuje LED nekim unapred definisanim redosledom. Iskoriscena je mogucnost koja postoji u radu sa portom B. Naime pinovi RB4 do RB7 mogu da generisu prekid ( samo ako smo prethono to omogucili konfigurisanjem odgovarajuceg flag-a) kada se desi promena stanja na odgovarajucem pinu. Ujedno je primenjena i softverska analiza stanja tastera koriscenjem Timer 0.. Listing programa sa komentarom je prikazan na slici 3.4. #include<pic.h> //ukljucujemo ovu bibliotrku jer se u njoj nalaze osnovne rutine koje su potrebne za vreme programiranja. Potrebno je uvek napisati ovu liniju!//

Page 112: Razvojni Sistem Za PIC16F877A

112

#include "delay.c" //potprogram koji unosi kasnjenje, o njemu bice reci kasnije// __CONFIG(LVPDIS&XT&PWRTEN&WDTDIS&DEBUGDIS); //podesavanje PIC-a// int i,j,k; //promenjive koje koristimo u programu #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) static bit ts1 @ PORTBIT(PORTB, 5); //pinRB5 ima simbolicko ime ts1// static bit ts2 @ PORTBIT(PORTB, 4); static bit ts3 @ PORTBIT(PORTB, 3); static bit ts4 @ PORTBIT(PORTB, 2); static bit ts5 @ PORTBIT(PORTB, 1); static bit ts6 @ PORTBIT(PORTB, 0); static bit led1 @ PORTBIT(PORTD, 0); static bit led2 @ PORTBIT(PORTD, 1); //davanje imena pojedinim pinovima. Ovaj deo je standardan i sam po sebi diviljno jasan// void interrupt tas(void) //pocetak prekidne rutine za skeniranje tastera// if(RBIF) //pitamo da li je RBIF=1, ako jeste onda je pretisnut neki taster vezan na nekom pinu od RB4 do RB7 pa je kontroler generisao prekid.// GIE=0; // iskljucujemo sve prekide// if(!ts1) //da li je pin RB5 na logicku nulu, ako jeste promenjiva i dobija vtrednost 0// i=1; j=0; k=0; if(!ts2) //da li je pin RB4 na logicku nulu, ako jeste promenjiva j dobija vtrednost 0// i=0; j=1; k=0; RBIF=0; //resetujemo RBIF// GIE=1; //dozvoljavamo omogucene prekide// if(T0IF) //da ji je omogucen prekid koji izaziva tajmer0// GIE=0;

Page 113: Razvojni Sistem Za PIC16F877A

113

if(!ts3) //da li je pin RB3 na logicku nulu, ako jeste promenjiva k dobija vtrednost 0// i=0; j=0; k=1; T0IF=0; //resetujemo fleg T0IF// GIE=1; //zavsavamo prekidnu rutinu// void main(void) //pocetak glavnog programa// TRISD=0x00; //definisemo PORTD kao izlazni// TRISB=0x3f; // definisemo PORTB kao ulazni, osim RA6 i RA7 koje stavljamo kao izlazne jer ih i ne koristimo// TRISE=0b000; //definisemo PORTE kao izlazni// TRISA=0b000001; //definisemo PORTA kao izlazni, sem pina RA0 koji je ulazni// TRISC=0x00; //definisemo PORTD kao izlazni// PORTE=0b000; //gasimo PORTE// PORTA=0b000000; //gasimo PORTA// PORTC=0x00; //gasimo PORTC// PORTD=0x00; //gasimo PORTD OPTION=0b00000011; //podesavamo vrednost preskajlera za tajmer0// ADCON1=0b10001110; //definisemo PORTA kao digitalni, osim RA0 koji je analogni ulaz// T0IE=1; //omogucavamo prekid koji izaziva tajmer0// RBIE=1; //omogucavamo prekid koji izaziva promena stanja na pinovima RA4 do RA7// GIE=1; //omogucavamo dozvoljene prekide// while(1) //beskonacna petlja// if(i==1) led2=1; //ukljucujemo datu diodu// DelayMs(250); //kasnjenje od 250ms// DelayMs(250); DelayMs(250); DelayMs(250); led2=0; //iskljucujemo datu diodu// PORTC=0b10101010; //ukljucujemo svaku drugu diodu porta C// DelayMs(250); DelayMs(250);

Page 114: Razvojni Sistem Za PIC16F877A

114

DelayMs(250); DelayMs(250); PORTC=0x00; //iskljucujemo PORTC// PORTE=0b101; DelayMs(250); DelayMs(250); DelayMs(250); DelayMs(250); PORTE=0x00; PORTA=0b101010; DelayMs(250); DelayMs(250); DelayMs(250); DelayMs(250); PORTA=0b000000; DelayMs(250); DelayMs(250); DelayMs(250); DelayMs(250); if(j==1) PORTC=0x00; PORTE=0b101; PORTA=0x00000; if(k==1) PORTC=0x00; PORTE=0b000; PORTA=0b101010; //kraj beskonacne petlje// //kraj programa//

Sl 3.4 Listing programa za ukljucivanje LED U programu sa slike 3.4 koriscen je bibliotecni potprogram delay.c. On ima zadatak da unese kasnjenje u izvrsenju programa izrazeno u milisekundama. Listing potprograma je dat na slici 3.5. Potprogram "delay.c" #include "delay.h" void DelayMs(unsigned char cnt) #if XTAL_FREQ <= 2MHZ

Page 115: Razvojni Sistem Za PIC16F877A

115

do DelayUs(996); while(--cnt); #endif #if XTAL_FREQ > 2MHZ unsigned char i; do i = 4; do DelayUs(250); while(--i); while(--cnt); #endif

Sl 3.5 Listing biblioteckog potprograma delay.c

Potprogram je dovoljno jasan, pa nije podrebno dodatno komentarisati. Moze se pomenuti samo to da pri kompajliranju programa mora biti ukljucena maksimalna optimizacuja. Promenjiva cnt je neoznacena 16-bitna vrednost. U ovom potrogramu je iskoriscena bibliotecki potprogram delay.h, a njegov listig prikazan je na slici 3.6. #ifndef DelayUs #ifndef XTAL_FREQ #define XTAL_FREQ 4MHZ #endif #define MHZ *1000 #define KHZ *1 #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;

Page 116: Razvojni Sistem Za PIC16F877A

116

#endif extern void DelayMs(unsigned char); #endif

Sl. 3.6 Listing biblioteckog potprograma delay.h

3.9 Program koji upravlja radom LCD-a

Ovaj program je malo slozeniji od prethodnog. Zadatak programa je da broji od 0 do 999 i rezultat prikaze na LCD displeju. Pored ostalog ovde treba da se obavi konverzija dekadnog broja u niz ASCII cifara, iz razloga sto LCD displej, kao i svaka periferija manipulisu samo sa zapisima u ASCII formatu. Ovde je iskoriscen i interni EEPROM mikrokontrolera za zapis nekih informacija koje se koriste u svrhu evidencije. #include <pic.h> #include "delay.c" #include "lcd.c" __CONFIG(LVPDIS&XT&PROTECT&PWRTEN&WDTDIS&DEBUGDIS) // konfigurisemo PIC __EEPROM_DATA('L', 'C', 'D', 'T', '_', 'B', 'R', '1'); __EEPROM_DATA('v', 'e', 'r', '-', '1', '.', '0', '0'); __EEPROM_DATA('s', 'e', 'p', '-', '2', '0', '0', '6'); //upisujemo podatke u EEPROM unsigned int brojac; // GLOBALNE Promenljive void Delay_1s() // procedura koja unosi kasnjenje // od 1 sekunde DelayMs(250); DelayMs(250); DelayMs(250); DelayMs(250); /////////////////////////////////////////////////////// /////////////////////////// MAIN //////////////////////

Page 117: Razvojni Sistem Za PIC16F877A

117

void main(void) TRISD=0x00; PORTD=0x00; GIE=0; // iskljucujemo sve interapte lcd_init(); // Inicializacija LCD displej brojac = 0; // resetujemo promenljivu brojac // ovde pravimo masku naseg prikaza na displej lcd_gotoxy(0, 0); // pozicioniraj se u prvoj koloni - prvi red lcd_puts("LCD Test"); // ispisi na LCD-u tekst lcd_gotoxy(0, 1); // pozicioniraj se u prvoj koloni - drugi red lcd_puts("Brojac:"); // ispisi na LCD-u tekst while(1) // beskonacna petlja Delay_1s(); // definisemo brojanje i prikaz na priblizno 1sekundu brojac++; // uvecavamo brojac za 1 if(brojac > 999) brojac = 0; // ogranicavamo brojac do maximalnih 999 lcd_gotoxy(10, 1); // pozicioniramo se (2. red - 11. kol) lcd_dec2str3(brojac); // konvertujemo dekadni broj u STRING

Sl 3.7 Listing programa za upravljanje LCD-om

U programu sa slike 3.7 koriscen je potprogram lcd.c koji ima ulogu da upravlja radom LCD-a. Potprogram je preuzet sa http://www.htsoft.com, a dodatno je prosiren komentarom. U potprogramu lcd.c je ugradjena rutina za konverziju decimalnog broja u niz ASCII karaktera. Napomena: Ovaj potprogram moze da se upotrbi samo za LCD-ove koji su formata 2X16 karaktera i kompatibilni su sa displejom baziranim na cip-setu HD44780. #include <pic.h> #define LCD_DATA PORTD #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) // LCD static bit LCD_E @ PORTBIT(PORTD, 3); //

Page 118: Razvojni Sistem Za PIC16F877A

118

static bit LCD_RS @ PORTBIT(PORTD, 2); // // ovde definisi specijalne karaktere #define SPECIJALNI_KARAKTERI 64 // koliko * 8 //----------------------------------------------------------- // Procedure za kontrolu LCD-a HD44780 16x2 //----------------------------------------------------------- #define LCD_STROBE() LCD_E = 1; LCD_E = 0 #define lcd_cursor(x) lcd_cmd(((x)&0x7F)|0x80) #define lcd_clear() lcd_cmd(0x01); DelayMs(2); #define lcd_putch(x) lcd_data(x) #define lcd_goto(x) lcd_cmd(0x80+(x)); DelayUs(40); #define lcd_gotoxy(x,y) lcd_cmd(0x80+x+(0x40*y));DelayUs(40); #define lcd_cursor_right() lcd_cmd(0x14) #define lcd_cursor_left() lcd_cmd(0x10) #define lcd_display_shift() lcd_cmd(0x1C) #define lcd_home() lcd_cmd(0x02); DelayMs(2); /* posalji komandu LCD-u */ void lcd_cmd(unsigned char ins) LCD_RS = 0; // COMMAND LCD_DATA = (LCD_DATA & 0x0f) | (ins & 0xf0); LCD_STROBE(); LCD_DATA = (LCD_DATA & 0x0f) | ((ins << 4) & 0xf0); LCD_STROBE(); DelayUs(40); /* posalji podatak LCD-u */ void lcd_data(unsigned char ins) LCD_RS = 1; // podaci LCD_DATA = (LCD_DATA & 0x0f) | (ins & 0xf0); LCD_STROBE(); LCD_DATA = (LCD_DATA & 0x0f) | ((ins << 4) & 0xf0); LCD_STROBE(); LCD_RS = 0; // podaci DelayUs(40); /* ispisi string na LCD-u */ void lcd_puts(const char * s) while(*s) lcd_data(*s++);

Page 119: Razvojni Sistem Za PIC16F877A

119

// *----------------------------------------- // * Konverzija decimalnih brojeva u string // u opsegu od 0 do 999 // *----------------------------------------*/ void lcd_dec2str3(unsigned int x) unsigned int y; if (x<1000) y=x/100; lcd_putch(y+0x30); x-=(y*100); y=x/10; lcd_putch(y+0x30); x-=(y*10); lcd_putch(x+0x30); else lcd_puts("Err"); /* inicijalizacija LCD-a */ void lcd_init() // 8 bit interfejs/i cekaj 5ms LCD_DATA = (LCD_DATA & 0b00001111) | 0x30; LCD_STROBE(); DelayMs(5); // 8 bit interfejs/i cekaj 160uS LCD_DATA = (LCD_DATA & 0b00001111) | 0x30; LCD_STROBE(); DelayUs(160); // 8 bit interfejs/i cekaj 160uS LCD_DATA = (LCD_DATA & 0b00001111) | 0x30; LCD_STROBE(); DelayUs(160); // 4 bit interfejs LCD_DATA = (LCD_DATA & 0b00001111) | 0x20; LCD_STROBE(); DelayUs(160); lcd_cmd(0x20+0x08); // 4bit, 2 reda, 5x7 lcd_cmd(0x06); // incrementiraj poziciju, iskljuci pomeranje displeja lcd_cmd(0x0C); // Display = On, Cursor = Off, Blink = Off lcd_clear(); lcd_home();

Sl 3.8 Listing potprograma lcd.c

Page 120: Razvojni Sistem Za PIC16F877A

120

3.10 Program za komunikaciju razvojnog sistema sa racunarom

Ovaj program ima za cilj da broji od 0 do 99 i da rezultat prikaze na racunaru. Program nema neku prakticnu svrhu, kao ni prethodni, vec mu je jedini cilj edukacija. Pokazuje kako se vrsi podesavanje USART modula mikrokontrolera. Brzina prenosa podataka dosta zavisi od izabranog oscilatora, o cemu je bilo reci u prethodnim odeljcima. Veoma lako moze da se promeni i da se koristi kao potprogram u nekim slozenijim programima. Komunikacija je asinhrona serijska bez koriscenja prekidnih rutina. #include <pic.h> #include "delay.c" __CONFIG(LVPDIS&XT&PROTECT&PWRTEN&WDTDIS&DEBUGDIS); // konfigurisemo PIC __EEPROM_DATA('R', 'S', '2', '3', '2', '_', '_', '_'); __EEPROM_DATA('v', 'e', 'r', '-', '1', '.', '0', '0'); __EEPROM_DATA('j', 'u', 'n', '-', '2', '0', '0', '6'); #define PIC_CLK 4000000 // frekvencija XTAL-a #define BAUD 19200 // RS232 baud rate #define DIVIDER ((PIC_CLK/(16UL * BAUD) -1)) // interni proracun #define HIGH_SPEED 1 // interno podesavanje RS232 registara // PROMENLJIVE unsigned char brojac; unsigned char primljeni_podatak; // PROCEDURE void Delay_1s() // procedura koja unosi kasnjenje // od 1 sekunde DelayMs(250); DelayMs(250); DelayMs(250); DelayMs(250); // slanje jednog karaktera void RS232_putch(unsigned char c) while(!TXIF); //prelazi u '1' kada je prazan TXREG = c; DelayUs(60);

Page 121: Razvojni Sistem Za PIC16F877A

121

// prijem jednog karaktera unsigned char RS232_getch() if(RCIF) //prelazi u '1' kada je prun 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 main(void) TRISA = 0b11111111; TRISB = 0b00000000; TRISC = 0b11111111; ADCON1 = 0b10000111; // Set up A/D as Right justified,

Page 122: Razvojni Sistem Za PIC16F877A

122

// (5 analog channels = digital inputs xxxx 011x) GIE = 0; // 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 while(1) // beskonacna petlja Delay_1s(); RS232_putst("Trenutno stanje brojaca je: "); RS232_dec2str2(brojac); RS232_putch(13); // ADCII znak (Return) za sledeci red if(++brojac > 99) brojac = 0; // ukoliko sa PC racunara dodje komanda R ili r resetuj brojac primljeni_podatak = RS232_getch(); if((primljeni_podatak=='R')||(primljeni_podatak == 'r')) brojac=0;

Sl 3.9 Listim programa za komunikaciju PC masine sa razvojnim sistemom

Na slici 3.10 je dat oblik potprograma koji moze da koristi kod kreiranja nekih slozenijih programa. U njemu je sadrzana konverzija decimalnog broja u niz ASCII karaktera, kao i predaja i prijem podataka ka/iz serijskog porta. #include <pic.h> #include „delay.c“ // slanje jednog karaktera void RS232_putch(unsigned char c) while(!TXIF); //prelazi u ’1’ kada je prazan TXREG = c; DelayUs(60);

Page 123: Razvojni Sistem Za PIC16F877A

123

// prijem jednog karaktera unsigned char RS232_getch() if(RCIF) //prelazi u ’1’ kada je pun 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); //prelaz u novi red if (*str==10) RS232_putch(13); //vrati se na pocetak reda 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“); Sl 3.10 Listing potprograma za komunikaciju razvojnog sistema sa PC masinom

S obzirom da je u predlogu ostvaruje serijska komunikacija izmedju

mikrokontrolera i PC masine, potrebno je da na PC racunaru postoji neki terminal program koji podrzava ovaj tip komunikacije. Jedan tipican usluzni program ovog tipa je ''Terminal_v1.9b'', koji je zapisan na prilozenom disku (u folderu RS232_Terminal pokrenuti aplikaciju Terminal_v1.9b.exe). Pre pocetka komunikacije neophodno je definisati parametre serijskog prenos podataka (bitska brzina, broj bitova po karakteru, parnost, broj stop bitova, tip handshake, kao i

Page 124: Razvojni Sistem Za PIC16F877A

124

komunikacioni port po se predaju i primaju podaci). Ukoliko je sve u redu i COM port uspesno inicijalizovan potrebno je kliknuti na dugme [Connect], a u prozoru terminala bi trebao da se pojavi rezultat izvrsenja programa.

Page 125: Razvojni Sistem Za PIC16F877A

125

Zakljucak

Kao i realizacija prakticnog dela naseg zadatka, nimalo nije bilo jednostavno opistai citav razvojni sistem i objasniti sve njegove delove. Od velike koristi nam je bila literatura koju smo uspeli da nadjemo surfujuci po Internetu. Pre svega ''PIC16F87X Data Sheet'' iz koje smo koristili detalje koji se odnose na tehnicke karateristike mikrokontrolera. To je bila i tema prvog poglavlja ovog rada. Moramo pomenuti nekoliko skripti i diplomskih radova koji su na Internetu postavile nase kolege i njihovi nastavnici sa tehnickih fakulteta bivse Jugoslavije. U drugom delu opisana je hardverska struktura sistema zasnonovana na mikrokontroleru PIC16F877A.. U trecem delu smo integrisali potreban softver za punjenje programa u mikrokontroler, gde smo slikovito opisali kako se i kojim redosledom softver instalira i listing samih programa koje smo dali i time kompletirali razvojni sistem. S postovanjem: Branislav Dimitrijevic, Slobodan Aleksic, Ivan Antic

Page 126: Razvojni Sistem Za PIC16F877A

126

Dodatak 1

Sl.D.1 Logicka sema i funkcionalna tabela logickog kola 74ls07

Ovo kolo se pakuje u 14-pinsko DIP

pakovanje kao na slici. Naponi napajanja se dovode na nozice 14 i 7, a ostali pinovi sluze kao ulazni i izlazni pinovi pojedinih kola unutar cipa. Sl D.2 Raspored pinova na kucistu logickog kola 74LS07 (pogled odozgo)

Page 127: Razvojni Sistem Za PIC16F877A

127

Sl.D.3 Logicka sema bafera

Sl.D.4 Vreme uspona i vreme opadanja logickih nivoa

Sl.D.5 Elektricne karakteristike logickog kola 74ls07

(napon napajanja,nivoi,potrosnja struje i radna temperatura kola)

Page 128: Razvojni Sistem Za PIC16F877A

128

Sl.D.6 Elektricne osobine logickog kola 74ls07 (strujna i naponska ogranicenja)

Sl.D.7 Fizicke dimenzije logickog kola 74ls07

Page 129: Razvojni Sistem Za PIC16F877A

129

Raspred nozica, izgled kucista, fizicke dimenzije i elektricne karakteristike tranzistora BC557 date su na slikama od D8 do D12.

Sl.D.8 Raspored nozica tranzistora BC557

Sl.D.9 Naponska,strujna ,temperaturna i ogranicenja snage tranzistora BC557

Page 130: Razvojni Sistem Za PIC16F877A

130

Sl.D.10 Elektricne karakteristike tranzistora BC557

Sl.D.11 Zavisnost parametra hfe od struje kolektora

Page 131: Razvojni Sistem Za PIC16F877A

131

Sl.D.12 Fizicke dimenzije tranzistora BC557

Page 132: Razvojni Sistem Za PIC16F877A

132

Na slici (sl.D.13) prikazan je njihov izgled i njihovi tehnicki podaci:

Sl.D.13 Tehnicki podaci i izgled tastera

Page 133: Razvojni Sistem Za PIC16F877A

133

Sl.D.14 Tehnicki parametri i fizicki izgled koriscenih dioda

Sl.D.15 Propagaciono vreme pri slanju i prijemu za MAX232

Page 134: Razvojni Sistem Za PIC16F877A

134

Sl.D.16 Logicka sema i fizicki izgled MAX232

Sl.D.17 Elektricne karakteristike MAX232

Page 135: Razvojni Sistem Za PIC16F877A

135

Sl.D.18 Elektricne karakteristike maks 232

Sl.D.19 Parametri usmeraca

Page 136: Razvojni Sistem Za PIC16F877A

136

Sl.D.20 Fizicki izgled usmeraca

Sl.D.21 Fizicki izgled stabilizatora

Page 137: Razvojni Sistem Za PIC16F877A

137

Dodatak 2

Fizicki izgled razvojnog sistema

Page 138: Razvojni Sistem Za PIC16F877A

138

Branislav R. Dimitrijevic, rodjen 21.02.1983. godine u Surdulici. U istom mestu zavrsio je srednju tehnicku skolu na smeru automatika. Upisuje 2002. godine Elektronski fakultet u Nisu, smer telekomunikacije, na kome i danas uspesno studira. Student je pete godine. U toku studiranja izradio je par projekata medju kojima je i ovaj. Interesovanja: mikroprocesorki i mikrokontrolerski sistemi, satelitske kimunikacije, projektovanje telekomunikacionih sistema, web programiranje, elektroakustika...

Slobodan P. Aleksic, rodjen 05. 05. 1982. godine u Vranju. Osnovnu skolu i Gimnaziju zavrsio u rodnom gradu. Studije upisao 2001. godine na Elektronskom fakultetu u Nisu, smer za telekomunikacije. Interesovanja: Primena mikroracunara u kolima sa pokretnim LED displejom, obrada i digitalni prenos analognih signala, projektovanje telekomunikacionih sistema…

Ivan S. Antic, rodjen 04.05.1983. godine u Prokuplju, gde je zavrsio osnovnu skolu i gimnaziju.Elektronski fakultet u Nisu je upisao 2002.godine na smeru telekomunikacije. Intresovanja: Mikroracunarski sistemi, mobilne telekomunikacije, kablovska televizija...