86
ELEKTRONSKI FAKULTET NIŠ Katedra za elektroniku Mikroprocesorski sistemi KOMUNIKACIJA MIKROKONTROLERA PIC18F4550 I RAČUNARA PREKO SERIJSKOG I USB PORTA Studenti: Ana Andrejić 10434 Magdalena Ranđelović 10620 Mentor: prof. dr Mile K. Stojčev

Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

  • Upload
    vuthu

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

ELEKTRONSKI FAKULTET NIŠ Katedra za elektroniku Mikroprocesorski sistemi

KOMUNIKACIJA MIKROKONTROLERA PIC18F4550 I RAČUNARA PREKO

SERIJSKOG I USB PORTA

Studenti Ana Andrejić 10434 Magdalena Ranđelović 10620 Mentor prof dr Mile K Stojčev

2

SADRŽAJ UVODNA REČ 03 1 SERIJSKI PORT I STANDARD 04 2 USB PORT I STANDARD 10 3 SPI KOMUNIKACIJA 15 4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM 18 5 MIKROKONTROLER PIC18F4550 25 6 SOFTVER ZA PIC MIKROKONTROLERE 44 7 REALIZACIJA PROJEKA 52 8 LABORATORIJSKA VEŽBA 68 PRILOZI 75 LITERATURA 84 CIRRICULUM VITAE 85

3

UVODNA REČ

Ideja seminarskog rada koji je pred Vama je da se demonstrira komunikacija mikrokontrolera PIC18F4550 i portova računara (USB i serijskog) Na mikrokontroler su povezana dva potenciometra ndash digitalni SPI i obrtni standardni potenciometar Oba potenciometra imaju nominalnu vrednost 10 K

U radu su najpre opisani serijski i USB port računara sa standardima SPI komunikacija a zatim je opisan digitalni potenciometar sa SPI interfejsom (MCP410xx)

Peto poglavlje opisuje arhitrekturu i organizaciju mikrokontrolera PIC18F4550 a šesto poglavlje opisuje razvojni sistem i softver koji su korišćeni za pomenuti mikrokontroler

U sedmom poglavlju se nalazi električna šema projekta sa opisom U ovom poglavlju su priloženi programi u mikroC-u i opisan je proces programiranja mikrokontrolera PIC18F4550 preko PICFlash programatora

U osmom poglavlju je opisana laboratorijska vežba po koracima (za samostalan rad studenata) Magdalena i Ana

4

1 SERIJSKI PORT I STANDARD

Serijski port računara koji se drugačije naziva i komunikacijski (communication ndash ili skraćeno COM) port u mogućnosti je i da prima i da šalje podatkeU zavisnosti od toga da li serijski uređaji koriste različite pinove za prijem i slanje ili samo jedan moguće je razlikovati dva tipa komunikacije full-duplex (informacije se mogu istovremeno prenositi u oba smera) i half-duplex (dok se informacije prenose u jednom smeru prenos iz drugog smera je zabranjen)

Serijski port zasniva rad na UART kontrolerskom čipu koji predstavlja ključnu komponentu serijske komunikacije Ovaj čip s jedne strane prihvata bajtove podataka od mikroprocesorskog sistema transformiše ih u bitski niz i šalje bit-po-bit S druge strane prihvata niz bita koji stižu od nekog spoljnjeg uređaja pakuje ih u bajtove i predaje ih mikroprocesorskom sistemu Većina ovih či-pova ima ugrađene FIFO bafere za prijem podataka radi ubrzanja rada što je ranije napomenuto

Postoje dva glavna oblika serijskog prenosa sinhroni i asinhoni Sinhoni prenos podrazume-va da predajnik i prijemnik dele zajednički takt ili da predajnik obezbedi poseban signal kojim će obaveštavati prijemnik kada dolazi sledeći podatak Kod asinhronog prenosa ne postoji poseban signal već se sinhronizacija vrši pomoću posebnih bitova koji se umeću

Slika 1 Principijelna blok-šema serijskog porta Serijski port PC računara koristi se za serijski prenos podataka (bit-po-bit) i samim tim je sporiji

od paralelnog porta Uređaji koji koriste serijsku komunikaciju koriste dve vrste kablova i to DCE (Data Communications Equipment) i DTE (Data Pin Equipment) DCE koriste modemi ploteri i sl dok se DTE koristi za vezu između PC računara Električne osobine serijskog porta su definisane EIA (Electronics Industry Association) RS232C standardom čiji su parametri

bull Logička nula SPACE nalazi se u opsegu napona +3V do +25V bull Logička jedinica MARK je u opsegu -3V do - 25V bull Oblast između -3 do + 3 V nije definisana bull Napon na kolu ne sme da pređe 25V u odnosu na masu (GND) bull Struja kola ne sme preći 500 mA

Pored RS232C standarda postoje i novije verzije EIA-232D i EIA-232E koje su objavljene 1987 i 1991 godine i to je prikazano u Tabeli 1

5

PARAMETAR EIA 232 RS 423-A RS 422-A RS 485 način rada nebalansiran

i nebalansirani diferencijalni diferencijalni

broj drajvera i prijemnika 1 drajver 1 prijemnik

1 drajver 10 prijemnik

1 drajver 10 prijemnik

32 drajvera 32 prijemnika

maksimalna dužina kabla [m] 15 1200 1200 1200 maksimalna brzina prenosa podataka [bps]

20 K

100 K

10 M

10 M

maksimalni napon na zajedničkim krajevima [V]

+ 25

+ 6

6 do ndash025

12 do ndash7

Drajverski izlazni signal izlaz drajvera [V]-min

neopterećen

5

36

2

36

izlaz drajvera [V]-max

Opterećen

15

6

5

36

opterećenje drajvera [Ω] 3 ndash 7 K 450 (min) 100 (min) 60 (min) slew rate drajvera [Vmicros] 30 (max) spoljna kontrola nd nd izlazna struja kratkog spoja granična vrednost struje (mA)

500 na Vcc

150 na GND

150 na GND

150 na GND 200 na ndash7 ili 12 V

izlazna otpornost drajvera [Ω]

uključeno napajanje

nd

nd

nd

12 K

stanje visoke impedanse [Ω]

isključeno napajanje

30 K

60 K

60 K

12 K

ulazna impedansa prijemnika [Ω] 3 ndash 7 K 4 K(min) 4 K (min) 12 K (min) osetljivost prijemnika [V] 3 V 02 02 02 opseg ulaznog napona prijemnika [V]

15

12

7

-7 do 12V

Tabela 1 Električne karakteristike EIA standarda

Slika 2 Raspored pinova na konektoru DSUB-25

6

Inače serijski port koristi dve vrste konektora DSUB-25 (25-pinski) i DSUB-9 (9-pinski) Oblik konektora i raspored pinova na njima kao i glavni signali na pojedinim pinovima dati su na Slikama 2 i 3 i Tabeli 2 dok je opis svakog signala da u Tabeli 3

Slika 3 Raspored pinova na konektoru DSUB-9

DSUB-25 DSUB-9 Signal Opis signala

pin 2 pin 3 TD Transmit Data pin 3 pin 2 RD Receive Data pin 4 pin 7 RTS Request To Send pin 5 pin 8 CTS Clear To Send pin 6 pin 6 DSR Data Set Ready pin 7 pin 5 SG Signal Ground pin 8 pin 1 CD Carrier Detect pin 20 pin 4 DTR Data Pin Ready pin 22 pin 9 RI Ring Indicator

Tabela 2 Signali na konektorima DSUB-25 (relevantni) i DSUB-9

Signal Opis signala Značenje signala TD Transmit Data Serijski izlaz podataka (TXD) RD Receive Data Serijski ulaz podataka (RXD) RTS Request ToSend Indicira da je modem spreman za razmenu podataka CTS Clear To Send Kada modem detektuje signal Carrier od modema sa

druge strane linije onda ona postaje aktivna DSR Data Set Ready DCE signalizira da je spreman za rad SG Signal Ground Masa CD Carrier Detect DCE javlja da je veza uspostavljena

DTR Data Pin Ready Indicira DCE uređaju da je DTE spreman RI Ring Indicator Signalizira detekciju signala zvona na telefonskoj liniji

Tabela 3 Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je na donjoj slici

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 2: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

2

SADRŽAJ UVODNA REČ 03 1 SERIJSKI PORT I STANDARD 04 2 USB PORT I STANDARD 10 3 SPI KOMUNIKACIJA 15 4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM 18 5 MIKROKONTROLER PIC18F4550 25 6 SOFTVER ZA PIC MIKROKONTROLERE 44 7 REALIZACIJA PROJEKA 52 8 LABORATORIJSKA VEŽBA 68 PRILOZI 75 LITERATURA 84 CIRRICULUM VITAE 85

3

UVODNA REČ

Ideja seminarskog rada koji je pred Vama je da se demonstrira komunikacija mikrokontrolera PIC18F4550 i portova računara (USB i serijskog) Na mikrokontroler su povezana dva potenciometra ndash digitalni SPI i obrtni standardni potenciometar Oba potenciometra imaju nominalnu vrednost 10 K

U radu su najpre opisani serijski i USB port računara sa standardima SPI komunikacija a zatim je opisan digitalni potenciometar sa SPI interfejsom (MCP410xx)

Peto poglavlje opisuje arhitrekturu i organizaciju mikrokontrolera PIC18F4550 a šesto poglavlje opisuje razvojni sistem i softver koji su korišćeni za pomenuti mikrokontroler

U sedmom poglavlju se nalazi električna šema projekta sa opisom U ovom poglavlju su priloženi programi u mikroC-u i opisan je proces programiranja mikrokontrolera PIC18F4550 preko PICFlash programatora

U osmom poglavlju je opisana laboratorijska vežba po koracima (za samostalan rad studenata) Magdalena i Ana

4

1 SERIJSKI PORT I STANDARD

Serijski port računara koji se drugačije naziva i komunikacijski (communication ndash ili skraćeno COM) port u mogućnosti je i da prima i da šalje podatkeU zavisnosti od toga da li serijski uređaji koriste različite pinove za prijem i slanje ili samo jedan moguće je razlikovati dva tipa komunikacije full-duplex (informacije se mogu istovremeno prenositi u oba smera) i half-duplex (dok se informacije prenose u jednom smeru prenos iz drugog smera je zabranjen)

Serijski port zasniva rad na UART kontrolerskom čipu koji predstavlja ključnu komponentu serijske komunikacije Ovaj čip s jedne strane prihvata bajtove podataka od mikroprocesorskog sistema transformiše ih u bitski niz i šalje bit-po-bit S druge strane prihvata niz bita koji stižu od nekog spoljnjeg uređaja pakuje ih u bajtove i predaje ih mikroprocesorskom sistemu Većina ovih či-pova ima ugrađene FIFO bafere za prijem podataka radi ubrzanja rada što je ranije napomenuto

Postoje dva glavna oblika serijskog prenosa sinhroni i asinhoni Sinhoni prenos podrazume-va da predajnik i prijemnik dele zajednički takt ili da predajnik obezbedi poseban signal kojim će obaveštavati prijemnik kada dolazi sledeći podatak Kod asinhronog prenosa ne postoji poseban signal već se sinhronizacija vrši pomoću posebnih bitova koji se umeću

Slika 1 Principijelna blok-šema serijskog porta Serijski port PC računara koristi se za serijski prenos podataka (bit-po-bit) i samim tim je sporiji

od paralelnog porta Uređaji koji koriste serijsku komunikaciju koriste dve vrste kablova i to DCE (Data Communications Equipment) i DTE (Data Pin Equipment) DCE koriste modemi ploteri i sl dok se DTE koristi za vezu između PC računara Električne osobine serijskog porta su definisane EIA (Electronics Industry Association) RS232C standardom čiji su parametri

bull Logička nula SPACE nalazi se u opsegu napona +3V do +25V bull Logička jedinica MARK je u opsegu -3V do - 25V bull Oblast između -3 do + 3 V nije definisana bull Napon na kolu ne sme da pređe 25V u odnosu na masu (GND) bull Struja kola ne sme preći 500 mA

Pored RS232C standarda postoje i novije verzije EIA-232D i EIA-232E koje su objavljene 1987 i 1991 godine i to je prikazano u Tabeli 1

5

PARAMETAR EIA 232 RS 423-A RS 422-A RS 485 način rada nebalansiran

i nebalansirani diferencijalni diferencijalni

broj drajvera i prijemnika 1 drajver 1 prijemnik

1 drajver 10 prijemnik

1 drajver 10 prijemnik

32 drajvera 32 prijemnika

maksimalna dužina kabla [m] 15 1200 1200 1200 maksimalna brzina prenosa podataka [bps]

20 K

100 K

10 M

10 M

maksimalni napon na zajedničkim krajevima [V]

+ 25

+ 6

6 do ndash025

12 do ndash7

Drajverski izlazni signal izlaz drajvera [V]-min

neopterećen

5

36

2

36

izlaz drajvera [V]-max

Opterećen

15

6

5

36

opterećenje drajvera [Ω] 3 ndash 7 K 450 (min) 100 (min) 60 (min) slew rate drajvera [Vmicros] 30 (max) spoljna kontrola nd nd izlazna struja kratkog spoja granična vrednost struje (mA)

500 na Vcc

150 na GND

150 na GND

150 na GND 200 na ndash7 ili 12 V

izlazna otpornost drajvera [Ω]

uključeno napajanje

nd

nd

nd

12 K

stanje visoke impedanse [Ω]

isključeno napajanje

30 K

60 K

60 K

12 K

ulazna impedansa prijemnika [Ω] 3 ndash 7 K 4 K(min) 4 K (min) 12 K (min) osetljivost prijemnika [V] 3 V 02 02 02 opseg ulaznog napona prijemnika [V]

15

12

7

-7 do 12V

Tabela 1 Električne karakteristike EIA standarda

Slika 2 Raspored pinova na konektoru DSUB-25

6

Inače serijski port koristi dve vrste konektora DSUB-25 (25-pinski) i DSUB-9 (9-pinski) Oblik konektora i raspored pinova na njima kao i glavni signali na pojedinim pinovima dati su na Slikama 2 i 3 i Tabeli 2 dok je opis svakog signala da u Tabeli 3

Slika 3 Raspored pinova na konektoru DSUB-9

DSUB-25 DSUB-9 Signal Opis signala

pin 2 pin 3 TD Transmit Data pin 3 pin 2 RD Receive Data pin 4 pin 7 RTS Request To Send pin 5 pin 8 CTS Clear To Send pin 6 pin 6 DSR Data Set Ready pin 7 pin 5 SG Signal Ground pin 8 pin 1 CD Carrier Detect pin 20 pin 4 DTR Data Pin Ready pin 22 pin 9 RI Ring Indicator

Tabela 2 Signali na konektorima DSUB-25 (relevantni) i DSUB-9

Signal Opis signala Značenje signala TD Transmit Data Serijski izlaz podataka (TXD) RD Receive Data Serijski ulaz podataka (RXD) RTS Request ToSend Indicira da je modem spreman za razmenu podataka CTS Clear To Send Kada modem detektuje signal Carrier od modema sa

druge strane linije onda ona postaje aktivna DSR Data Set Ready DCE signalizira da je spreman za rad SG Signal Ground Masa CD Carrier Detect DCE javlja da je veza uspostavljena

DTR Data Pin Ready Indicira DCE uređaju da je DTE spreman RI Ring Indicator Signalizira detekciju signala zvona na telefonskoj liniji

Tabela 3 Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je na donjoj slici

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 3: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

3

UVODNA REČ

Ideja seminarskog rada koji je pred Vama je da se demonstrira komunikacija mikrokontrolera PIC18F4550 i portova računara (USB i serijskog) Na mikrokontroler su povezana dva potenciometra ndash digitalni SPI i obrtni standardni potenciometar Oba potenciometra imaju nominalnu vrednost 10 K

U radu su najpre opisani serijski i USB port računara sa standardima SPI komunikacija a zatim je opisan digitalni potenciometar sa SPI interfejsom (MCP410xx)

Peto poglavlje opisuje arhitrekturu i organizaciju mikrokontrolera PIC18F4550 a šesto poglavlje opisuje razvojni sistem i softver koji su korišćeni za pomenuti mikrokontroler

U sedmom poglavlju se nalazi električna šema projekta sa opisom U ovom poglavlju su priloženi programi u mikroC-u i opisan je proces programiranja mikrokontrolera PIC18F4550 preko PICFlash programatora

U osmom poglavlju je opisana laboratorijska vežba po koracima (za samostalan rad studenata) Magdalena i Ana

4

1 SERIJSKI PORT I STANDARD

Serijski port računara koji se drugačije naziva i komunikacijski (communication ndash ili skraćeno COM) port u mogućnosti je i da prima i da šalje podatkeU zavisnosti od toga da li serijski uređaji koriste različite pinove za prijem i slanje ili samo jedan moguće je razlikovati dva tipa komunikacije full-duplex (informacije se mogu istovremeno prenositi u oba smera) i half-duplex (dok se informacije prenose u jednom smeru prenos iz drugog smera je zabranjen)

Serijski port zasniva rad na UART kontrolerskom čipu koji predstavlja ključnu komponentu serijske komunikacije Ovaj čip s jedne strane prihvata bajtove podataka od mikroprocesorskog sistema transformiše ih u bitski niz i šalje bit-po-bit S druge strane prihvata niz bita koji stižu od nekog spoljnjeg uređaja pakuje ih u bajtove i predaje ih mikroprocesorskom sistemu Većina ovih či-pova ima ugrađene FIFO bafere za prijem podataka radi ubrzanja rada što je ranije napomenuto

Postoje dva glavna oblika serijskog prenosa sinhroni i asinhoni Sinhoni prenos podrazume-va da predajnik i prijemnik dele zajednički takt ili da predajnik obezbedi poseban signal kojim će obaveštavati prijemnik kada dolazi sledeći podatak Kod asinhronog prenosa ne postoji poseban signal već se sinhronizacija vrši pomoću posebnih bitova koji se umeću

Slika 1 Principijelna blok-šema serijskog porta Serijski port PC računara koristi se za serijski prenos podataka (bit-po-bit) i samim tim je sporiji

od paralelnog porta Uređaji koji koriste serijsku komunikaciju koriste dve vrste kablova i to DCE (Data Communications Equipment) i DTE (Data Pin Equipment) DCE koriste modemi ploteri i sl dok se DTE koristi za vezu između PC računara Električne osobine serijskog porta su definisane EIA (Electronics Industry Association) RS232C standardom čiji su parametri

bull Logička nula SPACE nalazi se u opsegu napona +3V do +25V bull Logička jedinica MARK je u opsegu -3V do - 25V bull Oblast između -3 do + 3 V nije definisana bull Napon na kolu ne sme da pređe 25V u odnosu na masu (GND) bull Struja kola ne sme preći 500 mA

Pored RS232C standarda postoje i novije verzije EIA-232D i EIA-232E koje su objavljene 1987 i 1991 godine i to je prikazano u Tabeli 1

5

PARAMETAR EIA 232 RS 423-A RS 422-A RS 485 način rada nebalansiran

i nebalansirani diferencijalni diferencijalni

broj drajvera i prijemnika 1 drajver 1 prijemnik

1 drajver 10 prijemnik

1 drajver 10 prijemnik

32 drajvera 32 prijemnika

maksimalna dužina kabla [m] 15 1200 1200 1200 maksimalna brzina prenosa podataka [bps]

20 K

100 K

10 M

10 M

maksimalni napon na zajedničkim krajevima [V]

+ 25

+ 6

6 do ndash025

12 do ndash7

Drajverski izlazni signal izlaz drajvera [V]-min

neopterećen

5

36

2

36

izlaz drajvera [V]-max

Opterećen

15

6

5

36

opterećenje drajvera [Ω] 3 ndash 7 K 450 (min) 100 (min) 60 (min) slew rate drajvera [Vmicros] 30 (max) spoljna kontrola nd nd izlazna struja kratkog spoja granična vrednost struje (mA)

500 na Vcc

150 na GND

150 na GND

150 na GND 200 na ndash7 ili 12 V

izlazna otpornost drajvera [Ω]

uključeno napajanje

nd

nd

nd

12 K

stanje visoke impedanse [Ω]

isključeno napajanje

30 K

60 K

60 K

12 K

ulazna impedansa prijemnika [Ω] 3 ndash 7 K 4 K(min) 4 K (min) 12 K (min) osetljivost prijemnika [V] 3 V 02 02 02 opseg ulaznog napona prijemnika [V]

15

12

7

-7 do 12V

Tabela 1 Električne karakteristike EIA standarda

Slika 2 Raspored pinova na konektoru DSUB-25

6

Inače serijski port koristi dve vrste konektora DSUB-25 (25-pinski) i DSUB-9 (9-pinski) Oblik konektora i raspored pinova na njima kao i glavni signali na pojedinim pinovima dati su na Slikama 2 i 3 i Tabeli 2 dok je opis svakog signala da u Tabeli 3

Slika 3 Raspored pinova na konektoru DSUB-9

DSUB-25 DSUB-9 Signal Opis signala

pin 2 pin 3 TD Transmit Data pin 3 pin 2 RD Receive Data pin 4 pin 7 RTS Request To Send pin 5 pin 8 CTS Clear To Send pin 6 pin 6 DSR Data Set Ready pin 7 pin 5 SG Signal Ground pin 8 pin 1 CD Carrier Detect pin 20 pin 4 DTR Data Pin Ready pin 22 pin 9 RI Ring Indicator

Tabela 2 Signali na konektorima DSUB-25 (relevantni) i DSUB-9

Signal Opis signala Značenje signala TD Transmit Data Serijski izlaz podataka (TXD) RD Receive Data Serijski ulaz podataka (RXD) RTS Request ToSend Indicira da je modem spreman za razmenu podataka CTS Clear To Send Kada modem detektuje signal Carrier od modema sa

druge strane linije onda ona postaje aktivna DSR Data Set Ready DCE signalizira da je spreman za rad SG Signal Ground Masa CD Carrier Detect DCE javlja da je veza uspostavljena

DTR Data Pin Ready Indicira DCE uređaju da je DTE spreman RI Ring Indicator Signalizira detekciju signala zvona na telefonskoj liniji

Tabela 3 Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je na donjoj slici

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 4: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

4

1 SERIJSKI PORT I STANDARD

Serijski port računara koji se drugačije naziva i komunikacijski (communication ndash ili skraćeno COM) port u mogućnosti je i da prima i da šalje podatkeU zavisnosti od toga da li serijski uređaji koriste različite pinove za prijem i slanje ili samo jedan moguće je razlikovati dva tipa komunikacije full-duplex (informacije se mogu istovremeno prenositi u oba smera) i half-duplex (dok se informacije prenose u jednom smeru prenos iz drugog smera je zabranjen)

Serijski port zasniva rad na UART kontrolerskom čipu koji predstavlja ključnu komponentu serijske komunikacije Ovaj čip s jedne strane prihvata bajtove podataka od mikroprocesorskog sistema transformiše ih u bitski niz i šalje bit-po-bit S druge strane prihvata niz bita koji stižu od nekog spoljnjeg uređaja pakuje ih u bajtove i predaje ih mikroprocesorskom sistemu Većina ovih či-pova ima ugrađene FIFO bafere za prijem podataka radi ubrzanja rada što je ranije napomenuto

Postoje dva glavna oblika serijskog prenosa sinhroni i asinhoni Sinhoni prenos podrazume-va da predajnik i prijemnik dele zajednički takt ili da predajnik obezbedi poseban signal kojim će obaveštavati prijemnik kada dolazi sledeći podatak Kod asinhronog prenosa ne postoji poseban signal već se sinhronizacija vrši pomoću posebnih bitova koji se umeću

Slika 1 Principijelna blok-šema serijskog porta Serijski port PC računara koristi se za serijski prenos podataka (bit-po-bit) i samim tim je sporiji

od paralelnog porta Uređaji koji koriste serijsku komunikaciju koriste dve vrste kablova i to DCE (Data Communications Equipment) i DTE (Data Pin Equipment) DCE koriste modemi ploteri i sl dok se DTE koristi za vezu između PC računara Električne osobine serijskog porta su definisane EIA (Electronics Industry Association) RS232C standardom čiji su parametri

bull Logička nula SPACE nalazi se u opsegu napona +3V do +25V bull Logička jedinica MARK je u opsegu -3V do - 25V bull Oblast između -3 do + 3 V nije definisana bull Napon na kolu ne sme da pređe 25V u odnosu na masu (GND) bull Struja kola ne sme preći 500 mA

Pored RS232C standarda postoje i novije verzije EIA-232D i EIA-232E koje su objavljene 1987 i 1991 godine i to je prikazano u Tabeli 1

5

PARAMETAR EIA 232 RS 423-A RS 422-A RS 485 način rada nebalansiran

i nebalansirani diferencijalni diferencijalni

broj drajvera i prijemnika 1 drajver 1 prijemnik

1 drajver 10 prijemnik

1 drajver 10 prijemnik

32 drajvera 32 prijemnika

maksimalna dužina kabla [m] 15 1200 1200 1200 maksimalna brzina prenosa podataka [bps]

20 K

100 K

10 M

10 M

maksimalni napon na zajedničkim krajevima [V]

+ 25

+ 6

6 do ndash025

12 do ndash7

Drajverski izlazni signal izlaz drajvera [V]-min

neopterećen

5

36

2

36

izlaz drajvera [V]-max

Opterećen

15

6

5

36

opterećenje drajvera [Ω] 3 ndash 7 K 450 (min) 100 (min) 60 (min) slew rate drajvera [Vmicros] 30 (max) spoljna kontrola nd nd izlazna struja kratkog spoja granična vrednost struje (mA)

500 na Vcc

150 na GND

150 na GND

150 na GND 200 na ndash7 ili 12 V

izlazna otpornost drajvera [Ω]

uključeno napajanje

nd

nd

nd

12 K

stanje visoke impedanse [Ω]

isključeno napajanje

30 K

60 K

60 K

12 K

ulazna impedansa prijemnika [Ω] 3 ndash 7 K 4 K(min) 4 K (min) 12 K (min) osetljivost prijemnika [V] 3 V 02 02 02 opseg ulaznog napona prijemnika [V]

15

12

7

-7 do 12V

Tabela 1 Električne karakteristike EIA standarda

Slika 2 Raspored pinova na konektoru DSUB-25

6

Inače serijski port koristi dve vrste konektora DSUB-25 (25-pinski) i DSUB-9 (9-pinski) Oblik konektora i raspored pinova na njima kao i glavni signali na pojedinim pinovima dati su na Slikama 2 i 3 i Tabeli 2 dok je opis svakog signala da u Tabeli 3

Slika 3 Raspored pinova na konektoru DSUB-9

DSUB-25 DSUB-9 Signal Opis signala

pin 2 pin 3 TD Transmit Data pin 3 pin 2 RD Receive Data pin 4 pin 7 RTS Request To Send pin 5 pin 8 CTS Clear To Send pin 6 pin 6 DSR Data Set Ready pin 7 pin 5 SG Signal Ground pin 8 pin 1 CD Carrier Detect pin 20 pin 4 DTR Data Pin Ready pin 22 pin 9 RI Ring Indicator

Tabela 2 Signali na konektorima DSUB-25 (relevantni) i DSUB-9

Signal Opis signala Značenje signala TD Transmit Data Serijski izlaz podataka (TXD) RD Receive Data Serijski ulaz podataka (RXD) RTS Request ToSend Indicira da je modem spreman za razmenu podataka CTS Clear To Send Kada modem detektuje signal Carrier od modema sa

druge strane linije onda ona postaje aktivna DSR Data Set Ready DCE signalizira da je spreman za rad SG Signal Ground Masa CD Carrier Detect DCE javlja da je veza uspostavljena

DTR Data Pin Ready Indicira DCE uređaju da je DTE spreman RI Ring Indicator Signalizira detekciju signala zvona na telefonskoj liniji

Tabela 3 Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je na donjoj slici

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 5: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

5

PARAMETAR EIA 232 RS 423-A RS 422-A RS 485 način rada nebalansiran

i nebalansirani diferencijalni diferencijalni

broj drajvera i prijemnika 1 drajver 1 prijemnik

1 drajver 10 prijemnik

1 drajver 10 prijemnik

32 drajvera 32 prijemnika

maksimalna dužina kabla [m] 15 1200 1200 1200 maksimalna brzina prenosa podataka [bps]

20 K

100 K

10 M

10 M

maksimalni napon na zajedničkim krajevima [V]

+ 25

+ 6

6 do ndash025

12 do ndash7

Drajverski izlazni signal izlaz drajvera [V]-min

neopterećen

5

36

2

36

izlaz drajvera [V]-max

Opterećen

15

6

5

36

opterećenje drajvera [Ω] 3 ndash 7 K 450 (min) 100 (min) 60 (min) slew rate drajvera [Vmicros] 30 (max) spoljna kontrola nd nd izlazna struja kratkog spoja granična vrednost struje (mA)

500 na Vcc

150 na GND

150 na GND

150 na GND 200 na ndash7 ili 12 V

izlazna otpornost drajvera [Ω]

uključeno napajanje

nd

nd

nd

12 K

stanje visoke impedanse [Ω]

isključeno napajanje

30 K

60 K

60 K

12 K

ulazna impedansa prijemnika [Ω] 3 ndash 7 K 4 K(min) 4 K (min) 12 K (min) osetljivost prijemnika [V] 3 V 02 02 02 opseg ulaznog napona prijemnika [V]

15

12

7

-7 do 12V

Tabela 1 Električne karakteristike EIA standarda

Slika 2 Raspored pinova na konektoru DSUB-25

6

Inače serijski port koristi dve vrste konektora DSUB-25 (25-pinski) i DSUB-9 (9-pinski) Oblik konektora i raspored pinova na njima kao i glavni signali na pojedinim pinovima dati su na Slikama 2 i 3 i Tabeli 2 dok je opis svakog signala da u Tabeli 3

Slika 3 Raspored pinova na konektoru DSUB-9

DSUB-25 DSUB-9 Signal Opis signala

pin 2 pin 3 TD Transmit Data pin 3 pin 2 RD Receive Data pin 4 pin 7 RTS Request To Send pin 5 pin 8 CTS Clear To Send pin 6 pin 6 DSR Data Set Ready pin 7 pin 5 SG Signal Ground pin 8 pin 1 CD Carrier Detect pin 20 pin 4 DTR Data Pin Ready pin 22 pin 9 RI Ring Indicator

Tabela 2 Signali na konektorima DSUB-25 (relevantni) i DSUB-9

Signal Opis signala Značenje signala TD Transmit Data Serijski izlaz podataka (TXD) RD Receive Data Serijski ulaz podataka (RXD) RTS Request ToSend Indicira da je modem spreman za razmenu podataka CTS Clear To Send Kada modem detektuje signal Carrier od modema sa

druge strane linije onda ona postaje aktivna DSR Data Set Ready DCE signalizira da je spreman za rad SG Signal Ground Masa CD Carrier Detect DCE javlja da je veza uspostavljena

DTR Data Pin Ready Indicira DCE uređaju da je DTE spreman RI Ring Indicator Signalizira detekciju signala zvona na telefonskoj liniji

Tabela 3 Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je na donjoj slici

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 6: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

6

Inače serijski port koristi dve vrste konektora DSUB-25 (25-pinski) i DSUB-9 (9-pinski) Oblik konektora i raspored pinova na njima kao i glavni signali na pojedinim pinovima dati su na Slikama 2 i 3 i Tabeli 2 dok je opis svakog signala da u Tabeli 3

Slika 3 Raspored pinova na konektoru DSUB-9

DSUB-25 DSUB-9 Signal Opis signala

pin 2 pin 3 TD Transmit Data pin 3 pin 2 RD Receive Data pin 4 pin 7 RTS Request To Send pin 5 pin 8 CTS Clear To Send pin 6 pin 6 DSR Data Set Ready pin 7 pin 5 SG Signal Ground pin 8 pin 1 CD Carrier Detect pin 20 pin 4 DTR Data Pin Ready pin 22 pin 9 RI Ring Indicator

Tabela 2 Signali na konektorima DSUB-25 (relevantni) i DSUB-9

Signal Opis signala Značenje signala TD Transmit Data Serijski izlaz podataka (TXD) RD Receive Data Serijski ulaz podataka (RXD) RTS Request ToSend Indicira da je modem spreman za razmenu podataka CTS Clear To Send Kada modem detektuje signal Carrier od modema sa

druge strane linije onda ona postaje aktivna DSR Data Set Ready DCE signalizira da je spreman za rad SG Signal Ground Masa CD Carrier Detect DCE javlja da je veza uspostavljena

DTR Data Pin Ready Indicira DCE uređaju da je DTE spreman RI Ring Indicator Signalizira detekciju signala zvona na telefonskoj liniji

Tabela 3 Značenje pojedinih signala

Oblik signala kod RS232 standarda dat je na donjoj slici

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 7: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

7

Slika 4 Oblik signala kod RS232 standarda

Situacija kada nema slanja podatka tj linija je slobodna označena je MARK naponom Prenos počinje kada linija pređe u SPACE stanje što predstavlja START bit Iza start bita dolaze bitovi podataka i to tako da je jedinica predstavljena negativnim naponom a nula pozitivnim Ovo je najčešće u suprotnosti sa ustaljenom logikom da je +5 V logička jedinica a 0 V logička nula Problem rešava prijemno kolo (npr MAX232 ST232 ICL232 MAX3232 ST3232 ICL3232 itd) konvertujući napo-ne tako da su prilagođeni naponima interfejsa koji se koristi Posle bita podatka dolazi bit parnosti koji se koristi za detekciju jednostruke greške u prenosu Iza bita parnosti signal se postavlja u MARK stanje što označava početak STOP bita Prema RS232 standardu broj stop bitova može biti 1 15 ili 2 Nakon završetka STOP bitova linija je spremna za slanje novog karaktera PC računari koriste kao DATA bite najčešće 7 ili 8 bita Između slanja dva karaktera linija se nalazi u MARK stanju a u toku prenosa više puta prelazi iz MARK u SPACE stanje u zavisnosti od broja jedinica i nula To znači da se linija može nalaziti u SPACE stanju najviše u slučaju kada karakter sadrži sve nule Ova osobina prenosa upotrebljena je za uvođenje specijalnog znaka nazvanog BREAK (prekid) Ovaj se signal ko-risti kako bi se dala prijemniku signalizacija da je došlo do problema u slanju podataka

Serijski prenos počinje tako da predajna strana šalje prijemnoj strani signal RTS - zahtev za slanjem dok prijemnik ako je spreman za prijem odgovara signalom CTS - spreman za prijem Predajnik zatim šalje podatke prijemniku Nakon prijema podataka prijemnik proverava da li su podaci primljeni bez greške i za to vreme javlja predajniku da je zauzet Ako su podaci primljeni bez greške prijemnik šalje predajniku signal potvrde ACK (Acknowledgment - ASCII 6) a u slučaju ako se pojavila neka greška šalje signal negativne potvrde NAK (ASCII 21) Zavisno od upotrebljenog protokola odgovor predajnika na dobijeni NAK signal može biti ponovno slanje podataka

Protokol za prenos može se izvesti na dva načina i to hardverski i softverski Za realizaciju hardverskog protokola neophodno je da postoje linije RTS CTS i linija za prenos bitova poruke Softverska realizacija koristi umesto linija RTS i CTS ASCII znakove XON i XOFF (nazivaju su i DC1 i DC3) zbog čega je umesto tri dovoljna samo jedna linija Kada se primenjuje ovaj protokol prijemnici i na predaji i prijemu proveravaju svaki prispeli znak radi utvrđivanja da li je to XON XOFF ili podatak Strana koja ne može da primi karakter kao indikator tog stanja drugoj strani šalje XOFF znak

Prilikom serijskog prenosa podataka moguća je pojava sledećih vrsta grešaka

bull Greška uokvirenja ili greška rama podatka (framing error) Do ove greške dolazi u slučaju kada prijemnik očekuje STOP bit ali se on ne pojavljuje

bull Greška prekoračenja (overrun error) Nastaje kada se pojavljuje novi znak u prijemniku a prethodni nije upotpunosti primljen

bull Greška parnosti (parity error) Nastaje kada bit parnosti ne odgovara stanju bitova u bitovima podatka

Standardno za vezu dva PC računara koristi se takozvani Null Modem kabl čiji je raspored pinova prikazan na Slici 5

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 8: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

8

Slika 5 Izgled null-modem kabla Sa slike se vidi da su i na prijemnoj i predajnoj strani spojeni signali DTR DSR i CD kao i RTS i CTS dok su signali TD i RD ukršteni Za testiranje serijskog porta i izradu programa koristi se kabl sa zatvorenom petljom (Loop Back) prikazan na Slici 6

Slika 6 Kabl sa zatvorenom petljom za testiranje

Serijska komunikacija se kod PC računara izvodi upotrebom Intelovog UART kola 8250 kod XT ili 16450 kod AT računara Oba su kola slična s tim što kolo 16450 ima neke naprednije karakteristike Kolo 8250 sadrži 10 dok kolo16450 ima 12 programabilnih jednobajtnih registara Svaki port (COM1 i COM2) ima po jedno UART kolo koja se vezuju na linije prekida IRQ3 i IRQ4 Standardno se koriste dva porta a moguće je i više sa adresama i IRQ Bazne adrese COM portova nalaze se u BIOS-u na adresama datim u Tabeli 5 dok je u Tabeli 6 data grupa registara koju koristi serijski port računara

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 9: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

9

Naziv Adresa IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3

Tabela 4 Adrese COM portova

Startna adresa Opis 00000400 Početna adresa COM1 00000402 Početna adresa COM2 00000404 Početna adresa COM3 00000406 Početna adresa COM4

Tabela 5 Bazne adrese COM portova u BIOS-u

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 10: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

10

2 USB PORT I STANDARD

Prvi PC računari koristili su tri porta i to jedan za štampač (LPT) i dva serijska(COM1 i COM2) pri čemu je jedan od njih većinom bio zauzet od strane serijskog miša Međutim njihova sve veća primena rezultovala je pojavu različitih uređaja koji se na njih uključuju kao što su skeneri digitalne fotoaparati i slično To je uzrokovalo uvođenje USB porta Universal Serial Bus) koji je standardizovan 1996 godine

Porastom broja različitih periferija koje se mogu priključiti na računar dolazilo je do sledećih problema

bull priključivanje dodatnih periferija na računar koji ima samo 2 serijska i 1 paralelni port je zahtevalo dodavanje novih kartica koje bi predstavljale vezu između računara i date periferije što je zahtevalo dodatne resurse (jedan slot u samom računaru i po pravilu jedan IRQ prekid a nešto ređe i DMA kanal) bull neki uređaji su projektovani tako da koriste određeni IRQ ili port tako da je lako dolazilo do konflikata u IRQ mapi ili na DMA kanalima bull deljenje datih portova (serijski paralelni) sa nekim drugim uređajem (npr štampač i skener na paralelnom portu ) što je dovodilo do nepredvidljivih problema ili potrebe da se kablovi uređaja po potrebi uključuju i isključuju sa datog porta što je nekim situacijama vrlo opasno (dolazi do spaljivanja portova na računaru odnosno uređaju)

Njegovim uvođenjem nastojalo se da se reše sledeći problemi

bull rešenje u vezi ograničenja broja slotova na osnovnoj ploči kao i broja portova PC računara bull jednostavno proširenja PC računara upotrebom softverskih drajvera bull mogućnost napajanja eksternih uređaja koji malo troše od strane računara bull omogućeno je priključenje do 127 eksternih uređaja na glavni USB port pa se time rešava

ograničenje koje je pre postojalo jedan uređaj - jedan slot bull omogućene su velike brzine prenosa do 12 Mbs bull pojednostavljuju se kablovi za priključenje uređaja a njihova dužina se povećava bull omogućena je kontrola potrošnje eksternih uređaja bull podržano je autokonfigurisanje ovih uređaja po principu PnP detekcije novih uređaja u

računaru

USB port podržava dve brzine prenosa i to veliku brzinu kada se prenos kreće do 12 Mb u sekundi i za sporije uređaje nižu brzinu prenosa do 15 Mb u sekundi USB port koristi četverožilni kabl preko koga se prenose podaci i napajanje sa impedansom 90 Ω što je dato na Slici 7

Za prenos podataka koriste se dve linije D+ i D- Kada se prenosi logička nula linija D- je na većem potencijalu od linije D+ dok je u slučaju prenosa logičke jedinice obrnuto Predajnici moraju da daju napon veći od 28 V sa opterećenjem od 15 kΩ Prijemnici moraju da imaju simetričan ulaz pri čemu do promene stanja dolazi ako se na ulazu prijemnika naponi razlikuju za više od 200 mV Svaka linija za prenos podataka ima i nesimetričan prijemnik za detekciju greške koja se pojavi ako su obe linije podataka nađu na istom naponu Kada se radi o brzom USB prenosu tada se na liniju D+ priključuje opteretni otpornik(pull-up) reda 15 kΩ dok se kod sporog prenosa on uključuje na liniju D- Na izlazima drajvera linija D+ i D- priključuju se opteretni otpornici reda 15 kΩ U slučaju kada USB eksterna jedinica nije pod naponom i kada je drajverski izlaz porta u stanju visoke impedanse preko ovih otpornika se određuje brzina prenosa Preko njih se takođe određuje da je eksterni uređaj

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 11: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

11

povezan na USB čvor Kada uređaj nije povezan na USB čvor njegovi izlazni drajveri biće u stanju visoke impedanse i obe linije će biti na potencijalu mase koje se naziva nesimetrična nula SE0(Singl Ended 0) Povezivanje uređaja na čvor on će dobiti napajanje ali njegovi izlazi i dalje će biti u stanju visoke impedanse dok će napon na liniji podataka porta koji je povezan na opteretni otpor postati visok što može da detektuje čvor U slučaju ako se ne šalju USB paketi linije podataka nalaze se u stanju visoke impedanse Za priključenje USB uređaja koriste se konektori prikazani na Slici 8

Slika 7 Presek USB četvorožilnog kabla

Slika 8 Četvoropinski USB konektori

Standardni USB kabl za priključenja eksternih USB uređaja je oblika kao na Slici 9 dok je

organi-zacija USB bus-a prikazana na Slici 10

Slika 9 Četvoropinski USB kabl

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 12: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

12

Slika 10 Organizacija USB bus-a

Iz prikazane slike vidi se da se USB bus-a može predstaviti sa tri nivoa i to bull Nivo USB uređaja (USB Interface Layer) koji obezbeđuje fizičku vezu za prenos signala i

paketa između računara i USB uređaja Ovaj nivo omogućuje sistemskim programima koji kontrolišu USB bus rad sa opštim funkcija koje koristi USB uređaj

bull Nivo funkcije se ostvaruje upotrebom klient softvera (Client SW) bull Nivo interfejsa obezbeđuje da se fizički obavlja komunikacija

Sistem USB povezivanja deli se na četiri funkcionalno zaokružene celine bull USB uređaj (USB Physical Device) bull klijent softver (Client Software) bull USB sistemski softver (USB System Software) bull glavni USB kontroler (USB Host Controller)

USB predtsvlja neki eksterni uređaj koji se priključuje na USB i koji izvršava zahtevane funkcije

Klijent softver omogućava da se izvrši prenos podataka između eksternog USB uređaja i računara i najčešće ga isporučuje proizvođač USB uređaja USB sistemski softver je deo operativnog sistema za podršku USB uređaja i isporučuje se uz operativni sistem Glavni USB kontroler zaokružuje u jednu celinu hardver i softver koji omogućuje rad USB uređaja

USB uređaji sa računarom komuniciraju slanjem paketa Na početku paketa slanja paketa linija za prenos podataka se postavlja u suprotno stanje od onog u kome se nalazi u mirnom stanju dosk se na kraju paketa podataka ova linija postavlja u SE0 stanje u dužini trajanja od dva bita

USB uređaji mogu se resetovati na nekoliko načina od koji se često koristi pristup kada se linija podataka postavi u SE0 stanje u trajanju od 10ms U slučaju ako USB bus se nalazi u mirnom stanju većem od 3 ms tada eksterni USB uređaji mogu preći u stanje male potrošnje ako to podržavaju Vraćanje u radno stanje treba da traje najduže 20 ms Prenos podatka se vrši upotrebom NRZI metoda kodiranje (Non Return Zero Invert) što znači ako se pojavi logička jedinica ona će trajati celom svojom

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 13: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

13

dužinom odnosno neće doći do promene naponskog nivo U slučaju pojave povorki nula napon se linije menja za svaki bit što se koristi za uspostavljanje signala takta na prijemu Kada se u povorci podataka pojavi šest uzastopnih jedinica radi sigurnosti na prijemu vrši se umetanje bita tj ubaci se jedna nula koja se na prijemu izbacuje

Preko USB bus-a kao što smo videli prenosi se i napon napajanja V+ koji iznosi + 5V uz maksimalno opterećenje do 5A pri čemu potrošnja pojedinačne eksterne jedinice ne sme preći 400 mA kada je u radnom stanju a u stanju mirovanja 500 microA Ovaj uslov ne mogu ispuniti svi USB uređaji tako da u tom slučaju moraju koristiti sopstveno napajanje Iako takvi uređaji koriste takvo napajanje napon USB kabla koriste i ovi uređaji radi provere od strane računara koji je od uređaja povezan na USB bus Prilikom inicijalizacije USB sistema po uključenju računara on pribavlja podake o svim uređajima koji povezani na USB radi numerisanja bus-a (bus enumeration)

Za ispravan rad USB uređaja koji su povezani na računare svaki od njih mora da ima adresu koje se kreću u opsegu od 0 do 128 i dodeljuje ih računar prilikom konfigurisanja bus-a Adresa 0 je adresa koju koristi računar za postavljanje uređaja povezanih na USB bus i ne mogu je koristiti eksterni uređaji

Podaci koji se šalju preko USB bus dele se u pakete pri čemu veličina jednog paketa ne sme biti veća od 8 Kb Računar deli vreme u intervale dužine 1 ms i u svakom intervalu šalje jedan paket koji počinje sa SOP bitom Sledeći se paket razdvaja od prethodnog sa EOP što je prikazano na donjoj slici

Na početku svako paketa se šalje sinhronizacioni bajt koji se sastoji od sedam nula i jednom jedinicom (80H) Na osnovu ovog bajta sinhrono kolo na strani prijemnika generiše taktni signal Nako sinhronizacionog bajta sledi polje za identifikaciju paketa PID (Packet Identifier) kod koda se prva 4 bita koriste za identifikaciju vrste paketa dok su sledeća četiri bita(veće težine) invertovani biti PID-a na osnovu čega se proverava tačnost primljenog PID-a Polje PID definiše vrstu paketa i njegov format kao i tip detekcije greške Postoje sledeći oblici paketa u USB komunikaciji

SOF paket čiji je PID=0101 koji šalje 11 bitni podatak o broju rama (frame) kao i 5 bita CRC detekcije

Setup IN i OUT paketi imaju oblik kao na gornjoj slici Setup paket čiji je PID=1101 vrši setovanje funkcije od strane računara i sadrži tekuću i krajnju (Endpoint) adresu IN paket čiji je

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 14: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

14

PID=1001 je prvi paket od od eksternog uređaja prema računaru OUT paket čiji je PID=0001 je prvi paket koji računar šalje periferijskom uređaju

Data0 paket čija je PID=0011 je paran paket podataka koji sadrži do 1023 bajta podataka Data1 paket čija je PID=1011 je neparan paket podataka Ovi paketi za CRC kontrolu koriste 16 bita

Ack paket koji ima PID=0010 je potvrda prijemnika da je paket primljen bez greške Nak paket koji ima PID=1010 je je odgovor predajnika o neispravno primljenom paketu Stall paket koji ima PID=1110 pokazuje da je neko odredište zagušeno tj ne može da primi sve do tada poslate pakete Prenos podataka počinje tako što računar pošalje paket u kome je definisan tip i smer prenosa adresa USB uređaja i adresa krajnjeg odredišta Ovaj se paket naziva token Adresirani uređaj detektuje svoju adresu iz adresnog polja i time bude selektovan i postaje spreman za prijem ili predaju podataka Primalac odgovara slanjem odzivnog paketa (handshake packet) izveštavjući o uspešnosti prenosa Adresiranje uređaja vrši se preko adresnog polja paketa od 7 bita Adresa se koristi sa kod IN OUT ili Setup paketa Paket SOF sadrži broj ramova od 11 bita pri čemu se njegov sadržaj inkrementira za svaki novi ram sve do vrednosti 7FFH Paketi podatataka Data0 i Data1 sadrže do 1023 bajta Ova dva paketa omogućuju jednostavnu sinhronizaciju predajnika i prijemnika u slučaju zahteva predajnika za ponovnim slanjem radi greške u prenosu Predajnik šalje novi paket tek kada od prijemnika dobije potvrdu o uspešnosti tj paket Ack Prvo se šalje paket Data0 pa paket Data1 i tako naizmenično Svi paketi imaju na kraju bite za redundantu proveru CRC da li je paket ispravno primljen Pri prenosu podataka uvek se obavlja komunikacija u oba smera i uvek je inicijalizirana od strane računara Smer prenosa definiše računar slanjem IN ili OUT paketa U IN paketu računar zahteva od eksternog USB uređaja da mu poašalje podatke Nakon ovog paketa eksterni uređaj ili računar šalje Data paket pri čemu se na kraju svakog primljenog paketa strana koja je vršila prijem šalje potvrdu uspešnosti slanje tj Ack Nak ili Stall paket Iz opisa USB porta vidimo da uređaji koji se na njega priključuju moraju imati visok nivo inteligencije kako bi podržali navedeni standard Zbog toga se u njima nalaze najčešće mikrokontroleri koji podržavaju ovu komunikaciju i koji su za ovu vrstu standarda i razvijeni Programiranje je znatno teže budući da navedeni protokoli moraju biti podržani Zbog toga naučiti programiranje USB porta je svakako i najveći domet u programiranju portova

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 15: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

15

3 SPI KOMUNIKACIJA

SPI (Serial Peripheral Interface) standard za sinhronu serijsku komunikaciju razvijen je od strane Motorolinih inženjera za potrebu brzog i pouzdanog serijskog prenosa podataka na manjim rastojanjima (do 3m) Prvobitno ovaj standard je bio predviđen za komunikaciju sa perifernim uređajima ali je vremenom razvijena i mogućnost komunikacije između više mikro-kontrolera ili mikroprocesora

Postoji široka paleta perifernih uređaja baziranih na SPI ndash od običnih TTL pomeračkih (shift) registara do SPI memorija displeja AD konvertora itd

Tip komunikacije Maksimalna brzina Opis SCI 125 Kbs MCU takt = 2MHz SPI 1 Mbs MCU takt = 2MHz Master SPI 2 MBs MCU takt = 2MHz Slave

Tabela 6 Poređenje brzina komunikacija preko SCI i SPI

Tabela 6 pokazuje kako je SPI komunikacija oko 10 puta brža od SCI komunikacije (Standard Communication Interface) kada mikrokontroler radi kao master i oko 20 puta brža kada mikro-kontroler radi kao slave Takođe se vidi da kada mikrokontroler radi kao slave moguća je brzina prenosa podataka jednaka internom taktu mikrokontrolera

Oslash Napomena Motorola je svoj serijski asinhronisinhroni interfejs nazvala ldquoSerijski ko-

munikacioni interfejsrdquo (Serial Communications Interface ili SCI) Odgovarajući Intel-ov serijski interfejs nosi naziv ldquoProgramibilni komunikacioni interfejsrdquo (Programmable Communication Interface ili PCI) itd U praksi pomenuti interfejs koriste U(S)ART čipovi odnosno U(S)ART integrisana kola kao na primer Intel 8251 INS 8250-B INS 16450 16550 itd

SPI PROTOKOL

Pri SPI prenosu podaci se šalju preko pomeračkog registra sa serijskim izlazom a primaju preko pomeračkog registra sa serijskim ulazom U bilo kom trenutku može da postoji jedan master kako bi se osigurala ispravna komunikacija

Kao što je prikazano na Slici 11 potrebne su 4 linije odnosno za SPI komunikaciju koriste se 4 pina

Oslash MOSI (Master Output Slave Input) Kada mikrokontroler radi kao master onda je ovo linija za

slanje podataka a kada radi kao slave ndash ovo je linija za primanje podataka Oslash MISO (Master Input Slave Output) Kada mikrokontroler radi kao master onda je ovo linija za

primanje podataka a kada radi kao slave ndash ovo je linija za slanje podataka U slučaju da je komunikacija isključivo jednosmerna svakako da se može ostvariti sa tri linije (bez MOSI ili MISO zavisno od slučaja)

Oslash SCK (SPI Clock) Ovo je linija za takt pod kojim se izvodi komunikacija Takt daje master a pomerački registar slave-a prima podatke odnosno očitava ulaz na promenu ovog takta

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 16: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

16

Oslash SS (Slave Select) Ovaj pin mikrokontrolera se veže na liniju za selektovanje slave-a Kada mikrokontroler radi kao slave i kada je ovaj (u slučaju ulazni) pin na visokom nivou onda se takt sa SCK linije i podaci sa MOSI linije se ignorišu Tek kada se dovede SS na nizak nivo SPI sistem slave-a prati promene na pinovima koji su vezani za ovaj tip komunikacije i može da primi i pošalje informaciju Kada mikrokontroler radi kao master SS pin ima dve opcije Može da se konfiguriše kao ulazni pin i da setuje određeni fleg (flag) tj da inicira prekid u slučaju da mu bude doveden nizak nivo To je dobra opcija za međuprocesorsku komunikaciju Na ovaj način može uspešno da se eliminiše mogućnost da više mikrokontrolera u datom trenutku pokušaju da budu masteri Ovo se rešava softverski SS pin takođe može da se konfiguriše kao izlazni i da selektuje neki slave ili da obavlja bilo kakvu funkciju nezavisnu od SPI podsistema mikrokontrolera

Slika 11 Povezivanje jednog mastera i tri slave-a u SPI komunikaciju

U slučaju povezivanja više mikrokontrolera preko SPI kanala svi MISO pinovi se vezuju zajedno na jednu liniju MOSI pinovi se vezuju na drugu liniju a SCK pinovi se vezuju na treću liniju kao sto je prikazano na Slici 11

Slika 11 je primer vezivanja kada samo jedan mikrokontroler može da bude master Ako uloga mastera treba da bude promenljiva onda svaki mikrokontroler treba da ima pojedinačnu vezu sa SS pinovima ostalih mikrokontrolera

Zamislimo strukturu sa dva pomeračka registra povezana kao na Slici 12 Neka sa strane sa koje su povezani medusobno registri imaju serijske ulaze i izlaze Sa stanovišta programera kakvi su ulazi i kakva je logika ndash nije bitno Pinovi za podatke (DATA1) su povezani zajedno i to predstavlja jednosmernu liniju sa koje pomerački registar 1 predaje podatke pomeračkom registru 2 Pinovi za podatke (DATA2) su povezani zajedno i to je jednosmerna linija sa koje pomerački registar 2 predaje podatke pomeračkom registru 1 Pinovi za takt (CLOCK) su zajednički (to je jednosmerna linija sa koje pomerački registar 1 šalje takt bez razlike u kojem smeru se prenose podaci) Pinovi za omogućavanje komunikacije (ENABLE) su vezani zajedno ndash to je jednosmerna linija preko koje pomerački registar 1 omo-gućava (dozvoljava) rad pomeračkom registru 2

Kada prvi pomerački registar šalje poruku drugom redosled operacija je sledeći

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 17: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

17

1 Preko linije ENABLE prvi registar omogućava rad drugom odnosno omogućava da drugi na svakom prelazu na liniji CLOCK iz visokog na nisko nivo (ili obrnuto zavisno od logike) pročita stanje na liniji DATA1

2 Preko linije CLOCK prvi registar šalje takt pod kojim drugi čita promene na liniji za podatke DATA1

3 Kada prvi registar završi sa prenosom postavlja linije CLOCK i ENABLE u stanje mirovanja (idle state)

Slika 12 Hardverska šema SPI komunikacije

Kada prvi registar želi da dobije informaciju od drugog preduslov koji treba da se ispuni je da drugi registar već ima spremnu informaciju koju treba da pošalje Poslednja pretpostavka u analogiji međumikrokontrolerske SPI komunikacije podrazumeva da je u registar za slanje slave-a programski već postavljena informaciju koja se traži Redosled operacija je

1 Preko linije ENABLE prvi pomerački registar omogućava rad drugom ili preciznije

omogućava da drugi pri svakom prelazu iz visokog na nisko nivo na liniji CLOCK (ili obrnuto zavisno od logike) promeni stanje na liniji DATA2

2 Preko linije CLOCK prvi šalje takt sa kojim će čitati promene stanja koje šalje drugi na liniju za podatke DATA2 Obrnuto rečeno drugi pomerački registar preko linije CLOCK dobija takt pod kojim će slati signale

3 Kada drugi završi sa prenosom onda prvi postavlja linije CLOCK i ENABLE u sta-nje mirovanja Prvi laquoznaraquo da je prenos završen kada se na liniji CLOCK završi n-ti ciklus (n je broj bitova koji čini informaciju na primer 8 16 itd)

Ovo je primer koji opisuje SPI logiku a pri tome ne ulazi u pojedinosti interne periferije samog

mikrokontrolera Relativno je lako da se pošalje poruka preko SPI kanala od mastera ka slave-u Ono što želimo da naglasimo jeste način slanja podataka slave-master

U kom trenutku treba slave da pošalje poruku odlučuje master On tada šalje takt na liniju CLOCK Da bi poslao takt zbog automatizovane SPI kontrolne i upravljačke logike master u stvari mora da pošalje poruku na magistralu i normalno da selektuje slave-a

Sve što je navedeno opisuje suštinu SPI komunikacije Svakako da ima mnogo detalja koji varira-ju u zavisnosti od mikrokontrolera i perifernog uređaja ali to se mnogo lakše usvaja kada se poznaju osnovni principi

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 18: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

18

4 DIGITALNI POTENCIOMETAR SA SPI INTERFEJSOM

Karakteristike

bull svaki potenciometar iz serija MCP4XXXX ima 256 stanjanivoa bull Vrednosti potenciometra od 10 kΩ 50kΩ i 100 kΩ bull Jednokanalna (single) ili dvokanalna (dual) verzija bull SPI TM serijski interfejs (modovi 0 0 i 11) bull plusmn1 LSB max INL amp DNL bull realizovan u CMOS tehnologiji male potrošnje bull Maksimalna struja napajanja od 1microA prilikom izvršenja operacija u statičkom režimu rada bull Omogućeno povezivanje (ulančavanje) više uređaja (samo MCP42XXX) bull Mogućnost shutdown-a otvorenih kola svih otpornika radi maksimalne uštede energije bull Hardverski shutdown putem pina dostupan samo na MCP42XXX bull Operiše sa jednim napajanjem (27 ndash 55V) bull Industrijski temperaturni opseg -40 C ndash +85 C bull Prošireni temperaturni opseg -40 C ndash +125 C

Slika 13 Blok šema digitalnog potenciometra

Opis

MCP41XXX i MCP421XXX su digitalni potenciometri sa 256 pozicija dostupni u verzijama od 10 kΩ 50kΩ i 100 kΩ MCP41XXX je jednokanalni (eng single) uređaj i isporučuju se u 8-pinskom PDIP ili SOIC kućištu MCP42XXX poseduje dva nezavisna kanala u 14-pinskom PDIP SOIC ili TSSOP kućištu Pozicija klizača kod MCP41XXX42XXX se menja linearno i kontroliše se pomoću

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 19: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

19

SPI interfejsa industrijskog standarda Uređaji imaju potrošnju manju od 1microA u statičkom režimu rada Softversko isključivanje se izvodi razdvajanjem ldquoArdquo pina od otpornog dela i simultanog povezi-vanja klizača na ldquoBrdquo pin Dvokanalna (eng dual) verzija MCP42XXX uređaja ima SHDN pin koji obavlja istu funkciju hardverski Za vreme shutdown moda sadržaj klizačkog registra je moguće promeniti pa potenciometar ima novu vrednost nakon izlaska iz shutdown moda Klizač se postavlja na sredinu skale (pozicija 80h) nakon uključenja RS (reset) pin omogućuje hardversko resetovanje i takođe vraća klizač na sredinu skale MCP42XXX SPI interfejs uključuje pinove SI i SO omogućujući povezivanje deljivih uređaja Otpornost između pojedinačnih kanala na MCP42XXX varira manje od 1 Ova serija digitalnih potenciometara operiše sa jednim izvorom napajanja od 27 ndash 55V i specifici-rana je preko industrijskih i proširenih temperaturnih opsega

Slika 14 Raspored pinova na kućištima Opis pinova

1) PA0 PA1 Veza A pina potenciometra 2) PB0 PB1 Veza B pina potenciometra 3) PW0 PW1 Veza klizača potenciometra

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 20: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

20

4) Izbor čipa chip select ( CS ) Ovo je SPI port i koristi se za izvršenje nove komande nakon što je ista učitana u pomerački (eng shift) registar Ovaj pin ima Šmitov triger na ulazu 5) Serijski Takt Clock (SCK) Ovaj SPI port se koristi za taktovanje novih podataka koji se unose u registar Podaci se unose putem SI pina na rastuću ivicu takta a eksportuju se preko SO pina na opadajuću ivicu takta Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin na visokom naponskom nivou) Ovaj pin ima Šmitov triger na ulazu 6) Serijski Unos Podataka (SI) Ovo je SPI port za serijski unos podataka Komandni i bajtovi podataka se unose u pomerački registar putem ovog pina Ovaj pin je kontrolisan od strane CS pina (tj uređaj neće povlačiti struju ukoliko je SCK pin u radnom režimu kada je CS pin aktivan tj na visokom nivou) Ovaj pin ima Šmitov triger na ulazu 7) Serijski Izlaz Podataka (SO)

(Prisutan samo u MCP42XXX seriji)

Ovo je SPI serijski izlazni pin podataka i koristi se za povezivanje više urređaja Podaci se eksportuju preko SO pina na opadajuću ivicu takta Ovo je push-pull izlaz i ne prelazi u stanje visoke impedanse kada je CS na visokom nivou Prelazi na niski logički nivo kada je CS na visokom logičkom nivou 8) Reset ( RS )

(Prisutan samo u MCP42XXX seriji)

Reset pin postavlja sve potenciometre na sredinu skale (kod 80h) ukoliko je na niskom logičkom nivou najmanje 150ns Ovaj pin ne bi trebao da se postavlja u nisko logičko stanje kada je SHDN na nuli Sa namerom smanjenja potrošnje ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju na nivoima logičke nule i logičke jedinice Pin Rreset ne sme ostati nepovezan 9) Shutdown (SHDN )

(Prisutan samo u MCP42XXX seriji)

Pin Shutdown ima Šmitov triger na ulazu Kada je na pinu stanje logičke nule kolo se postavlja u mod za smanjenje potrošnje (eng idle mod) kada je A pin otvoren a B i W pini povezani za sve potenciometre Ovaj pin ne bi trebalo postavljati na niski logički nivo kada je CS pin na niskom logičkom nivou U cilju minimizacije potrošnje energije ovaj pin poseduje aktivno pull-up kolo Ovaj pin povlači zanemarljivu struju kada je na nivoima logičke nule i logičke jedinice SHDN pin ne sme ostati nepovezan

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 21: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

21

Tabela 7 Značenje pojedinih pinova (8-pinski potenciometar)

Pin

Name Function 1 CS Chip Select 2 SCK Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PB1 Pin B Connection For Pot 1 6 PW1 Wper Connection For Pot 1 7 PA1 Pin A Connection For Pot 1 8 PAO Pin A Connection For Pot 0 9 PWO Wper Connection For Pot 0 10 PBO Pin B Connection For Pot 0 11 RS Reset Input 12 SHDN Shutdown Input 13 SO Data Out for Daisy-Chaining 14 VDD Power

Tabela 8 Značenje pojedinih pinova (14-pinski potenciometar)

Informacije o aplikaciji

Serije MCP41XXX42XXX su jednokanalnidvokanalni digitalni potenciometri sa 256 pozicija i

mogu se koristiti umesto standardnih mehaničkih potenciometara Dostupne su otpornosti od 10 kΩ 50kΩ i 100 kΩ Kao što možemo videti na Slici 15 svaki od potenciometara se sastoji od promenljivog otpornika i 8-bitnog (256 pozicija) registra podataka koji određuje položaj klizača Nominalne otpornosti klizača su 52Ω za verziju od 10 kΩ i 125 Ω za verzije od 50kΩ i 100 kΩ Za slučaj dvokanalnih potenciometara varijacije podudarnosti od kanala do kanala su manje od 1 Otpornost između klizača i krajnje tačke bilo kog od otpornika menja se linearno u zavisnosti od vrednosti smeštene u registar podataka Kod 00h povezuje klizač sa B pinom Prilikom dovođenja napajanja svi registri podataka se automatski postavljaju na vrednost sredine skale (80h) Serijski interfejs omogućuje učitavanje podataka u pomerački registar koji se onda prosleđuje registrima podataka Serijski interfejs takođe omogućuje postavljanje pojedinačnih potenciometara u shutdown mod (režim rada) kako bi omogućila minimalna potrošnja energije SHDN pin se upotrebljava za postavljanje svih potenciometara u shutdown mod a RS pin omogućuje postavljanje svih potenciometara na sredinu skale (80h)

Pin

Name

Function 1 CS

CS Chip Select

2 SC Serial Clock 3 SI Serial Data Input 4 Vss Ground 5 PA Pin A Connection 6 PW Wiper Connection 7 PB Pin B Connection 8 VDD Power

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 22: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

22

Slika 15 Detaljnija blok šema digitalnog potenciometra

Slika 16 Povezivanje digitalnog potenciometra i mikroprocesora

Kada se neko kolo povezuje na digitalni potenciometar potrebno je koristiti sprežne konden-zatore Ovi kondenzatore treba postaviti što je bliže moguće pinu uređaja Preporučena vrednost kondenzatora je 01 microF Digitalni i analogni putevi signala trebalo bi da budu što više odvojeni na ploči takođe nijedan od tih puteva ne bi trebao da se prostire ispod digitalnog potenciometra ili sprežnog kondenzatora Veliku pažnju treba posvetiti putevima visokofrekventnih signala (kao što su linije takta) i držati ih što dalje od analognih vodova Preporučuje se upotreba analogne ravne mase kako bi potencijal mase bio isti za sve uređaje na ploči

Režimi rada Digitalni potenciometar se koristiprimenjuje u sledećim režimima rada

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 23: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

23

bull reostatski mod bull potenciometarski (mod delitelja napona)

Reostatski režim rada

U reostatskom režimu rada potenciometar se koristi kao otporni element sa dva kraja Neiskorišćeni kraj treba povezati za klizač kao što je prikazano na Slici 17 Napomenimo da obrtanje polariteta A i B pina neće uticati na izvršenje operacije

Slika 17 Reostatski režim rada (fiksna otpornost)

Upotreba digitalnog potenciometra u ovom modu omogućava kontrolu ukupne otpornosti između dva priključka Izmerena otpornost biće najmanja prilikom koda 00h kada je klizač vezan na B pin Otpornost u slučaju ovog koda jednaka je otporu klizača koji tipično iznosi 52Ω za MCP4X010 uređaje od 10 kΩ 125 Ω za verzije od 50kΩ (MCP4X050) i 100 kΩ (MCP4X100) Za digitalni potenciometar od 10 kΩ veličina LSB iznosi 390625 Ω (ako usvajamo ukupnu otpornost od 10 kΩ) Otpornost će se povećavati sa LSB korakom sve dok izmerena otpornost ne dostigne vrednost 998594 Ω pri kodu FFh Klizač se nikad ne povezuje na pin A otpornika

Za dvokanalne digitalne potenciometre varijacija ukupne otpornosti od kanala do kanala između pina A i B manja je od 1 Međutim varijacija otpornosti od jednog do drugog digitalnog potenciometra može iznositi i do 30 U reostatskom modu otpornost ima pozitivan temperaturni koeficijent Najveće razlike u zavisnosti od promene temperature javiće se u prvih 6 kodova (kodovi od 00h do 0Fh) usled uticaja koeficijenta otpornosti klizača na ukupnu otpornost Na preostale kodove dominantan uticaj ima temperaturni koeficijent ukupne otpornosti R AB koji tipično iznosi 800ppm C

Slika 18 Reostatski režim rada (promenljiva otpornost)

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 24: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

24

Potenciometarski mod

U potenciometarskom modu sva tri pina uređaja povezana su na različite priključke u kolu Ovo omogućava potenciometru da daje izlazni napon proporcionalan ulaznom naponu Ovaj mod se ponekad naziva mod delitelja napona Potenciometar se koristi za dobijanje napona koji se podešava pozicijom klizača između dva završna kraja kako je to prikazano na Slici 18 Napomenimo da obrnut polaritet A i B pina ne utiče na izvršenje operacije

U ovoj konfiguraciji koeficijent interne otpornosti definiše ukupan temperaturni koeficijent digi-talnog potenciometra Otpornik koji se sastoji od R WB i R AB ima temperaturni koeficijent koji tipično iznosi 1ppm C (mereno pri kodu 80h) Pri nižim kodovima temperaturni koeficijent otpornosti klizača je dominantan

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 25: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

25

5 MIKROKONTROLER PIC18F4550

PIC18F4550 pripada 18F seriji mikrokontrolera kompanije Microchip Mikrokontroleri ovog proizvođača se odlikuju malom cenom i što je važnije besplatnom tehničkom podrškom (kompajleri razvojni sistemi programatori)

S obzirom da poseduju harvard strukturu memorijska mapa je podeljena na programsku i memoriju za podatke kao i EEPROM Procesor (CPU) mikrokontrolera koristi tehniku preklapanja kako bi se sve instrukcije (osim grananja) izvršavale jedan ciklus Zbog toga se osnovni takt deli sa 4 jer se faze izvršenja naredbi preklapaju Sve naredbe su fiksne dužine od 2 bajta tako da je adresiranje memorije ograničeno Zbog toga se memorija deli na 16 stranica a izbor stranice se vrši u odgovara-jućim kontrolnim registrima Ova osobina značajno usporava rad mikrokontrolera međutim napredniji kompajleri vrše inteligentno plan-iranje raspodele memorije kako bi se varijable koje se zajedno koriste nalazile u istoj memo-rijskoj banci

Programska memorija je 32KB dok je RAM veličine 2 KB Takođe postoji i 256B EEPROM-a Procesor poseduje prošireni skup instukcija u odnosu na ranije serije (16 i 17) kao i nove načine adresi-ranja Tako su dodate naredbe za hardversko množenje i deljenje inkrementiranje i dekrementriranje sa uslovnim skokom naredbe za čitanje tabela i druge Programski brojač je širine 21 bit i njemu se može pristupati samo indirektno preko određenih registara

Mikrokontroler poseduje i magacin (stack) ali se on nažalost može koristiti samo indirektno ndash tako što se u poseban registar upisuje željeni sadržaj i potom posebnom instrukcijom sadržaj tog registra stavlja na stek Kod čitanja sa magacina vrednost se takođe nalazi u tom registru Oscilator pruža brojne mogućnosti prilikom izbora radnog takta koji je ujedno i takt za periferije Maksimalni eksterni takt je 48MHz što daje procesoru mikrokontrolera takt od 12MHz Za tu svrhu se koristi PLL kolo i delitelji frekvencije Najbitnije je da se za rad USB modula mikrokontrolera mora obezbediti takt od 24MHz a PIC ima prednost u odnosu na konkurentske mikrokontrolere što taj takt može biti neza-visan od takta za CPU i druge jedinice

Mehanizam prekida je organizovan kao jedan prekidni vektor koji sadrži adresu prekidne rutine u kojoj se treba ispitati izvor prekida i preduzeti željena akcija Dakle nema prekidnog vektora za svaki ili grupu izvora prekida ndash što je jedan od nedostataka ovog mikrokontrolera jer se time gubi na brzini i preglednosti koda

Ovaj mikrokontroler ima bogat skup hardverskih periferija koje mu omogućavaju primenu u brojnim aplikacijama

Slika 19 Mikrokontroler PIC18F4550 u kućištu DIP-40

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 26: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

26

Mikrokontroler poseduje 35 izlazno ulaznih linija koje se multipleksiraju sa data registrima portova i signalima drugih modula kao što je prikazano na slici

Od perifernih modula PIC18F4550 izdvojićemo veoma napredan integrisani USB 20 modul velike brzine sa 1KB memorije za podatke 10 bitni 13-to kanalni AD konvertor 4 tajmerske jedinice (dve imaju mogucnost PWM-a) SPI I2C i USART modul

Radna frekvencija mikrokontrolera je do 48MHz dok je efektivna vrednost frekvencije 4 puta manja zbog protočnog rada procesora (pipelining-a)

Nadalje ćemo detaljnije opisati USART i USB module mikrokontrolera PIC18F4550

Slika 20 Raspored pinova mikrokontrolera PIC18F4550 u kućištu DIP-40 Režimi rada mikrokontrolera

bull Run mode i CPU i periferija su uključeni bull Idle mode CPU je isključen a periferija uključena bull Sleep mode i CPU i periferija su isključeni bull Idle mode ndash struja je do 58 μA bull Sleep mode ndash struja je do 01 μA bull Oscilator Timer1 11 μA 32 kHz 2V bull Watchdog tajmer 21 μA bull Dvobrzinski startni oscilator

Struktura fleksibilnog oscilatora

bull Četiri kristalna režima rada uključujući i visoko precizni PLL za USB bull Dva spoljašnja taktna režima rada do 48 MHz bull Unutrašnji oscilator

- 8 frekvencija koje bira korisnik od 31 kHz do 8 MHz - Podešavanje koje bira korisnik zbog kompenzacije frekvencijskog drifta

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 27: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

27

bull Sekundarni oscilator koristi Timer1 bull Opcije dvostrukog oscilatora omogućavaju mikrokontroleru i USB modulu da radi na

različitim taktnim brzinama bull Fail-Safe taktni nadzor omogućava bezbedno isključivanje ukoliko se neki takt zaustavi

Osobine periferije

bull Svaki pin može da prihvatipreda relativno veliku vrednost struje 25mA25mA bull Tri spoljašnja prekida bull Četiri tajmera (Timer0 do Timer3) bull Do dva CCP (CaptureComparePWM) modula

- Capture je 16-bitni maksimalne rezolucije 625 ns (TCY16) - Komparator je 16-bitni maksimalne rezolucije 100 ns (TCY) - PWM izlaz PWM rezolucija je od 1 do 10 bita

bull Proširen CCP (CaptureComparePWM) modul - Multiple output režimi rada - Mogućnost izbora polariteta - Programabilno laquomrtvoraquo vreme - Automatsko isključivanje i automatski restart

bull Prošireni USART modul bull Modul master sinhronog serijskog porta (MSSP) podržava 3-žični SPI (sva četiri režima

rada) i I2C master i slave režim rada bull 10-bitni 13-kanalni AD konvertor sa pristupnim vremenom koje se može programirati bull Dvostruki analogni komparator sa multipleksnim ulazom

Specijalne karakteristike mikrokontrolera

bull C kompajler optimizirane arhitekture sa opcionim dodatnim skupom instrukcija bull 100 000 ciklusa upisivanjabrisanja (erasewrite) proširene programske Flash memorije bull 1 000 000 upisivanjabrisanja ciklusa EEPROM memorije podataka bull FlashDate EEPROM zadržavanje duže od 40 godina bull Mogućnost samoprogramiranja tokom rada (ovo na primer dozvoljava CCS kompajler) bull Postoje nivoi prioriteta za prekide bull Jednociklusni množač 8 x 8 bull Prošireni watchdog tajmer (WDT)

- Period programiranja od 41 ms do 131 ms bull Zaštita programskog koda bull Programiranje unutar sistema preko dva pina i napajanjem od 5V bull Debagovanje unutar sistema preko dva pina (ICD) bull Prošireni ICDICSP port (samo za mikrokontrolere u 44-pinskom kućištu) bull Širok opseg napona napajanja (od 2V do 55V)

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 28: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

28

Slika 21 Arhitektura mikrokontrolera PIC18F4550 nanoWatt Tehnologija

Svi mikrokontroleri iz familije PIC18F2455255044554550 imaju takve katakteristike da mogu značajno da smanje potrošnju Način rada i procena smanjenja potrošnje mogu da budu

bull Alternate Run režim rada U zavisnosti da li kontroler radi po taktu Timer1 ili unutrašnjeg oscilatora smanjenje može da bude i do 90

bull Multiple Idle režimi rada Kontroler može da radi i sa isključenim CPU dok je periferija još uvek aktivna Na ovaj način potrošnja iznosi oko 4 od potrošnje u normalnom režimu rada

bull On-the-fly prekidački režim rada Kontrola potrošnje se može pozvati i u toku programa Na ovaj način se korisniku ostavlja mogućnost promene režima rada rada u softverskoj apli-kaciji

bull Smanjena potrošnja u modulima mikrokontrolera Pošto je potrošnja veća kada se ko-riste i Timer1 i Watchdog tajmer potreba za njim je minimizirana

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 29: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

29

Opcije višestrukog oscilatora i njegove karakteristike

Svi mikrokontroleri iz familije PIC18F2455255044554550 pružaju dvanaest različitih opcija oscilatora dozvoljavajući korisnicima širok izbor u razvoju aplikacijskog hardvera To podrazumeva

bull Četiri režima rada koji koriste kristalni kvarc ili keramički rezonator bull Četiri režima rada koja koriste spoljašnji takt bull Unutrašnji oscilator koji omogućuje takt od 8 MHz (plusmn2) i INTRC izvor (aproksimativno

31 kHz koji ne zavisi od temperature i VDD) kao i opseg od 6 taktnih frekvencija koje koris-nik može sam da izabere između 125 KHz i 4 MHz što konačno daje 8 taktnih frekvencija

bull PLL frekvencijski množač dostupan i za visoke brzine i režim rada spoljnog oscilatora što omogućava širok spektar taktnih brzina od 4 MHz do 48 MHz

bull Asinhroni dvostruki takt omogućava USB modulu da radi na visokim frekvencijama dok ostatak mikrokontrolera se taktuje iz oscilatora male snage

Ostale specijalne karakteristike

bull Izdržljivost memorije Proširene Flash ćelije za obe programske memorije i za EEPROM memoriju podataka su procenjene da traju najmanje više eareswrite ciklusa ndash više od 100 000 za programsku memoriju i 1 000 000 za EEPROM Zadržavanje (čuvanje) podataka bez osvežavanja je procenjeno da bude veće od 40 godina

bull Mogućnost samoprogramiranja Ovaj uređaj može da sam upisuje u prostor sopstvene programske memorije pod kontrolom unutrašnjeg softvera Korišćenjem bootloader-a koji je smešten u zaštićenom boot bloku na vrhu programske memorije postaje moguće da se stvori aplikacije koja može da unapređuje (update-uje) sama sebe

bull Prošireni set instrukcija Familija mikrokontrolera sa USB modulom (PIC18F24552550 44554550) uvodi dodatno proširenje standardnog seta instrukcija serije PIC18 uvodeći dodatnih 8 instrukcija i Indexed Literal Offset Addressing režim rada Cilj ovoga bio da bi se optimizovao program pisan na višem programskom jeziku kao što je C

bull Proširen CCP modul U PWM režimu rada ovaj modul omogućava 1 2 ili 4 modulisana izlaza za kontrolisanje half-bridge i full-bridge drajvera Ostale ka-rakteristike su auto-matsko isključivanje (za isključivanje PWM izlaza u toku prekida ili za neki drugi zadat uslov) i automatsko restartovanje (da bi se izlazi opet aktivirali onda kad su zadati uslovi opet ispunjeni)

bull Proširen USART Ovaj modul serijske komunikacije može da vrši standardne RS-232 operacije i pruža podršku za LIN protokol Druga proširenja uključuju automatsku detekciju brzine prenosa podataka (Automatic Baud Rate Detection) i 16-bitni Generator takta za prenos podataka (Baud Rate Generator) za poboljšanje rezolucije Kad mikrokontroler ko-risti unutrašnji oscilator EUSART omogućava stabilnu operaciju za aplikaciju koja komu-nicira spolja bez korišćenja eksternog kristala (ili prati potrošnju snage)

bull 10-bitni AD Konvertor Ovaj modul aktivira programirljivo vreme konverzije čime će kanal biti odabran i konverzija će se pokrenuti bez čekanja na period odabiranja (na taj način se smanjuje dodatni kod)

bull Rezervisan ICDICSP Port Ovaj modul uključuje debager (za pronalaženje grešaka) i pi-nova za programiranje koji nisu u multipleksu sa nekim drugim funkcijama mikrokon-trolera Ponuđena kao opcija ova funkcija omogućava korisnicima da razviju moćne IO aplikacije sa mogućnošću programiranja i debagovanja u samom električnom kolu

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 30: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

30

Organizacija memorije

Memorija mikrokontrolera PIC18F4550 je organizovana u sledeće tri celine

bull Programska memorija bull Memorija podataka (RAM) bull EEPROM memorija podataka

Memorija podataka i programska memorija su odvojene što omogućava istovremeni pristup

prostoru ove dve memorije EEPROM memorija podataka za neku praktičnu primenu može se smatrati kao periferni uređaj s obzirom da se adresiranje i pristup odvija preko kontrolnih registra

Slika 22a Programska memorija i magacin (stack)

Organizacija programske memorije

U mikrokontrolerima serije PIC18 integrisan je 21-bitni programski brojač koji je u mogućnosti da adresira programsku memoriju od 2 MB Ukoliko se pristupi memorijskoj lokaciji između 2MB-ne

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 31: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

31

adrese i gornje granice fizički implementirane memorije to će imati za posledicu učitavanje logičkih 0 (NOP instrukcija)

Mikrokontroler PIC18F4550 poseduje Flash memoriju kapaciteta 32KB i može da memoriše 16384 instrukcije obima jedne reči

Mikrokontroleri iz serija PIC18 imaju dva vektora prekida

bull Reset vektor čija je adresa 0000h i bull Prekidni (interrupt) vektor čije su adrese 0008h i 0018h

Na Slici 22b su ilustrovani programska memorija i magacin tokom izvršenja nekog programa

Slika 22b Programska memorija i magacin (stack) tokom izvršenja programa

USART modul

Univerzalni sinhroniasinhroni serijski prmopredajnik ima mogućnosti half i full duplex prenosa automatske detekcije i kalibracije bodove brzine Za komunikaciju se koriste IO pinovi RC6 kao TX i RC7 kao RX za asinhroni prenos Rad modula se kontroliše pomoću 3 registra U pitanju su

1 TXSTA Predajni statusni i kontrolni registar sa sledećim bitovima CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D CSRC ndash nebitan kod asinhronog prenosa TX9 ndash ldquo1rdquo uključuje prenos devetog bita TXEN ndash predaja dozvoljena sa setovanjem ovog bita SYNC ndash rdquo0rdquo je sinhroni a ldquo1rdquo asinhroni režim rada BRGH ndash setuje veliku brzinu prenosa TRMT ndash status predajnog pomeračkog registra ldquo1rdquo registar je prazan TX9D ndash deveti bit za prenos (najcešće parnost)

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 32: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

32

2 TCSTA Prijemni statusni i kontrolni registar sa sledećim bitovima SPEN RX9 SREN CREN ADDEN FERR OERR c SPEN ndash uključujeisključuje serijski port RX9 ndash ldquo1rdquo uključuje prenos devetog bita SREN ndash nebitan kod asinhronog prenosa CREN ndash prijem podataka uključen setovanjem ovog bita ADDEN ndash bit dozvole za detekciju adrese FERR ndash bit za detekciju grešaka rama (okvira) OERR ndash bit za detekciju grešaka prekoračenja RX9D ndash deveti bit za prenos (najčešće parnost) 3 BAUDCON Kontrolni registar generatora takta za brzinu prenosa ABDOF RCIDL RXDTP TXCKP BRG16 ndash WUE ABDEN ABDOF ndash bit poravnanja prilikom automatske akvizicije podataka RCIDL ndash prijemni bit o režimu smanjene potrošnje RXDTP ndash ako je ldquo1rdquo Rx podaci su invertovani TXCKP ndash ako je ldquo1rdquo Tx podaci su invertovani BRG16 ndash uključuje 16-bitni generator bodove brzine WUE ndash aktivacioni (wake-up) bit dozvole ABDEN ndash uključuje merenje brzine prenosa (brzina u baudima) sledećeg karaktera (55h)

Izbor takta se vrši setovanjem odgovarajućih bitova i upisom vrednosti u registarski par SPBRGH SPBRG U zavisnosti od kombinacije koristi se sledeća tabela za računanje željene brzine asinhrone komunikacije

Konfiguracioni bitovi SYNC BRG16 BRGH

BRGEUSART mod

Formula za ra-čunanje brzine

0 0 0 8 bitni Fosc[64(n+1)] 0 0 1 8 bitni Fosc[16(n+1)] 0 1 0 16 bitni Fosc[16(n+1)] 0 1 1 16 bitni Fosc[4(n+1)]

U dokumentaciji se mogu naći tablice sa standardnim bodovim brzinama i procentualnim odstupanjima za različite konfiguracije takta procesora

Prenos podaka se vrši preko predajnog i prijemnog kola asinhronog primopredajnika

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 33: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

33

Slika 23 Predajno kolo USART modula

TXREG sadrži 8-bitni podatak koji se treba poslati Kada se u ovaj registar upiše neka vrednost njegov sadržaj se prebacuje u TSR registar za pomeranje (šiftovanje) Tada je TXREG prazan što može izazvati prekid TSR registar se ne puni podatkom iz TXREG sve dok se ne prenese poslednji stop bit TSR je dužine 9 bita Prvih 8 je vrednost koja se uzima iz TXREG dok je 9-ti bit bit parnosti (opciono) Kod prenosa svih 9 bitova prvo je potrebno upisati 9 bit pa onda vrednost u TXREG kako bi se izbeglo da se deveti bit upiše posle napuštanja 8-bitne vrednosti iz TSR registra TSR se taktuje signalom iz baud rate generatora koji je u stvari takt za pomeranje (šiftovanje) Ovaj registar je vezan za odgovarajući pin preko koga se prenose serijski podaci

Slika 24 Prijemno kolo USART modula

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 34: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

34

Prijemno kolo je slične konstrukcije i radi po sličnom principu Podaci sa ulaza se vode u datarecovery kolo koje radi na 16 puta većem taktu od brzine prenosa kako bi se izbegle greške ndash jer je brzina odabiranjauzorkovanja veća od brzine prenosa Primljeni podaci se pomeraju kroz prijemni pomerački (shift) registar RSR dužine 9 bita Posle toga se ovim podacima može pristupiti preko RCREG registra dok se kao i kod predaje 9-tom bitu pristupa preko kontrolnog registra Kada se RCREG napuni vrednošću iz RSR može se generisati prekid kako bi se obradili preuzeti podaci Iz prethodnog se može zaključiti kako se za serijsku komunikaciju mogu koristiti dva načina rada Jedan je zasnovan na prekidima koji se generišu pri završetku slanja ili prijema svakog bajta tako da se u prekid potprogramu može prihvatiti i obraditi primljeni podatak ili pripremiti slanje sledećeg bajta Drugi način je sličan samo se umesto prekida koristi prozivka (eng pooling) statusnih bitova koji uka-zuju na završetak transfera jednog bajta USB modul

Zahvaljujući USB modulu i interfejsu PIC18F4550 se izdvaja od ostalih mikrokontrolera iz familije USB komunikacija je veoma složena i nije jedinstvena ndash zbog čega ćemo samo ukratko opisati osobine USB modula korišćenog mikrokontrolera Karakteristike USB modula

bull Fleksibilan USB 20 standard bull Brzine Low Speed (15 Mbs) i Full Speed (12 Mbs) bull Podržava kontrolni prekidni izohroni i bulk transfer bull Podržava do 32 krajnje tačke odnosno16 bidirekciono bull 1Kbit-ni dvostruki pristup RAM memoriji za USB bull Unutar mikrokontrolera je integrisan USB primopredajnik sa sopstvenim regulatorom napona bull Interfejs za spoljašnji USB primopredajnik bull Protočni paralelni port (Streaming Parallel Port) za (protočni) USB prenos

Fizička veza ostvaruje se preko dva pina D+ i D- dok se ostali koriste za povezivanje eksternog

predajnika (transivera) Podaci se primaju i prenose preko posebnog bafera kapaciteta 1KB koji je podeljen na 16 tzv endpoint-a i njihove deskriptore koji sadrze podatke o karakteru endpoint-a (smeru toka podataka) veličini endpoint-a i njegovoj početnoj adresi Pristup podacima koji se primaju ili šalju se obavlja preko ovih endpoint-a USB serijski interfejs vrši primopredaju podataka i on mora biti taktovan frekvencijom od 24MHz Modul ima ugradjen 33V regulator koji služi za napajanje pull-up otpornika na D+ liniji što je bitno kod početne faze prepoznavanja od strane hosta Njime se određuje i brzina prenosa (spor ili brz transfer)

Komunikacija se zasniva na nekoliko prekida a najvažniji je onaj koji se generiše kada se primi neki token (podatak) Tada se u odgovarajućim registrima može pročitati u kojem endpoint-u se podatak nalazi kako bi mu se pristupilo Postoje i drugi prekidi koji se okidaju u slučaju greške reseta zagušenja ili aktivnosti na liniji Svi oni se mogu iskoristiti za kontrolu komu-nikacije Zbog svoje kompleksnosti koja uglavnom višestruko premašuje složenost većine aplikacija rad sa USB portom i mikrokontrolerom se najčešće izvodi pomoću gotovih modula laquoOživljavanjeraquo USB komunikacije potrebno pisanje posebnog drajvera uređaja na strani hosta kao i odgovarajućeg softvera u mikrokontroleru Zahvaljujući pomenutom HID (Human Interface Device) standardu i gotovim programskim modulima ovaj veliki problem se veoma lako rešava pogotovo ukoliko se radi sa PIC mikrokontrolerima

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 35: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

35

Slika 25 Blok šema USB modula

Detaljnije informacije vezane za USB komunikacioni standard se mogu pronaći na zvaničnom sajtu standarda wwwusborg ADC SA SUKCESIVNIM APROKSIMACIJAMA

Svi signali u prirodi su kontinualni a veoma teško je upravljati nekim procesom bez digitalizacije

analognih veličina Kao što je napomenuto PORTA i PORTE imaju mogućnost AD konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni

S obzirom da je 10-bitni AD konvertor sa sukcesivnim aproksimacijama integrisan u mikro-kontrolerima PIC familije naredne redove ćemo posvetiti upravo ovom tipu AD konvertora

ADC sa sukcesivnim aproksimacijama (SAR ADC) ima veoma malu potrošnju i zauzima relativno malo mesta na silicijumskoj pločici Ova kombinacija performansi ga čini idealnim za veliki broj aplikacija kao što su instrumenti koji su baterijski napajani industrijska kontrola akvizicija podataka itd

SAR ADC su čest izbor za aplikacije sa srednjom i visokom rezolucijom i sa srednjom brzinom konverzije (od nekoliko micros do nekoliko desetina micros) Najčešće se biraju gde brzina odabiranja ne prelazi 5 micros a opseg rezolucije SAR AD konvertora je od 8 do 16 bita Principijelna šema AD konvertora sa sukcesivnim aproksimacijama data je na Slici 26

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 36: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

36

Slika 26 AD konvertor sa sukcesivnim aproksimacijama

Maksimalni ulazni napon koji se može priključiti na konvertor je Vulmax i on je jednak naponu pune skale Vps tj Vulmax = Vps Maksimalni izlazni napon iz DA konvertora Viz je za 1 LSB manji od napona Vps Pod ovakvim uslovima DA konvertor će kad je MSB bit postavljen na jedinicu (Qn-1 =1) a svi ostali na nulu generisati napon Viz = Vps 2 Sledeći bit (Qn-2=1) ima težinu Vps 4 odnosno pošto se radi o binarnom DA konvertoru svaki sledeći bit ima težinu upola manju od predhodnog

Konverzija počinje tako što nakon priključenog Vul kontrolno logičko kolo postavi logičku jedinicu u bit najveće težine registra sukcesivnih aproksimacija (Qn-1) DA konvertor generiše napon Viz = Vps 2 koji se poredi sa Vul Ako je Vul gt Vps 2 MSB bit digitalnog ekvivalenta napona Vul je jedan a ako je Vul lt Vps 2 tada taj bit treba da bude nula Kontrolna logika na osnovu izlaza komparatora resetuje (ako je k=0) ili ne resetuje (ako je k=1) MSB flipflop u registru sukcesivnih aproksimacija čime je definisan bit najveće vrednosti Qn-1 izlazne informacije a zatim postavlja drugi bit po težini Qn-2 na logičku jedinicu Komparator poredi novu vrednost Viz (koja je Vps 4 ili 3Vps 4 u zavisnosti dobijenog u poređenju sa bitom najveće vrednosti) sa Vul a zatim kontrolna logika na osnovu izlaza komparatora resetuje ili ne flipflop za taj bit (Qn-2) i definisana je vrednost bita drugog po težini Kontrolna logika postavlja sledeći bit koji ima težinu upola manju od prethodnog na logičku jedinicu Proces poređenja i postavljanja narednih flipflopova se nastavlja sve do bita najmanje težine Q0 U zavisnosti od logičkog nivoa komparatora flipflop bita najmanje težine se resetuje ili ostaje logička jedinica Time je konverzija završena

Kao primer na Slici 25 pokazan je vremenski dijagram napona Viz idealnog četvorobitnog AD konvertora sa sukcesivnim aproksimacijama

Na Slici 27 je pretpostavljen ulazni napon 1116 gt VulVps gt58 Konverzija počinje postavljanjem koda 1000 u SAR (registar sukcesivnih aproksimacija) Izlazni napon DA konvertora se postavlja na Viz = Vps 2 Pošto je Vul gt Viz na osnovu k=1 u trenutku t1 kontrolna logika ne resetuje Q3 čime je određen MSB bit izlazne informacije postavlja Q2=1 tako da je kod upisan u registar sukcesivnih aproksimacija (SAR) 1100 a izlazni napon DA konvertora se postavlja na Viz=3 4Vps Sada je Vul lt Viz kontrolna logika u trenutku t2 na osnovu k=0 resetuje Q2 i bezuslovno postavlja Q1=1 Ovim je određena i druga cifra izlazne digitalne informacije SAR je postavljen u stanje 1010 a Viz na Viz= 5Vps8 Pošto je Vul gt Viz k=1 zabranjuje da kontrolna logika resetuje Q1 u trenutku t3 postavlja se Q0=1 tako da je u SAR registru stanje 1011 U trenutku t4 se na osnovu k=0 resetuje Q0 tako da je konačan rezultat konverzije koji je ostao u registru sukcesivnih aproksimacija Q3Q2Q1Q0=1010 Što je najbliži binarni broj koji odgovara ulaznom naponu

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 37: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

37

Slika 27 Promena napona DA konvertora prilikom AD konverzije

Na istom vremenskom dijagramu na slici je isprekidanom linijom prikazan tok konverzije napona Vul lt Vps 16 Nakon četiri koraka sukcesivnih aproksimacija kao rezultat konverzije se dobija stanje Q3Q2Q1Q0=0000

Na osnovu sprovedene analize funkcionisnja AD konvertora sa sukcesivnim aproksimacijama (skraćeno SAR ADC) mogu se definisati uslovi za sintezu registra sukcesivnih aproksimacija (SAR) i kontrolne logike (KL)

bull Konverzija analognog signala u digitalni binarni kodovan broj od n cifara se obavlja u n+1 taktnom intervalu od kojih prvi (t0) inicijalizuje sekvencu sukcesivnih aproksimacija a poslednji (tn) označava kraj konverzije

bull Start konverzije se zadaje asinhrono u odnosu na taktni impuls AD konvertora bull Vreme između dva susedna taktna impulsa treba da je dovoljno dugačko kako bi isteklo vreme

postavljanja DA konvertora kašnjenja kroz komparator i kašnjenja kroz kontrolnu logiku bull Korišćeni n-bitni DA konvertor mora imati monotono rastuću karakteristiku prenosa

(diferencijalnu linearnost bolju od plusmn05 LSB) bull Flipflopovi registra sukcesivnih aproksimacija (SAR registra) treba da imaju mogućnost

pojedinačnog postavljanja i resetovanja bull Ulazni napon Vul ne sme da se menja u toku konverzije s obzirom da se flipflopovi postavljaju

bit po bit a već postavljeni flipflopovi u slučaju promene Vul ne mogu da promene stanje

Vreme konverzije AD konvertora sa sukcesivnim aproksimacijama ja dato izrazom

tSARADK=(n+1)tc

gde je n- broj bita konvertora a Tc - perioda ponavljanja impulsa CLK Minimalna perioda ponav-ljanja CLK zavisi od vremena postavljanja DA konvertora od kašnjenja kroz komparator i kašnjenja kroz registar sukcesivnih aproksimacija sa pripadajućim logičkim kolima Dominantan uticaj na vreme konverzije ima vreme postavljanja DA konvertora pošto je ovo vreme često i za red veličine duže od

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 38: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

38

ostalih kašnjenja u mreži Tipično vreme konverzije za na primer dvanaestobitne integrisane SAR ADK je od 1micros za najbrže do nekoliko desetina micros za sporije ADC

Brzina SAR ADC je ograničena sa sledećim faktorima

bull Vremenom smirivanja DA konvertora bull Komparatorom koji za određeno vreme mora da detektuje male razlike između napona Vul i Viz bull Vremenom izvršavanja logičkih operacija

Maksimalno smirivanje DA konvertora je najčešće određeno smirivanjem MSB-a Linearnost ce-lokupnog AD konvertora je limitirana linearnošću DA konvertora Zbog toga SAR ADC-i čija rezo-lucija prelazi 12 bita često zahtevaju neku vrstu kalibracije ili dodavanje novih komponenti da bi se po-stigla potrebna linearnost Dodavanje novih komponenti donosi sa sobom i problem slaganja (upare-nosti) komponenti Zbog svega navedenog u praksi najčešće srećemo realizacije čija rezolucija ne pre-lazi 12 bita Kod mikrokotrolera PIC18F4550 koristi se 10-bitni ADC

Najvažnije prednosti AD konvertora sa sukcesivnim aproksimacijama su mala potrošnja visoka rezolucija tačnost i to što zauzimaju malo mesta na silicijumskoj pločici Glavna ograničenja u strukturi su mala brzina odabiranja kao i zahtevi da tačnost pojedinih delova (kao što su DA konvertor i komparator) bude na nivou tačnosti celog sistema

Da bi se iskoristio 10-bitni i 13-kanalni AD konvertor integrisan u mikrokontroleru neophodno je podesiti registre ADCON0 ADCON1 i ADCON2

Inače registar ADCON0 definiše startovanje (uključivanje) modula za konverziju kanal koji se koristi za konverziju dok se registrom ADCON2 podešavaju parametri AD konverzije (frekvencije odabiranja konvertora početak konverzije)

Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni)

Slika 28a Registar ADCON0

bitovi 7 i 6 ndash ne koriste se bitovi CHS3-CHS0 ndash selekcija jednog od 13 kanala (kombinacije 110111101111 se ne koriste) bit GODONE ndash statusni bit AD konvertora (kada uzima vrednost 1 vrši se konverzija) bit ADON ndash dozvola rada AD konvertora

Slika 28b Registar ADCON1

bitovi 7 i 6 ndash ne koriste se bit 5 (VCFG1) ndash konfiguracioni bit za negativni referentni napon bit 4 (VCFG0) ndash konfiguracioni bit za pozitivni referentni napon bitovi PCFG3-0 ndash konfiguracioni bitovi AD konvertora kojima se definiše koji kanali su

analogni a koji digitalni (videti sledeću tabelu)

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 39: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

39

Na sledećoj slici je prikazan registar ADCON2

Slika 29 Registar ADCON2

bit 7 (ADFM) ndash definiše format podatka (poravnanje ulevo ili udesno) bit 6 ndash ne koristi se bitovi ACQT2-0 ndash definišu vreme prikupljanje podataka konverzije bitovi ADCS2-0 ndash definišu takt AD konvertora

Blok-dijagram AD konvertora mikrokontrolera PIC18F4550 prikazan je na Slici 30

Algoritam AD konverzije

1 Konfiguracija AD konvertora (preko ADCON0 ADCON1 i ADCON2) 2 Konfigurisanje AD prekida ukoliko se zahtevaju (ADIF ADIE PEIE GIE) 3 Čekanje da prođe zahtevano akviziciono vreme 4 Početak procesa AD konverzije 5 Završetak procesa AD konverzije 6 Čitanje rezultata AD konverzije iz registra ADRES 7 Za sledeću konverziju skočiti na korak 1 ili korak 2

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 40: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

40

Slici 30 Blok-dijagram AD konvetora Greške AD konverzije

AD konvertori nemaju idealnu prenosnu funkciju Odstupanja od idealne prenosne funkcije definišu DC preciznost i okarakterisana su parametrima u tablicama tehničkih podataka

AD konverzija odstupa od idealnog zbog varijacija u procesu izrade što je zajedničko za sva integrisana kola kao i zbog raznih drugih izvora grešaka u samom procesu analogno-digitalne (AD) konverzije Preciznost AD konvertora zavisi od nekoliko ključnih tehničkih osobina koje obuhvataju diferencijalnu nelinearnu grešku (DNL) integralnu nelinearnu grešku (INL) ofset i grešku pojačanja preciznost referentnog napona uticaj temperature i dinamičke performanse

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 41: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

41

Dve veoma popularne metode za utvrđivanje ukupne greške sistema su metoda kvadratnog korena sume kvadrata grešaka (root-sum-square - RSS) i metoda najgoreg slučaja RSS metoda pod-razumeva kvadriranje pojedinačnih grešaka njihovo sabiranje i konačno kvadratni koren zbira daje ukupnu grešku

UKUPNA GREŠKA = gde En predstavlja pojedinačnu grešku neke komponente ili parametra

Pomenuti metod je najprecizniji kada pojedinačne greške nisu u međusobnoj korelaciji (što može a ne mora biti slučaj) Kod metode najgoreg slučaja sve pojedinačne greške se sabiraju Ova metoda garantuje da greška nikada neće preći određenu granicu Kako se na ovaj način dobija gornja granica greške stvarna greška je uvek manja od ove vrednosti (vrlo često mnogo manja) Izmerena stvarna greška obično je negde između vrednosti dobijene na ova dva načina ali je često bliža vrednosti dobi-jenoj RSS metodom U zavisnosti od potreba i zahteva bira se između najgore i tipične vrednosti gre-šaka Odluka o tome koja će vrednost biti korišćena zavisi od mnogo faktora uključujući tu i stan-dardnu devijaciju od merene vrednosti važnosti pojedinih parametara veličini greške u odnosu na dru-ge greške itd Tako da u stvari i ne postoje neka tačno određena i stroga pravila koja moraju bit ispoš-tovana

Od aplikacije zavisi koje će specifikacije projektant da smatra najvažnijim Na primer DTMF dekoder uzorkuje telefonski signal kako bi utvrdio koji je taster pritisnut na aparatu sa tonskim biranjem U ovom slučaju najbitnije je izmeriti snagu signala (iz određenog seta frekvencija) među ostalim tonovima i šumom koji nastaje prilikom AD konverzije U ovom projektu projektant će naj-više pažnje da obrati na parametre dinamičkih performansi kao što su odnos signalšum i harmonijska izobličenja U drugom primeru sistem može da očitava signal koji meri temperaturu neke tečnosti U ovom slučaju DC preciznost merenja je najbitnija tako da će ofset pojačanje i nelinearnosti biti najpre proveravane

Ne mora da znači da ako uzmemo AD konvertor sa više bita od predviđenog za neku određenu preciznost da ćemo i dobiti karakteristike konvertora u željenoj preciznosti Ako na primer pret-postavimo da ja potrebno postići preciznost od 01 ili 10-bitnu preciznost (1210) tako da ima smisla odabrati konvertor sa rezolucijom većom od ove Ako odaberemo 12-bitni konvertor možemo da pretpostavimo da će to biti dovoljno ali bez analize specifikacije nema garancije da on postiže 12-bitne performanse (on može biti boljih ili lošijih karakterisitka) Na primer 12-bitni AD konvertor sa integralnom greškom nelinearnosti od 4 LSB-a (Least Significant Bit - najmanje važan bit) može postići samo 10-bitnu preciznost u najboljem slučaju (ako se podrazumeva da su greške ofseta i poja-čanja kalibrisane) Uređaj sa integralnom greškom nelinearnosti od 05 LSB-a može postići grešku manju od 00122 odnosno 13-bitnu preciznost (ako su uklonjene greške ofseta i pojačanja) Da bi se izračunala najveća preciznost potrebno je maksimalnu integralnu grešku nelinearnosti podeliti sa 2N gde je N ndash broj bita U našem slučaju ako dopustimo grešku od 0075 (tj 11-bitnu grešku) za AD konvertor ostaje nam greška od 0025 za ostatak elektronskog sklopa što uključuje greške senzora grešku od operacionih pojačavača multipleksera eventualnog DA konvertora ili drugih analognih izlaznih signala na putanji signala

Mnogi signali su relativno statični kao npr izlazni signali temperaturnih senzora ili senzora pritiska U takvim aplikacijama mereni signal je povezan sa nekom fizičkom veličinom i apsolutna preciznost merenja tog napona je važna Parametri AD konvertora koji opisuju ovaj vid preciznosti su greška ofseta greška pojačanja dinamičkog opsega diferencijalna nelinearnost (DNL) i integralna nelinearnost (INL) Ova četiri parametra u potpunosti opisuju apsolutnu preciznost AD konvertora

Iako se ne navodi kao parametar jedna od osnovnih grešaka AD konvertora a nastaje kao rezultat pretvaranja signala i podataka je greška kvantizacije Ova greška ne može biti izbegnuta u me-

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 42: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

42

renjima uz AD konverziju DC preciznost i rezultujuću apsolutnu grešku određuju četiri parametra ndash ofset pojačanje u celom dinamčkom opsegu INL i DNL Greška kvantizacije je nezaobilazni rezultat predstavljanja analognog signala u digitalnim brojevima (drugim rečima plod analogno-digitalne konverzije) Maksimalna greška kvantizacije je određena rezolucijom merenja (ili rezolucijom AD konvertora ako je signal oversample-ovan) Dalje greška kvantizacije će se pojaviti kao šum poznatiji kao šum kvantizacije u dinamičkoj analizi Na primer greška kvantizacije pojaviće se kao prag šuma u FFT dijagramu (frekvencijskom spektru) merenog signala na ulazu AD konvertora

Slika 31a Greška ofseta kod realnog AD konvertora

Slika 31b Greška pojačanja kod realnog AD konvertora

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 43: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

43

Slika 31c Diferencijalna nelinearnost kod realnog AD konvertora

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 44: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

44

6 SOFTVER ZA PIC MIKROKONTROLERE Za projekat koji je pred vama je korišćen softver mikroC od firme Mikroelektronika iz

Beograda Ovaj softverski alat služi za pisanje kocircda za Microchip-ove PIC mikrokontrolere Programeru je omogućeno da na jednostavan način kontroliše proces programiranja i napravi kvalitetan firmware za mikrokontroler

Ovde ćemo navesti osnovne karakteristike softvera

bull Pisanje C kocircda korišćenjem kvalitetnog i preglednog editora što se ogleda u automatskoj kontroli i upozorenjima vezanim za sintaksu kocircda korišćenih para-metara kao i automatskoj korekciji pojedinih grešaka

bull Preglednost strukture programa (kocircda) promenljivih i funkcija omogućava Code explorer bull Jasan asemblerski kocircd i standardna kompatibilnost generisanih HEX datoteka toka programa

preko ugrađeg debagera (debugger) bull Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina koje značajno

ubrzavaju pisanje programa bull Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape statistike kocircda i slično

mikroC doduše odstupa od ANSI standarda u nekoliko segmenata Neka odstupanja su

načinjena su u cilju da se olakša programiranje dok su druge rezultat hardverskih ograničenja PIC mikrokontrolera Pomenućemo sada neke specifičnosti

bull Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima koja su

posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju bull Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni tj nije moguća

međusobna dodela ili upoređivanje bull mikroC tretira označavanje const kao ldquotrue constansrdquo (kod C++) što omogućava korišćenje

const objekta na mestima gde ANSIC očekuje constant izraz Ukoliko se teži ka prenosivosti programa treba koristiti tradicionalno pretprocesorsko definisanje konstanti

bull mikroC dozvoljava C++ stil jednolinijskih komentara koristeći dve kose crte () Komentar može da počne bilo gde i traje do sledeće nove linije programskog kocircda

bull Brojne standardne C biblioteke (ctype math stdlib string ) implementirane su u mikroC uz individualna odstupanja

Instalacija programa traje oko 30 sekundi (treba samo pratiti ponuđene opcije i pritiskati ko-

mandno dugme Next) Posle instalacije treba pokrenuti mikroC a to se najjednostavnije ostvaruje klikom na ikonicu Pisanje programa

Na narednih nekoliko strana biće ilustrovan postupak pisanja kocircda u mikroC-u (Slike 32-37) i generisanje fajlova posle prevođenja (kompilacijekompajliranja) Slike dovoljno jasno ilustruju ceo proces a komentari se nalaze ispod slika

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 45: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

45

Slika 32 Kreiranje novog projekta preko opcije Project rarr New Project

Slika 33 Podešavanje parametara projekta (naziv mikrokontrolera takta reseta)

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 46: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

46

Slika 34 U editor treba upisati program (kocircd) mikrokontrolera

Slika 35 U editor je unet program koji treba da se prevede

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 47: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

47

Slika 36 Kompajliranje programa preko komande Project rarr Build

Slika 37 Izgled prozora posle prevođenja sa izveštajem (Messages)

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 48: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

48

Slika 38 Nakon kompajliranja generiše se nekoliko fajlova asemblerski kocircd (ASM) heksadecimalni kocircd (HEX) izveštaji itd

USART terminal

Slika 39a Izgled prozora kod USART komunikacionog terminala

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 49: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

49

Pokretanje internog softverskog terminala mikroC-a koji se koristi za komunikaciju računara i mikrokontrolera ostvaruje se na sledeći način Tools rarr USART Terminal Na Slici 39a prikazan je izgled prozora USART terminala Kao što se vidi moguće je podesiti veći broj parametara Navešćemo samo najvažnije

bull Serijski port (u padajućem meniju treba izabrati željeni serijski port a kod standardnih računara to su COM1 i COM2)

bull Brzina prenosa (za frekvenciju kvarca od 8MHz bira se 14400 bauda) bull Broj stop bitova (1 15 i 2) bull Izbor parnosti (bez parna neparna itd) bull Broj bitova koji čine karakter (5 6 7 ili 8) bull Uključivanjeisključivanje handshaking signala (RTS i DTR) bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Kada se podese parametri terminal se startuje klikom na komandno dugme Connect Odmah

zatim terminal je spreman da prihvati komande Kada se završi komunikacija treba kliknuti na ko-mandno dugme Disconnect

Slika 39b Izgled prozora kod HID komunikacionog terminala

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 50: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

50

HID terminal

Pokretanje internog softverskog HID terminala mikroC-a koji se koristi za komunikaciju računa-ra i mikrokontrolera ostvaruje se na sledeći način Tools rarr HID Terminal

Kada se priključi uređaj sa implementiranim HID standardom u prozor HID Devices se auto-matski upisuje naziv tog uređaja Na Slici 39b prikazan je izgled prozora HID terminala Kao što se vidi moguće je podesiti sle-deće parametre

bull Izbor formata podatka koji se šalje (ASCII heksadecimalni - HEX ili dekadni - DEC) bull Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd

Unutar menija Descriptor moguće je podesiti još neke parametre kojima se nećemo baviti

Razvojni sistem Easy PIC i program PIC FLASH

Slika 39c Izgled razvojnog sistema Easy PIC

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 51: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

51

Slika 39d Izgled prozora kod PIC FLASH programa Programiranje mikrokontrolera PIC18F4550 tj upisivanje programa u njegovu flash memoriju vrši se preko razvojnog sistema Easy PIC (prikazan na Slici 39c) Naime mikrokontroler se postavi u 40ndashpinsko podnožje razvojnog sistema a zatim se pokrene program PIC Flash preko kojeg se unosi odgovarajući heksadecimalni kod (komandno dugme Load Hex) pri čemu su podešeni parametri kao na Slici 39d

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 52: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

52

7 REALIZACIJA PROJEKTA

Slika 40a Izgled blok-šeme realizovanog projekta Na Slici 40a je prikazana blok šema projekta a na Slici 40b je data električna šema Kao što mo-

že da se uoči postoji dvostruka veza između mikrokontrolera PIC18F4550 i PC računara ndash preko serijskog i preko USB porta Mikrokontroler ujedno koristi napajanje iz USB porta računara (5Vplusmn025V)

Tasterom 1 (T1) se resetuje mikrokontroler (pin MCLR) dok se Tasterom 2 (T2) zadaje START komanda Tri režima rada realizovanog kola se definišu preko DIPSW2 prekidača

Na dva ulazna pina Porta A se dovode analogni naponi ndash sa standardnog obrtnog potenciometra (PA0) i digitalnog SPI potenciometra (PA1) Inače digitalnim potenciometrom čija je nominalna vrednost 10K se upravlja preko simuliranog SPI interfejsa mikrokontrolera (postoji biblioteka u prog-ramu mikroC) ndash PIC18F4550 šalje 8-bitnu reč koja određuje vrednost otpornosti na laquoklizačuraquo Korak digitalnog potenciometra iznosi 3906 Ω (10K 28) Ako mu se pošalje sekvenca 00000000 otpornost na klizaču je 0 za 00000001 otpornost na klizaču je 3906 Ω za 00000010 otpornost na klizaču je 7812 Ω itd

Ideja je da se odredi karakteristika AD konvertora integrisanog u mikrokontroleru Karakteristika će se izmeriti u 25 tačaka

Ujedno je moguće odrediti i ofset kao i grešku pune skale AD konvertora korišćenjem SPI potenciometra

Posle toga je moguće laquoručnoraquo vršiti AD konverziju napona sa obrtnog potenciometra uz kom-penzaciju ofseta koji je određen u prethodnom koraku

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 53: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

53

Slika 40b Izgled električne šeme projekta

Za komunikaciju PC računara i mikrokontrolera koriste se alati unutar softvera mikroC sect USART Terminal (za komunikaciju preko serijskog porta) sect HID Terminal (za komunikaciju preko USB porta računara)

(HID je skraćenica od Human Interface Device)

USB port se može povezati direktno na mikrokontroler PIC18F4550 s obzirom da ovaj ima inte-grisani USB modul Za dodatnu stabilizaciju DATA + i DATA- signala stavljeni su otpornici od 27Ω (videti [7] u poglavlju Literatura)

Serijski port i mikrokontroler se sprežu preko interfejsnog kola MAX232 koje služi za prilagođe-nje naponskih nivoa

Na Slici 41a se nalaze relevantni blokovi (integrisana kola tasteri prekidači konektori) na is-korišćenoj pločici za realizaciju ovog projekta (Slika 41b)

Kada se tasterom T2 zada START komanda onda mikrokontroler vrši jednu od tri operacije zavisno od toga koja je kombinacija zadata na prekidaču DIPSW2

00 ndash merenje ofseta i greške pune skale preko SPI potenciometra 01 ndash AD konverzija napona izmerenog na potenciometru P1 sa bez softverskom kompenzacije

ofseta i prikazom u USART terminalu programa mikroC 10 ndash AD konverzija napona izmerenog na potenciometru P1 sa softverskom kompenzacijom

ofseta i prikazom u u USART terminalu programa mikroC Dakle greška ofseta AD konvertora se meri preko SPI potenciometra (kao što smo napomenuli) a simulacija SPI modula se ostvaruje preko gotove biblioteke iz softvera mikroC (pin C2 mikrokontro-lera je ulazni signal pin C1 je takt a pin C0 izlazni signal SPI interfejsa)

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 54: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

54

Slika 41a Raspored relevantnih blokova projekta na pločici

Slika 41b Štampana ploča koja je prepravljena za potrebe ovog projekta

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 55: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

55

Slika 42a Izmerena karakteristika AD konvertora merenjem napona na potenciometru

Redni broj merenja VUL (V) 8-bitna reč na ADC-u

1 0000 00000000 2 0019 00000001 3 0155 00001000 4 0334 00010010 5 0626 00100000 6 1276 01000001 7 1630 01010010 8 1745 01011001 9 2106 01101010 10 2511 10000000 11 2531 10000010 12 2824 10010000 13 3010 10011001 14 3330 10101001 15 3740 10111111 16 3765 11000000 17 3906 11000111 18 4141 11010011 19 4442 11100011 20 4632 11101100 21 4744 11110010 22 4805 11110101 23 4915 11110110 24 4942 11111100 25 5000 11111111

Tabela 9 Rezultati merenja napona ADC-a

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 56: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

56

Sa grafika na Slici 42a uočavamo da karakteristika ADC-a pomalo odstupa od linearnosti a na-ročito pri kraju opsega (oko 5V) ndash kada dobija i kvadratnu (paraboličnu) komponentu Međutim ova nelinearnost je izuzetno mala tj zanemarljiva je za mnoge praktične primene

Punom linijom je prikazana aproksimacija karakteristike AD konvertora (ADC) Vrednost ofseta je reda nekoliko mV (u našem slučaju je 0000000010 što iznosi oko 9mV) Soft-

verska kompenzacija ofseta se vrši tako što se od izmerene vrednosti napona na obrtnom potenciometru (10-bitni podatak) oduzme vrednost izmerenog ofseta preko digitalnog SPI potenciometra (0000000010)

S obzirom da je USART terminal u softveru mikroC projektovan tako da prima podatke do 8 bitova dva bita najniže težine se odbacuju (videti listing programa u mikroC-u) To znači nezavisno da li je izmerena vrednost napona 1111111100 ili 1111111111 USART terminal će primiti 8-bitni podatak 11111111 Na Slici 42b je prikazana ukupna greška AD konvertora koja predstavlja superpoziciju greške pojačanja (linearna) i diferencijalnu nelinearnost AD konvertora Kao što može da se primeti ukupna greška (bez ofseta koji je softverski komponzovan) ne prelazi vrednost plusmnLSB (Detaljnije o greškama AD konvertora je izloženo u 5 poglavlju ovog rada)

Napomena Za merenje napona je korišćen digimer MASTECH MS8201H

Slika 42b Izmerena greška konverzije AD konvertora mikroC program za projekat

Za naš program je iskorišćena gotova biblioteka USBdscc iz mikroC-a koja omogućava da se mikrokontroler ponaša kao HID (Human Interface Device)

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 57: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

57

Slika 43a Memorijska mapa mikrokontrolera

Kod serije mikrokontrolera PIC18F memorija podataka je implementirana kao statički RAM

Svaki registar u ovoj memoriji ima 12-bitnu adresu Celokupna memorija podataka je podeljena na 16 banki veličine od po 256 bajtova Prvih 96 adresa (000h-05Fh) u okviru Banke 0 je rezervisano za pris-tup RAM-u dok ostatak registara Banke 0 Banke 1-7 čine registri opšte namena (GPR) Istaći ćemo kako registri opšte namene GPR(1) služe kao RAM bafer za operacije USB modula mikrokontrolera (Napomena BSR je Bank Select Register odnosno registar za selekciju banke) U okviru Banke 15 prostor od 160 adresa (F60h-FFFh) rezervisan je za registre specijalne na-mene SFR (Special Function Registers) koji su prikazani na Slici 43b Kao što može da se uoči na slici ovi registri služe za definisanje ulaznihizlaznih pinova portova mikrokontrolera (TRISA TRISB TRISC TRISD TRISE) stanja portova (PORTA PORTB PORTC PORTD PORTE) parametara internog AD konvertora (ADCON1 ADCON2 ADCON3) stanja programskog brojača (PCL PCLATH PCLATU) tajmera prekida itd

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 58: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

58

Slika 43b Mapa registara specijalne namene kod serije mikrokontrolera PIC18F

Sada ćemo preko primera ilustrovati postavljanje smerova na Portu A bull TRISA = 0b000000 (PORTA je izlazni) bull TRISA = 0b111111 (PORTA je ulazni) bull TRISA = 0b111000 (A5A3 su ulazni a A2A0 su izlazni pinovi)

Ako je ADCON1 = 13 (odnosno ADCON1 = 0b1101) pinovi PA5-PA0 se definišu kao digitalni

ulazi a A1 ndashA0 kao analogni ulazi (Slika 29)

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 59: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

59

Slika 43c Algoritam programa upisanog u mikrokontroler PIC18F4550

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 60: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

60

Softver mikrokontrolera je napisan tako da izvršava beskonačnu petlju pri čemu tokom svakog obilaska petlje se proverava da li se nešto promenilo (promena stanja na pinovima prijem podatka sa serijskog porta i slično) i u skladu sa promenama se izvršavaju određene akcije

Nadalje ćemo detaljno objasniti svaki blok algoritma prikazanog na Slici 43c

Varijable i j PORT A je ulazni

A5A2 - digitalni pinovi A1A0 - analogni pinovi

Na samom početku treba definisati varijable i i j koje se koriste u programu Obe varijable su 8-

bitne i laquonoseraquo informaciju o naponu koji se meri preko internog AD konvertora mikrokontrolera A1A0 se definišu kao analogni ulazi Porta A (na njih se dovodi analogni naponi sa digitalnog i

obrtnog potenciometra respektivno) dok se A5A2 definišu kao digitalni ulazi Porta A (pin A5 se ne koristi na pin A4 je povezan START taster T2 dok je na pinove A3A2 povezan DIPSW2 prekidač) Dakle treba definisati ulaze i izlaze Porta A preko TRISA (adresa F92h) i koji su pinovi analogni ulazi a koji digitalni (adresa FC1h)

Inicijalizacija USART modula

Inicijalizacija SPI modulaInicijalizacija USB modula

Da bi se koristili USART SPI i USB modul mikrokontrolera (videti Sliku 21) neophodno je da

se izvrši njihova inicijalizacija U okviru softvera mikroC postoje bdquointegrisanerdquo biblioteke koje omogu-ćavaju komunikaciju USART i SPI modula Za aktiviranje pomenuta dva modula koriste se instrukcije Usart_Init() i SPI_Init () respektivno (Adresni prostor koji je rezervisan za inicijalizaciju 060h-3FFh)

Kada je u pitanju USB modul koristi se poseban potprogram koji se nalazi u fajlu USBdscc ndash zahvaljujući kome je omogućeno da se mikrokontroleru od strane računara pristupa kao HID (Human Interface Device) uređaju o čemu je bilo reči na početku ovog poglavlja

Ako se primi podatak sa serijskog porta isti trebada se prosledi ka USB portu

Definisano je da kada mikrokontroler primi podatak sa serijskog porta računara isti podatak treba da prosledi ka USB portu Naime podatak koji se pošalje iz USART terminala prihvata USART modul mikrokontrolera i preko USB modula ga ka HID terminalu (oba softverska terminala su opisana u 6 poglavlju rada)

(Za operacije sa USB modulom mikrokontrolera rezervisane su adrese 0400h-7FFh u koje se smešta potprogram USBdscc)

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 61: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

61

PA4=rsquo0rsquo

Zavisno od stanja na pinu A4 mikrokontrolera mikrokontroler će ispitati stanje prekidača DIPSW2 (naredni korak) ili će preskočiti ispitivanje Za ovo ispitivanje se koristi standardna if petlja Već je istaknuto kako je na ovaj pin povezan taster T2 kojim se definiše START operacija Ukoliko je T2 pritisnut (PA4=0) onda se ispituje stanje DIPSW2 prekidača a ako nije pritisnut bdquopres-kačerdquo se procedura ispitivanja stanja DIPSW2 prekidača i prelazi se na blok kašnjenja (1s) (Adresni prostor koji je rezervisan za ove operacije je 060h-3FFh)

Kada se ispituje stanje DIPSW2 prekidača relevantna su 3 stanja (00 01 i 10) dok stanje 11 ne

proizvodi nikakav efekat tj prelazi se na blok kašnjenja (1s) Ako je DIPSW2=00 mikrokontroler preko SPI modula (koji je softverski implementiran) od-

ređuje vrednost ofseta (za stanje digitalnog potenciometra 00000000) i napona pune skale (za stanje digitalnog potenciometra 11111111) Oba podatka se šalju preko USART modula mikrokontrolera ka USART terminalu

Ako je DIPSW2=01 mikrokontroler preko svog AD konvertora meri napon na obrtnom poten-ciometru ndash varijabla i a zatim ga šalje preko USART modula ka USART terminalu

Ako je DIPSW2=10 mikrokontroler preko svog AD konvertora meri napon ofseta AD konver-tora (preko digitalnog potenciometra) ndash varijabla j a zatim i na obrtnom potenciometru ndash varijabla i Kompenzacija ofseta se dakle vrši softverski (i=i-j) a zatim se napon obrtnog potenciometra sa kompenzovanim ofsetom (i) šalje preko USART modula ka USART terminalu

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 62: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

62

Kasnjenje 1s

U okviru svakog obilaska beskonačne petlje nalazi se blok kašnjenja kojim je definisano kašnje-

nje od 1 sekunde (1000ms) Projektovano vreme od 1s je izvršeno na osnovu vremena potrebnog da se pritisne taster (Tokom pisanja programa prvobitno je ovo vreme projektovano na 500ms zatim na 800ms da bi se kao optimalno izabralo vreme od 1000ms)

Biblioteka USBdscc koja je smeštena u adresnom prostoru 0400h-7FFh ima sledeći listing

Verzija 101 include Definith uključivanje 2 heksadecimalne include VARsh bibilioteke Broj bajtova za svaki izveštaj izračunat prema veličini izveštaja i brojača izveštaja u okviru Deskriptora izveštaja unsigned char const HID_INPUT_REPORT_BYTES = 1 unsigned char const HID_OUTPUT_REPORT_BYTES = 1 unsigned char const HID_FEATURE_REPORT_BYTES = 2 Konstrante veličine bajta unsigned char const NUM_ENDPOINTS = 2 unsigned char const ConfigDescr_wTotalLength = USB_CONFIG_DESCRIPTOR_LEN + USB_INTERF_DESCRIPTOR_LEN + USB_HID_DESCRIPTOR_LEN + (NUM_ENDPOINTS USB_ENDP_DESCRIPTOR_LEN) unsigned char const HID_ReportDesc_len = 47 unsigned char const Low_HID_ReportDesc_len = HID_ReportDesc_len unsigned char const High_HID_ReportDesc_len = HID_ReportDesc_len gtgt 8 unsigned char const Low_HID_PACKET_SIZE = HID_PACKET_SIZE unsigned char const High_HID_PACKET_SIZE = HID_PACKET_SIZE gtgt 8 Tablice deskriptora (opisa) unsigned char const DescTables[USB_DEVICE_DESCRIPTOR_ALL_LEN2] = Deskruiptor uređaja USB_DEVICE_DESCRIPTOR_LEN 0 bLength-Length iz Device descriptor (uvek je 0x12) USB_DEVICE_DESCRIPTOR_TYPE 0 bDescriptorType - 1 = DEVICE deskriptor 0x00 0 bcdUSB - USB revision 200 (niži bajt) 0x02 0 - (viši bajt) 0x00 0 bDeviceClass - Zero znači da svaki od interfejsa radi nezavisno

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 63: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

63

0x00 0 bDeviceSubClass 0x00 0 bDeviceProtocol EP0_PACKET_SIZE 0 bMaxPacketSize0 ndash maksimalna veličina paketa podataka za

control transfer preko EP0 0x34 0 idVendor - Identifikacija prodavca (niži bajt) 0x12 0 (viši bajt) 0x01 0 idProduct - Identifikacija proizvoda (niži bajt) 0x00 0 (viši bajt) 0x01 0 bcdDevice - (niži bajt) 0x00 0 (viši bajt) 0x01 0 iManufacturer - prvi string 0x02 0 iProduct - drugi string 0x00 0 iSerialNumber - (bez) 0x01 0 bNumConfigurations - 1 Deskriptor konfigurisanja USB_CONFIG_DESCRIPTOR_LEN 0 bLength ndash dužina Deskriptora konfigurisanja (uvek 0x09) USB_CONFIG_DESCRIPTOR_TYPE 0 bDescriptorType - 2 = Deskriptor konfigurisanja ConfigDescr_wTotalLength 0 wTotalLength ndash Ukupna dužina ovog konfiguracionog deskriptora uvećana za deskriptore interfejsa i endpoint-a su sastavni delovi konfiguracije 0x00 0 (viši bajt) 0x01 0 bNumInterfaces - Broj interfejsa 0x01 0 bConfigurationValue ndash Konfiguraciona vrednost 0x00 0 iConfiguration - Indeks stringa za tu konfiguraciju ( bez ) 0xA0 0 bmAttributes - atributi - Bus powered i Remote wakeup 50 0 MaxPower - povlačenje struje 502 mA iz bus-a Deskriptor Interfejsa USB_INTERF_DESCRIPTOR_LEN0 bLength- dužina deskriptora interfejsa (uvek 0x09) USB_INTERFACE_DESCRIPTOR_TYPE0 bDescriptorType- 4 =INTERFACE deskriptor 0x00 0 bInterfaceNumber -broj interfejsa 0 osnovni red 0x00 0 bAlternateSetting - naizmenično podešavanje NUM_ENDPOINTS 0 bNumEndPoints - Broj endpoint-a korišćenih za ovaj interfejs 0x03 0 bInterfaceClass - namenjen za USB 0x00 0 bInterfaceSubClass - Not A boot uređaj 0x00 0 bInterfaceProtocol - bez 0x00 0 iInterface ndash Indeks za deskriptor stringa koji opisuje ovaj interfejs (bez) HID deskriptor USB_HID_DESCRIPTOR_LEN 0 bLength - Dužina HID deskriptora (uvek 0x09) USB_HID_DESCRIPTOR_TYPE 0 bDescriptorType - 0x21 = HID deskriptor 0x01 0 HID klasa izbacuje broj (101) 0x01 0 0x00 0 Lokalizova kod države (bez) 0x01 0 od HID deskriptora klase za praćenje (1) 0x22 0 Izveštaj za tip deskriptora (HID) Low_HID_ReportDesc_len 0 High_HID_ReportDesc_len 0

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 64: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

64

EP1_RX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength - dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType - 5 = ENDPOINT deskriptor 0x81 0 bEndpointAddress - In EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa ndash bajt nižeg prioriteta High_HID_PACKET_SIZE 0 maks veličina paketa ndash bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) EP1_TX deskriptor USB_ENDP_DESCRIPTOR_LEN 0 bLength dužina deskriptora (uvek 0x07) USB_ENDPOINT_DESCRIPTOR_TYPE 0 bDescriptorType- 5 = ENDPOINT deskriptor 0x01 0 bEndpointAddress - Out EP1 USB_ENDPOINT_TYPE_INTERRUPT 0 bmAttributes - Endpoint tip - prekid Low_HID_PACKET_SIZE 0 wMaxPacketSize - maks veličina paketa - bajt nižeg prioriteta High_HID_PACKET_SIZE 0 - max packet size - bajt višeg prioriteta 1 0 bInterval - interval prozivanja (1 ms) Deskriptor HID izveštaja 0x06 0 USAGE_PAGE (Definisanje prodavca) 0xA0 0 0xFF 0 0x09 0 USAGE ID 0x01 0 0xA1 0 COLLECTION (Aplikacija) 0x01 0 Ulazni izveštaj 0x09 0 USAGE ID 0x03 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_INPUT_REPORT_BYTES 0 0x81 0 INPUT (DataVarAbs) 0x02 0 Izlazni izveštaj 0x09 0 USAGE ID - (Definisanje prodavca) 0x04 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 65: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

65

0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_OUTPUT_REPORT_BYTES 0 0x91 0 OUTPUT (DataVarAbs) 0x02 0 Izveštaj sa karakteristikama 0x09 0 USAGE ID - (Definisanje prodavca) 0x05 0 0x15 0 LOGICAL_MINIMUM (0) 0x00 0 0x26 0 LOGICAL_MAXIMUM (255) 0x00 0 0xFF 0 0x75 0 REPORT_SIZE (8) 0x08 0 0x95 0 REPORT_COUNT (2) HID_FEATURE_REPORT_BYTES 0 0xB1 0 FEATURE (DataVarAbs) 0x02 0 Kraj skupa 0xC0 0 unsigned char const LangIDDescr[8] = 0x04 0 USB_STRING_DESCRIPTOR_TYPE 0 0x09 0 LangID (0x0409) - niži 0x04 0 - viši unsigned char const ManufacturerDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const ProductDescr[4] = 0 0 USB_STRING_DESCRIPTOR_TYPE 0 unsigned char const StrUnknownDescr[4] = 2 0 USB_STRING_DESCRIPTOR_TYPE 0 Inicijalizacija USB modula

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 66: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

66

void InitUSBdsc() Byte_tmp_0[0] = NUM_ENDPOINTS Byte_tmp_0[0] = ConfigDescr_wTotalLength Byte_tmp_0[0] = HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_ReportDesc_len Byte_tmp_0[0] = High_HID_ReportDesc_len Byte_tmp_0[0] = Low_HID_PACKET_SIZE Byte_tmp_0[0] = High_HID_PACKET_SIZE DescTables LangIDDescr Opis proizvođača ProductDescr StrUnknownDescr Listing Programa koji vrši postavljene zadatke

(adresni prostor 060h-3FFh) unsigned char userWR_buffer[1] Definisanje ulaznog bafera USB porta unsigned short i Definisanje 8bitne varijable i unsigned short j Definisanje 8bitne varijable j Pozivanje glavne prekidne rutina (iz USBdsc) void interrupt() HID_InterruptProc() (adresni prostor 0400h-7FFh) Pocetak glavnog programa void main() (adresni prostor 060h-3FFh) TRISA = 0b111111 Definisanje svih pinova Porta A kao ulaznih (adresa F92h) ADCON1 = 13 Pinovi A5A0 su digitalni a A1A0 analogni (adresa FC1h) Usart_Init(2400) Inicijalizacija USART modula (adresni prostor 060h-3FFh) SPI_Init () Inicijalizacija SPI modula standardni parametri HID_Enable(ampuserWR_buffer ampuserWR_buffer) Dozvola za upisni USB bafer (adresni

prostor 0400h-7FFh) (adresni prostor 060h-3FFh)

do

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 67: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

67

if (Usart_Data_Ready()) Kada mikrokontroler primi podatak od USART terminala i = Usart_Read() memoriše ga u varijablu i Usart_Write(i) zatim primljeni podatak vraća ka USART terminalu i HID_Write(ampi 1) ujedno ga prosledjuje ka HID terminalu (adresni

prostor 0400h-7FFh)

(adresni prostor 060h-3FFh) if (PORTAF4 == 0) Ako je taster T2 pritisnut if (PORTAF2 == 0 ampamp PORTAF3 == 0) i ako vazi uslov SPI_Write(0x00) i = ADC_Read(1) gtgt 2 procitaj vrednost ofseta preko SPI Usart_Write(i) i posalji ka USART terminalu SPI_Write(0xFF) i = ADC_Read(1) gtgt 2 procitaj vrednost napona pune skale preko SPI Usart_Write(i) i posalji ka USART terminalu Dva bita najmanje tezine se odbacuju (gtgt2) if (PORTAF2 == 0 ampamp PORTAF3 == 1) i ako vazi uslov i = ADC_Read(0) gtgt 2 procitaj vrednost napona na obrtnom potenciometru Usart_Write(i) i posalji 8-bitni podatak ka USART terminalu if (PORTAF2 == 1 ampamp PORTAF3 == 0) i ako vazi uslov j = ADC_Read(1) procitaj vrednost ofseta i = ADC_Read(0) procitaj vrednost napona na obrtnom potenciometru i = i - j izvrsi kompenzaciju ofseta i = i gtgt 2 Odbaci dva bita najmanje tezine (gtgt2) Usart_Write(i) i posalji podatak ka USART terminalu Delay_ms(1000) Kašnjenje 1s (1000 ms) while (1) Kraj beskonacne petlje HID_Disable() Zabrana za upisni USB bafer

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 68: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

68

8 LABORATORIJSKA VEŽBA

bull Priključiti pločicu na USB port i serijski port računara preko odgovarajućih kablova bull Neposredno po priključivanju na USB port računara uključiće se crvena LED bull Pokrenuti USART terminal iz programa mikroC na način prikazan u petom poglavlju

Tools rarr USART Terminal bull Podesiti USART terminala (ilustrovano na Slici 44)

o COM1 ili COM2 (zavisno na koji port je povezana pločica) o Brzina 14400 Bauda 1 stop-bit (One Stop Bit) Space bit parnosti (Parity) osam

bitova čini karakterpodatak (Data bits) uključen RTS (On) o Podesićemo da se od strane mikrokontrolera primaju heksadecimalni (HEX)

podaci međutim terminal može da prikaže i prijem ASCII ili dekadnih (DEC) karaktera Podešavanje ovog parametra izvršiti u dogovoru sa predmetnim asistentom

Slika 44 Podešavanje parametara USART terminala

bull Pokrenuti HID terminal iz programa mikroC na način prikazan u petom poglavlju Tools rarr HID Terminal

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 69: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

69

Slika 45 Prozor HID terminala bull Ukoliko želite da proverite da li je računar prepoznao mikrokontroler koji radi u režimu

HID (Human Interface Device) uđite u Device Manager (Control Panel rarr System rarr Device Manager) Sve je ilustrovano na Slici 46

bull Iz prozora USART terminala šaljite sekvence različitih formata (ASCII HEX DEC) prema HID terminalu Vodite računa da formati podataka budu identični u oba terminala (ASCII i ASCII HEX i HEX DEC i DEC) Sva tri pristupa slanja su ilustrovana na Slikama 47-49 Posebno obratite da je prilikom slanja ASCII karaktera izabranačekirana opcija Send as typing u USART terminalu dok je prilikom slanja dekadnih brojeva DEC (u opsegu koji je dozvoljen 0-255) izabranačekirana opcija Send as number Između svaka 2 menjanja formata podataka potrebno je da obrišete prethodna stanja iz prozora USART terminala (opcija Clear History ) i HID terminala Clear Rcv)

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 70: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

70

Slika 46 Računar je detektovao HID (Human Interface Device)

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 71: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

71

Slika 47 Slanje ASCII karaktera

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 72: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

72

Slika 48 Slanje heksadecimalnih (HEX) karaktera

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 73: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

73

Slika 49 Slanje dekadnih (DEC) brojeva u opsegu 0-255

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 74: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

74

bull Isključiti HID terminala na način ilustrovan na Slici 50 (desni klik miša na komandnu liniju i biranje opcije Close) Ovo je pouzdaniji metod isključivanja HID terminala nego li preko X u gornjem desnom uglu prozora Naime u drugom slučaju se dešava da HID terminal blokira računar ndash pa mora da se resetuje

Slika 50 Isključivanje HID terminala

bull Pritiskom na taster T2 odrediti ofset i grešku pune skale preko SPI potenciometra U idealnom slučaju ofset treba da bude 0x00 a napon pune skale 0xFF Sve je ilustrovano na Slici 51 (Izmerena greška ofseta je 0x10 a greška pune skale 0xFE) Pošto je u pitanju 10-bitna reč (u pitanju je 10-bitni AD konvertor) a USART terminal prepoznaje samo 8-bitne reči 2 najviša bita se programski (u mikrokontroleru) odbacuju

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre potenciometar a zatim pritisnite taster T2) Ilustracija je na Slici 51 (3 stanja 0x00 0x52 i 0xFF)

bull Postaviti DIPSW2 prekidač u stanje 10 bull Ispitati linearnost ADC sa sukcesivnim aproksimacijama (za ova stanja prekidača ofset je

softverski kompenzovan)

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 75: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

75

Slika 51 Ilustracija čitanja stanja na potenciometrima

bull Ispitati linearnost prenosne karakteristike ADC sa sukcesivnim aproksimacijama za ovaj slučaj u bar 20 tačaka zaokretanjem obrtnog potenciometra (Zaokrenite najpre obrtni potenciometar a zatim pritisnite taster T2)

bull Po završetku zadataka isključite USART terminal

AD konverzija sa objašnjenjem

Podatak koji se dobije u prozoru UART terminala treba transformisati u dekadni (ukoliko je izabran parametar HEX u prozoru terminala) a zatim primeniti formulu

512

)(8 VxxV DEC

A sdotminus

=

Ukoliko je na primer pročitana heksadecimalna vrednost (0x10)HEX odnosno dekadna vrednost (16)DEC to znači da je izmeren napon

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 76: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

76

313705255

)16( VVV DECA =sdot=

Tabela 10 ASCII kocircdovi

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 77: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

77

PRILOZI

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 78: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

78

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 79: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

79

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 80: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

80

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 81: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

81

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 82: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

82

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 83: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

83

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 84: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

84

LITERATURA [1] PIC18F4550 DATASHEET Microchip Tecnology Inc 2004 [2] MCP410XX DATASHEET Microchip Tecnology Inc 2003 [3] SPREGA MIKROKONTROLERA PIC16F877 SA PARALELNIM PERIFERIJSKIM

INTERFEJSOM 8255A I DA KONVERTOROM DAC0832LCV S Stoilković MPavlović S Popović Elektronski fakultet Niš (Seminarski rad) httpeselfakniacyu

[4] SIMULACIJA PLC KONTROLERA PREKO MIKROKONTROLERA PIC16F877 M Mladenović A Petrović I Stojanović Elektronski fakultet Niš (seminarski rad) httpeselfakniacyu

[5] UVOD U SERIJSKI PORT Vojo Milanović httpmilanmilanovicorgskola [6] UVOD U USB PORT Vojo Milanović httpmilanmilanovicorgskola [7] USB EKSPERIMENTALNO KOLO SA PIC 18F4550 Vojo Milanović

httpmilanmilanovicorgskola [8] USB PORT Elektrotehnički fakultet Podgorica httpwwwelektronikacgyu [9] mikroC Help Mikroelektronika httpmikroecom

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 85: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

85

CIRRICULUM VITAE

Prezime Andrejić Ime Ana Adresa stanovanja Šarbanovačka br 25

Brestovac Bor e-mail adresa andrejicanayahoocom

Datum rođenja 17121982 Nacionalnost Srpska Obrazovanje Gimnazija bdquoBora Stankovićrdquo Bor Kompletna ili stepenovana diploma IV stepen

Poznavanje jezika Engleski (odlično) Francuski (vrlo dobro)

Vozačka dozvola Rad na računaru MS WINDOWS MS OFFICE COREL

PHOTOSHOP VISIO mikroC

Napomene

Završena jednomesečna stručna praksa u okviru studija u bdquoTelekomurdquo - Niš

Lične sposobnosti Odgovornost energičnost ambicioznost inovativnost spremnost za timski rad sposobnost organizacije pregovaracke sposobnosti sposobnost za brzo učenje i usavršavanje

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi

Page 86: Komunikacija PIC18F4550 sa racunarom preko ser. i USB portes.elfak.ni.ac.rs/Papers/AAndrejic - MRandjelovic - Komunikacija... · /6/ SOFTVER ZA PIC MIKROKONTROLERE 44 /7/ REALIZACIJA

86

Prezime Ranđelović Ime Magdalena Adresa stanovanja Jadranska 16 18000 Niš e-mail adresa magdalenabankerinternet

Datum rođenja 31071982 Nacionalnost Srpska

Obrazovanje

Gimnazija bdquoBora Stankovićrdquo Niš

Kompletna ili stepenovana diploma IV stepen Poznavanje jezika Engleski (dobro) Vozačka dozvola B kategorija Rad na računaru WINDOWS (982KXPVISTA)

MS OFFICE mikroC

Posebna interesovanja Telekomunikacione mreže i sistemi optički sistemi