Professional Documents
Culture Documents
Seminarski rad:
Master-slave komunikacija realizovana korišćenjem
RS485 interfejsa
1
Sadržaj
1. Uvod
2. Teorijska postavka
2.1 Šta su mikrokontroleri?
2.2 Mikrokontroleri: tipovi arhitektura i blok šema
2.3 Mikrokontroleri u odnosu na mikroprocesore
2.4 Struktura mikroprocesora
2.5 Struktura mikrokontrolera
2.6 Razlike između mikroprocesora i mikrokontrolera
2.7 Prenos podataka
2.8 Paralelni i serijski prenos
2.9 Asinhroni prenos podataka
2.10 Sinhroni prenos podataka
2.11 RS- 485
2.12 Provera tačnosti - Čeksuma
2.13 Čeksuma: karakter provere
2.13.1 Čeksuma: jednostruka preciznost
2.13.2 Čeksuma duple preciznosti
2.13.3 Honeywell čeksuma
2.13.4 Čeksuma ostatak
3. Opis sistema
3.1 Blok šema sistema
3.2 Princip rada
3.2.1 Slanje podataka jednom uređaju
3.2.2 Slanje podataka svim uređajima – Broadcast
3.3 Električna šema jednog bloka
3.4 Formati poruka
3.5 Napajanje
4. Software
4.1 Funkcije za čekanje:
4.1.1 wait 1 ms – WAIT1
4.1.2 wait 10 ms – WAIT10
4.2 Funkcije za konverziju podataka:
4.2.1 ascii u hex – ATOHEX
4.2.2 hex u ascii – HEXTOA
4.3 Funkcije za upravljanje displejom
4.3.1 inicijalizacija displeja – DISPINI
4.3.2 pošalji komandu – DCOMW
4.3.3 pošalji karakter – DDATAW
4.3.4 pošalji niz karaktera – DSTRW
4.3.5 ispitavanje da li je slobodan displej – WTBUSY
4.3.6 kreiranje simbola – CHAR_SET
4.4 Funkcije za slanje i primanje podataka:
4.4.1 inicijalizacija serijskog porta – SERINI
4.4.2 primi podatke – GETDATA
4.4.3 pošalji podatke – INITTI
4.5 Funkcije za generisanje nasumičnih vrednosti
4.5.1 random init – RANDOM_INIT
4.5.2 random - RANDOM
2
4.6 Master
4.6.1 definisanje parametara i mesta u memoriji
4.6.2 inicijalizaciona sekvenca – INIT
4.6.3 Glavna petlja – MAIN
4.6.4 Obada tastera ENTER - OBR_ENT
4.6.5 Obrada tastera SELECT - OBR_SEL
4.7 Slave
4.7.1 definisanje parametara i mesta u memoriji
4.7.2 inicijalizaciona sekvenca – INIT
4.7.3 Glavna petlja – MAIN
5. Programiranje mikrokontrolera
6. Laboratorijska vežba
6.1 Uputstvo za setovanje
6.2 Slanje podataka i primanje odgovora
6.3 Slanje podataka i ne primanje odgovora
6.4 Broadcast
7. Zaključak
8. Literatura
9. Dodatak
3
1 Uvod
Nagli razvoj elektronike je omogućio njenu primenu u svakodnevnom životu. Nije
moguće zamisliti ni jedan trenutak života bez “mnoštva” izuma. Računari, kao primer
pružaju pomoć u smislu informisanosti, mobilnosti, rešavanja matematičkih
problema, projektovanja elektronskih kola, nadzora, kontrole procesa, obrade signala.
Računari na čipu – mikrokontroleri se odlikuju kompaktnošću. Pomoću
mikrokontrolera, možemo da utičemo, po sopstvenoj zamisli, na ono na šta želimo.
Precizno upravljanje elektro motora, elektronskih kola, kontrola raznih displeja,
rasvete. Mogućnosti su velike.
Ovim projektom je pokazan način komunikacije među kontrolerima. Korišćenjem
RS485 interfejsa ostvarena je master-slave komunikacija između 3 uređaja na
zajedničkoj magistrali.
4
2 Teorijska postavka
Najvažniji faktor koji je imao dominantni uticaj na masovno korišćenje računara u
industriji predstavlja razvoj mikroprocesora. Mikroprocesor je u suštini računar na čipu.
Da bi obavili koristan zadatak, sistemi zasnovani na mikroprocesorima prve generacije
zahtevali su ugradnju velikog broja dodatnih komponenata (oscilatore, adresne lečeve, lečeve
za podatke i druga LSI kola relativno male složenosti). Kasnije, napredak na polju VLSI
tehnologije doveo je do proizvodnje mikroračunarskih sistema kod kojih su sva neophodna
kola bila ugrađena (embedded) u relativno mali broj pratećih integrisanih kola (tipično su to
bili integrisane CPU jedinice relativno velike složenosti, kontroleri prekida, DMA kontroleri,
tajmeri, UART-i, programibilni paralelni periferni interfejsi (PIA), i dr.). Kao plod dalje
integracije nastaju jedno-čipni mikrokontroleri koji u sebi imaju ugrađeno analogni i digitalni
ulazno-izlazni podsistem, tajmere i brojače, LCD drajvere i druge logike.Time su ova kola,
takoreči bez dodatnog hardvera, sada bila u stanju da obavljaju relativno složene upravljačke
funkcije koje se odnose na rad sistema u realnom vremenu. Primeri ovakvih tipova
mikrokontrolera su Intel 8051 i 8096, Motorola MCH 68HC11, Microchip PIC 18F1x20, i dr.
Ovi čipovi su pre svega razvijeni za potrebe automobilske industrije, procesne industrije,
elektromedicine, telekomunikacija, robe široke potrošnje, i td.
Mikrokontrolere delimo na 4-, 8-, 16-, i 32-bitne. Ilustracije radi, 4-bitni mikrokontroleri
uglavnom se koriste u automatima za igru, 8-bitni kao programatori u veš mašinama, 16-bitne
srećemo u sistemima za upravljanje klimom u kolima, a 32-bitni se primenjuju da obave
složene telekomunikacione funkcije u mobilnim bežičnim uređajima.
Osnovne karakteristika mikrokontrolera su:
usađeni (built-in) ROM- najčešće kapaciteta 4 kB na samom čipu u kome se čuva
upravljački program,
usađeni RAM- najčešće kapaciteta 128 B, koji se koristi za čuvanje privremeno
promenljivih,
CPU koji je, zbog efikasnijeg korišćenja ograničene programske memorije, u stanju da
izvršava instrukcije koje manipulišu sa jediničnim bitovima,
veliki broj mikrokontrolera ima usađeno koprocesor Boole-ovog tipa. Ovaj koprocesor
zajedno sa CPU-om ima mogućnost da pojednostavljeno implementira Boole-ove izraze koji
se veoma često javljaju u upravljačkim aplikacijama,
mikrokontroleri imaju usađene ulazno-izlazne portove koji se koriste za efikasno
upravljanje, kao i jednostavnu i laku interakciju sa spoljnim uređajima.
5
2.1 Šta su mikrokontroleri?
Svi današnji računari su realizovani od istih gradivnih blokova. To su centralni procesor ili
CPU, memorijski podsistem, ulazno-izlazni podsistem, generatora taktne pobude, i sistemska
magistrala koja međusobno povezuje pomenute gradivne blokove. Sistemska magistrala se
sastoji od adresne magistrale, magistrale podataka, i upravljačke magistrale.
Najveći broj standardnih računara, kakav je na primer PC mašina, se smešta u jedistveno
kučište. Periferije kakvi su štampač, displej, skener, tastatura, miš, i druge se povezuju na
računarski sistem preko konektora koji su montirani na kučištu. Druge sistemske komponente
kakvi su diskovi, memorije proširenja, mrežne kartice i dr., su locirane u samom kučištu ili
pak na osnovnoj ploči (motherboard) računara.
Mikroprocesor je integrisano kolo ili čip lociran na osnovnoj ploči koje u suštini
predstavlja CPU računarskog sistema. Uglavnom svet PC mašina je taj koji je bio glavni
pokretač razvoja sistema baziranih na mikroprocesorima. Imajući u vidu ovakve zahteve za
mikroprocesore kažemo da su u novije vreme postali relativno specijalozovane komponente,
posebno pogodne (prilagođene) za veoma brzo manipulisanje podacima.
No kod određenih aplikacija veoma često je neophodno ugraditi određeni iznos lokalnog
procesiranja na licu mesta procesa. Tako na primer, automat za izdavanje karata na
autobuskim stanicama treba da ima određeni nivo autonomnosti u radu (pameti) tako da za
unete podatke preko lokalne tastature sam izračuna cenu karte i izda je. Zbog ovakvog načina
rada računarske mašine opšte namene ne predstavljaju dobro rešenje (izbor) za ovakav tip
aplikacije, prvenstveno zbog velikog gabarita (dimenzije) mašine, a takođe i zbog visoke
cene. Upravo su ovo idealne aplikacije za mikrokontrolere. Nasuprot mikroprocesorima,
mikrokontroleri su više orijentisani ka postizanju superiornijih performansi kod aplikacija
namemjenih upravljanju, bezbednosti i pouzdanosti u radu. Imajući u vidu da je cena uređaja
baziranih na mikrokontrolerima od izuzetne važnosti za krajnjeg korisnika, mikrokontroleri
su integrisali na čipu veliki broj standardnih periferala, kontrolere raznih tipova uređaja, kao i
memoriju. Na osnovu prethodnog mogli bi da kažemo sledeće: Mikrokontroler je računar
na čipu. On sadrži skoro sve osnovne gradivne blokove računarskog sistema (CPU, ROM,
RAM, U/I periferije tipa AD i DA konvertore, serijske komunikacione interfejse (UART),
paralelne interfejs portove (PIA), tajmere/brojače, LCD drajvere, i dr.) koje se mogu
integrisati na jedinstvenom čipu. Danas su mikrokontroleri najviše prodavan tip procesora.
Ne bez razloga projektanti sistema relativno male složenosti kažu da su to čipovi upravo
projektovani po njihovoj meri, tj. čipove o kojima sanjaju.
Nasuprot mikroprocesorima, cena mikrokontrolera je veoma niska (do nekoliko dolara u
odnosu na cenu od stotinu dolara kakva je cena mikroprocesora). Za određene aplikacije
niska cena mikrokontrolera je idealno rešenje.
Taktna frekvencija na kojoj rade, obim adresibilne memorije, i obim podataka sa kojima
manipulišu varira od jednog mikrokontrolera do drugog, šta više i kod jednog istog
proizvođača, tako da je posao projektanta da izabere najbolji mikrokontroler za datu
aplikaciju.
Drugi važan razlog korišćenja mikrokontrolera, u odnosu na PC mašinu, predstavlja
njegova kompaktnost koja se može iskazati konstatacijom: Računar na jednom čipu. Svi
mikrokontroleri imaju usađenu memoriju na čipu kao i veći broj ulazno-izlaznih interfejs
linija. Veliki broj mikrokontrolera poseduje AD i DA konvertore, impulsno-širinski
modulisane (PWM) generatore, sofisticirani sistem prekida, veći broj seriskih i paralelnih
ulazno-izlaznih portova, fleksibilni sistem tajmer-brojač događaja, LCD drajver, i dr.
Mikrokontroleri se danas koriste u embedded sistemima za upravljanje raznim funkcijama
koje sistem treba da obavi. Na primer, u današnjim automobilima ugrađuje se veliki broj
(reda 100) mikrokontrolera koji se koriste za upravljanje radom kočionog sistema,
6
ubrizgavanjem goriva, klima sistemom za grejanje-hlađenje, prikazom informacije na
pokaznoj tabli, i td. Drugim rečima, jedno-čipni računar omogućava projektantima da ugrade
računar u bilo kom uređaju koji postavlja makar i minimalne zahteve za određenim iznosom
izračunavanja.
Mikrokontroleri se veoma često koriste i u situacijama kada treba da se veoma brzo
reaguje na spoljne signale- posebno ako se takvi sistemi koriste za rad u realnom vremenu- pa
zbog toga koriste procesiranje bazirano na obradu prekida. Mikrokontroleri mogu takođe da
rade po nadzorom operativnih sistema za rad u realnom vremenu (RTOS) čiji je obim manji,
pri čemu ovakvi sistemi bolje reaguju (za kraće vreme) na odzive sistema koji se odnose na
rad u realnom vremenu, nego što je to slučaj sa operativnim sistemima opšte namene koji se
instaliraju na večim mašinama kakve su recimo PC mašine.
7
Činjenica da se programskim putem može direktno pristupati spoljnim pinovima čipa
omogućava da program može lako da monitoriše stanje senzora, postavlja u definisano stanje
aktuatore, i vrši prenos podataka ka/iz drugih uređaja.
Veliki broj proizvođača naziva mikrokontrolere embedded procesore. Razlika između
embedded procesora i mikrokontrolera često nije jasna, mada se u stručnoj literaturi termin
embedded procesor najčešće koristi za veće (32-bitne) procesore, a termin mikrokontroler za
manje (4-, 8-, i 16-bitne) procesore.
Opšti blok dijagram mikrokontrolera je prikazan na slici 1.
8
slika 2. Detaljni blok dijagram mikroračunarskog sistema
ALU
Akumulator
Radni registri
PC SP
kola za
kola za taktovanje
prihvatanje
i sinhronizaciju
prekida
9
Da bi se kompletirao mikroračunarski sistem pored mikroprocesora potrebno je dodati
ROM, RAM memorijske dekodere, oscilator, određeni broj ulazno-izlaznih uređaja kakvi su
paralelni i serijski portovi za podatke, A/D i D/A konvertore i drugo. Pored ulazno-izlaznih
uređaja specijalne namene, često se javlja i potreba da se ugrade i kontroleri prekida, DMA
kontroleri, kao i brojaci/tajmeri čiji je zadatak da oslobode CPU-a od obavljanja U/I
aktivnosti. Kada se u sistem instaliraju i uređaji za masovno memorisanje (hard disk, CD
drajver), kao i tastatura, mis i CRT displej, tada se taj ''mali racunar'' moze koristiti za
razlicite aplikacije opste namene.
Osnovna namena CPU-a je da pribavlja podatke, obavlja izračunavanja nad podacima i
memorise rezultate izračunavanja na disku, kao i da za potrebe korisnika prikaže te rezultate
na displeju (CRT, TFT, LED i dr.). Programi koje koristi mikroprocesor memorisani su na
disku odakle se čitaju i smeštaju u RAM. Deo programa, najčešće malog obima, se obično
smešta i u ROM-u.
10
Mikrokontroler koristi ograničen skup jedno- ili dvo-bajtnih instrukcija koje se koriste za
pribavljanje programa i podataka iz interne memorije. Veliki broj ulazno-izlaznih pinova
mikrokontrolera se može koristiti za više namena, što se softverski definiše.
Mikrokontroler komunicira sa spoljnim svetom (pribavlja i predaje podatke) preko svojih
pinova, pri čemu je arihitektura i skup instrukcija projektovan za manipulisanje sa podacima
obima bajt ili bit.
11
Signal koji se prenosi duž prenosnog puta funkcija je kako vremena tako i frekvencije.
Zbog toga je neophodno poznavati oba domena, frekventni i vremenski, da bi se vršilo
procesiranje signala.
12
Kada se podaci ne predaju linija se nalazi u pasivnom (idle) stanju. Podatku prethodi start-
bit koji je trajanje jednog bitskog intervala i suprotnog je polariteta u odnosu na pasivno
stanje. Nakon toga sledenekoliko bitova podataka (obično je osam). Na kraju se pridružuje
stop-bit koji je istog polariteta kao i pasivno stanje. (Trajanje pasivnog stanja može biti
proizvoljno). Stop bit se uvodi sa ciljem da se jasno razgraniči zadnji bit prenetog znaka.
Kada prijemnik detektuje prednju ivicu start-bita on aktivira generisanje prijemnog takta.
Prva pojava taktnog impulsa je tako podešena da se javi na sredini, ili oko sredine, prvog bita
podataka i koristi se za strobovanje bita u registar ili leč. Sa narednim taktnim impulsima, za
ostale bitove podataka, proces se ponavlja. U suštini, ako je taktna frekvencija prijemnika i
predajnika identična, strobovanje će se uvek javljati (dešavati) na sredini trajanja bitskog
intervala. Zbog različitih frekvencija predajnika i prijemnika ipak dolazi do "klizanja" tako
da, ako se broj bitova povećava, koincidencija taktnih impulsa i princip strobovanja podataka
na sredini bitskog intervala se narušava. Imajući ovo u vidu, a iz razloga pouzdane detekcije,
obim (trajanje) asinhronog signala ograničen je na 12 bitova (misli se na prenos jedinstvenog
karaktera (znaka) jer je se sinhronizacija kod ovog prenosa ostvaruje na nivou jednog znaka).
Uobičajeno podaci se predaju kao okviri, tj. ramovi (frame) fiksnog obima pri čemu svaku
informaciju na početku i kraju prate specijalni bit oblici nazvani preambule (preamble). Svrha
preambule je da ostvari sinhronizaciju predajnog i prijemnog oscilatora pre početka prijema
informacionih bitova.
13
2.11 RS- 485
RS-485 je standard koji se bavi električnim osobinama interfejsa. On propisuje
diferencijalne linijske predajnike i prijemnike za dvosmerni (poludupleks) multipoint
interfejs. Ovaj standard ne propisuje protokol, kodovanje, mehaničke osobine priključaka ni
raspored njegovih kontakata. Interfejs RS-485 je u širokoj primjeni i jedinstven je po tome
što omogućuje dvosmjernu komunikaciju većeg broja uređaja vezanih na jedan vod. Ova
osobina se zove multipoint. U svom najjednostavnijem obliku, RS-485 može da se svede na
upredenu paricu, na čijim su krajevima dva uređaja koji sadrže po jedan linijski predajnik i
prijemnik. Podaci mogu da se šalju u oba smjera, ali ne istovremeno. Dok jedan uređaj
emituje signal, drugi mora da bude u stanju prijema, kada je njegov linijski predajnik u stanju
visoke impedanse. Kao što je već rečeno RS-485 omogućuje da se ostvari komunikacija
između većeg broja uređaja, koji su povezani na jedan vod (paricu). Ovde parica ima ulogu
serijske magistrale. Pošto niz priključenih uređaja može da se posmatra kao paralelna veza
njihovih ulaznih impedansi, jasno je da postoji ograničenje ukupnog broja uređaja.
Standardom je propisano ograničenje u vidu maksimalnog broja "jediničnih opterećenja", a
taj broj je 32. Pojam "jedinično opterećenje" u praksi se najčešće svodi na jedan par linijskih
predajnika i prijemnika. U najgorem slučaju, jedinično opterećenje ima otpornost od 10,56
kΩ. Da bi neki uređaj predstavljao jedinično opterećenje on mora da se nalazi u okviru
osjenčene oblasti na dijagramu, koji je prikazan na slici 8
14
standard u industriji. Svi drugi standardi kao što su Modbus, Profibus, Interbus, Bitbus,
Optomux Data Highway, Mesurment Bus (DIN 66348), P-Net itd, su samo njegova
softverska nadgradnja i u rijetkim slučajevima mala hardverska iteracija (Siemens je proizveo
i patentirao programsku nadgradnju poznatu kao Profibus-Fieldbus,svjetski standard za
industriju) . Mada ova rješenja, bez sumnje, imaju svoje prednosti a i nedostatke, osnovni
RS-485 je najjeftiniji i najjednostavniji interfejs koji korisnika oslobađa plaćanja softvera i
licenci i daje mu svu softversku slobodu pa čak i pisanje sopstvenog softverskog protokola.
Povećanjem pobudne sposobnosti predajnika i ulazne impedanse prijemnika, moguće je
povezati na zajedničkoj prenosnoj vezi do 32 predajna stepena i 32 prijemnika. RS-485
omogućava da do 32 uređaja (opciono 256) komunicira u polu-dupleksu ili dupleks režimu
preko jednog ili dva para provodnika (parica), plus uzemljenje (koje nije uvjek neophodno)
na rastojanjima do 1200 metara. Dužina mreže i broj uređaja se mogu povećati korišćenjem
ripitera. Par predajnik-prijemnik uobičajeno se zove primopredajnik (transceiver). Na slici 9
prikazan je jedan tipičan polu-dupleks RS485 sistem za prenos podataka. Treba uočiti sa slike
9 da su oba kraja linije završena karakterističnom impedansom. Aktiviranje izlaza predajnog
driver-a vrši se signalom kontrola.
15
slika 10. Linijski predajnik (D) i linijski prijemnik (R)
slika 12. Realni oblik signala A i B sa superponiranim smetnjama na vodu (gore) i rezultujući
diferencijalni signal (dole).
16
Električne karakteristike linijskog predajnika i prijemnika prikazane su u sledećoj
tabeli:
17
važnu svrhu. Na razdaljinama od nekoliko kilometara, može doći do razlike između
potencijala masa. RS-485 mreža komunicira sa naponima od -7V do +12V i ukoliko
je razlika potencijala veća od toga, komunikacija će biti otežana ili nemoguća, a može
doći i do oštećenja uređaja. Linija za masu omogućava da se izjednači potencijal
masa, tako što se mase oba uređaja povežu direktno provodnikom. Ukoliko je
međutim, razlika potencijala prevelika, potrebna su druga rješenja. Jedno od najboljih
je galvanska izolacija uređaja na obje strane. Posredstvom interfejsa RS-485 mogu da
se prenose podaci na rastojanju do 1200 m (4000 ft).
Binarni protok kod ovog interfejsa može da iznosi do 10 Mb/s. Pri maksimalnoj
dužini voda nije moguće postići maksimalnu vrijednost binarnog protoka, jer što je
vod duži, to je binarni protok manji. Razlog za to su izobličenja signala, koji nastaju
na vodu. U zavisnosti od usvojenog kriterijuma za potreban kvalitet signala, može da
se nacrta kriva, koja pokazuje zavisnost maksimalne dozvoljene dužine kabla od
binarnog protoka.
U većini primjena interfejsa RS-485 potrebno je da se na krajeve korišćenog voda
postave adekvatne završne impedanse. Taj postupak se zove terminacija, a za završnu
impedansu se koristi naziv terminator. Potreba za terminacijom postoji zbog toga što
prilikom prenosa podataka nastaju veoma brze promjene napona, tako da do izražaja
dolaze efekti prostiranja talasa. Na svim diskontinuitetima na vodu nastaje refleksija,
koja je utoliko izraženija ukoliko je diskontinuitet veći. Refleksija se takođe prostire
duž voda, dolazi u interakciju sa korisnim signalom, ponovo se reflektuje itd, čime
može da značajno pokvari talasni oblik korisnog signala i ugrozi njegov ispravan
prijem. Jasno je da su krajevi voda kritični, jer su to najveći diskontinuiteti. Zato na
tim krajevima treba da budu postavljene završne impedanse, čija vrijednost približno
odgovara karakterističnoj impedansi voda. Time će, u velikoj mjeri, biti spriječene
refleksije od krajeva voda. Pošto interfejs RS-485 omogućuje korišćenje većeg broja
uređaja na istom vodu, važno je znati da se terminacija vrši samo na krajevima voda,
gdje su obično priključeni krajnji uređaji. Takođe zbog efekata prostiranja talasa duž
voda, poželjno je da serijska magistrala bude praktično realizovana kao jedan vod, sa
što manjom dužinom ogranaka kojim se priključuju uređaji koji nisu krajnji. Pošto se
za interfejs RS-485 najčešće koristi vod čija je karakteristična impedansa oko 120Ω,
logično je da završna impedansa bude otpornik od 120Ω. Ovo rješenje se koristi u
praksi ali ima jedan nedostatak, a to je potrošnja energije. Linijski predajnik, koji je
priključen na vod i emituje signal, "vidi" dva ovakva otpornika u paralelnoj vezi, a
takođe i ulazne otpornosti svih linijskih prijemnika (12 kΩ). Zbog toga, u slučaju da
je na terminisani vod priključen predviđeni maksimum od 32 jedinična opterećenja,
linijski predajnik mora da obezbjedi jačinu struje od približno 60 mA. Da bi se ova
vrijednost smanjila, često se dodaje kondenzator, u rednoj vezi sa pomenutim
otpornikom od 120Ω.
Kapacitivnost ovog kondenzatora se dobija na osnovu sledeće dvije nejednakosti:
18
Gdje su: L=dužina voda
c=brzina prostiranja talasa na vodu
Zc=karakteristična impedansa voda
R=otpornost terminatora
Tb=trajanje jednog bita
19
slika 14. Tabela vrste terminatora voda, koji se često koriste kod interfejsa RS-485 i pregled
njihovih važnijih osobina
20
slika 17. Električna šema ulaza(D,DE,RE) portova (A,B) i izlaza (R)
21
2.12.1 Čeksuma: karakter provere
Kod čeksume karakter provere, svakom karakteru se dodeljuje decimalna vrednost.
decimalne vrednosti svakog karaktera u poruci se zajedno sabiraju pa se nataj način
formira čeksum karakter. Ovaj karakter se pridružuje na kraju poruke u obliku
redundantnih bitova i predaje. Bar kôdovi kôd-39 i POSTNET koriste modifikovane
forme ček karaktera kako bi odredili čeksumu.
Primer-1
Odgovor
smer prenosa
H E L L O
48 45 4C 4C 4F
H 0100 1000
48
E 0100 0101
45
L 0100 1100
4C
L 0100 1100
4C
O 0100 1111
4F
1 1 0111 0100
74
LS bajt je 74 h
carry = 1, izbacuje se
22
LS bajt procesa sabiranja je 74 h i pridružuje se poruci koja se predaje
smer prenosa
48 45 4C 4C 4F 74
H E L L O
čeksuma
smer prenosa
48 45 4C 4C 4F 01 74
H E L L O
čeksuma
Primer-2
Odgovor
23
smer prenosa
H E L P
48 45 4C 50
4C 50
48 45
--------
94 95
16-bitna suma procesa sabiranja iznosi 94 95 h, ona se pridružuje poruci, pa se
generiše niz podataka
smer prenosa
48 45 4C 50 94 95
H E L P
čeksuma
smer prenosa
48 45 4C 4C 4F 75
H E L L O
čeksuma
24
3 Opis sistema
TASTERI
RS485 magistrala
SLAVE 1 SLAVE 2
25
Slave1 prepoznaje da je poruka za njega i nakon toga rutina CHCHSUM proverava
da li je checksum ok. Ukoliko je sve u redu, smešta adresu onoga koji je slao (00) na
adresu za slanje (za odgovor) i najzad glavni program dobija informaciju da čita
podatke.
Glavni program zatim prepoznaje D3 kao naredbu da upali određene diode, to i
radi, i najzad šalje odgovor Masteru (adresi 0) .
R1 R2 R3
U1
1
39 21
38 P0.0/AD0 P2.0/A8 22 Enter
37 P0.1/AD1 P2.1/A9 23 LED0 LED1 LED2
36 P0.2/AD2 P2.2/A10 24
2
35 P0.3/AD3 P2.3/A11 25
34 P0.4/AD4 P2.4/A12 26
33 P0.5/AD5 P2.5/A13 27
32 P0.6/AD6 P2.6/A14 28
Disp Data 0..7 P0.7/AD7 P2.7/A15 U2
1 10
2 P1.0/T2 P3.0/RXD 11 4 1
3 P1.1/T2-EX P3.1/TXD 12 D R
4 P1.2 P3.2/INT0 13 3 6
P1.3 P3.3/INT1 DE A Aline
2
5 14 2 7
P1.4/SS P3.4/T0 RE B Bline
6 15
Select 7 P1.5/MOSI P3.5/T1 16
8 P1.6/MISO P3.6/WR 17 SN75176B
P1.7/SCK P3.7/RD
1
19 30
XTAL1 ALE/PROG Disp RV
18 29
XTAL2 PSEN Disp RS
Disp enable
31
9 EA/VPP
RST
40
VCC
AT89S8253
Na sva tri modula, nalaze se i po tri led diode vezane na port2 koje služe za
indikaciju poslatih poruka.
26
3.4 Formati poruka
Poruka je formata:
Cela poruka je ASCII kodirana. Ovim se izbegava moguće javljanje start ili stop
karaktera unutar podataka.
Start karakter:
ASCII '!' HEX '0x21'
Adresa pošiljaoca:
Ascii reprezentacija jednog bajta pomoću dva. Ide od 00 do FF (256 adresa).
Adresa 00 je rezervisana za master, a FF za broadcast. Ova dva bajta predstavljaju
adresu uređaja koji šalje poruku.
Adresa primaoca:
Isti format kao adresa pošiljaoca, samo što ova dva bajta predstavljaju adresu
uređaja kome se šalje.
Podaci:
Ascii poruka. Može biti promenljive dužine. U poruci se ne smeju javiti start
ili stop karakter.
Čeksuma:
Ovo je Ascii dvobajtna reprezentacija čeksume jednostruke preciznosti. U
sumu ulaze adresa pošiljaoca, primaoca i podaci. Primer formiranja čeksume je dat u
poglavlju čeksuma.
End karakter:
ASCII '@' HEX '0x40'
27
3.5 Napajanje
Napajanje koje se koristi je sa transformatora 220/9 V i taj napon se ispravlja preko
Grec ispravljača i stabilizuje sa LM7805 na 5V, odakle se vodi na mikrokontroler i
spoljašni tajmer 82c54.
28
4 Software
Kod je pisan u Asembleru bez simulacije.
U oblasti 4, zbog veličine programa, prikazane su sve funkcije ponaosob, kao i
glavni program za Master i Slave terminal. Opis funkcije se nalazi ispred, a postoje i
dodatni in-line komentari.
4.1.1 wait 1 mS
ulazni parametri: R7
izlazni parametri: nema
funkcija: čeka onoliko mS koliko dato u R7 (do 255mS)
ako je R7 00H ne čeka ništa
4.1.2 wait 10 mS
ulazni parametri: R4
izlazni parametri: nema
funkcija: čeka onoliko desetina mS koliko dato u R4 (do 2,55 S)
ako je R4 00H ne čeka ništa
29
;****** ATOHEX *********************************
;**** ULAZ: ACC=ascii-HEX ,
;**** IZLAZ: C=1, ACC= 4 BITA HEX
;***** C=0, GRESKA, NIJE ASCII-HEX
ATOHEX: CLR C
SUBB A, #'A'
JC RE23
SUBB A, #06H
JNC NOHEX
YEHEX: ANL A, #0FH
RET
RE23: ADD A, #07H
JC NOHEX
ADD A, #0AH
JC YEHEX
NOHEX: CLR C
RET
30
MOV A,#38H ; SET DL=1,N=1,F=0
LCALL DCOMW
MOV A,#06H ; DISP OFF
LCALL DCOMW
MOV A,#0CH ; DISP ON
LCALL DCOMW
MOV A,#01H ;01= CLEARDISP
LCALL DCOMW
MOV A,#80H ;ADR=0 FOR DD RAM
LCALL DCOMW
RET
31
INC DPTR ; NAREDNI BAJT
JZ DSTRWEND ; KRAJ STRINGA?
LCALL DDATAW ; POSALJI CHAR
SJMP DSTRW
DSTRWEND:RET
32
4.4.2 primi podatke
ulazni parametri: T_OUT
izlazni parametri: C, ADRX, COMDATA maksimalno do BUFEND, S_ADR
funkcija: čeka podatke dok ne istekne vreme T_OUT*0.5mS. Ako je u T_OUT 00H
beskonačno čekanje dok ne stignu podaci.
Nakon primljenog paketa ispituje da li su namenjeni njemu, proverava da li je
format poruke u redu, i proverava CHECK-sumu. Ako bilo koji od ova 3 uslova ne
bude zadovoljen, u C se vraća 0. Ako su svi zadovoljeni (C=1), na ADRX se
smešta hex adresa pošiljaoca, a od adrese COMDATA do COMDATA+x se smešta
poruka bez CHECK-sume, gde je x dužina poruke. Poruka se završava sa 00h na
adresi COMDATA+(x+1). U S_ADR se opisuje 0FFh ako je stigla broadcast
poruka.
GETDATA:
CLR RI
GETBR: MOV CHECKSUM, #00H
MOV SIPTR, #COMBUF
GET4: MOV A, T_OUT
JZ GET3
MOV R1, A
MOV R2, #0F0H
GET1: JB RI, GET2
DJNZ R2, GET1
MOV R2, #0F0H
DJNZ R1, GET1
LJMP GDERR
MOV A, SBUF
MOV B, A
ADD A, CHECKSUM
MOV CHECKSUM, A
MOV A, B
MOV R0, SIPTR
MOV @R0, A
INC SIPTR
XRL A, #END_CHAR
JZ IS4ME
MOV A, #BUFEND+1
XRL A, SIPTR
JZ GDERR
LJMP GET4
33
;***** IS4ME ***********************************
IS4ME:
MOV A,COMBUF
CJNE A,#ST_CHAR, GDERR
MOV A,DSTADRH
LCALL ATOHEX
JNC GDERR ; NIJE ASCI-HEX
SWAP A
MOV B,A ; PRICUVAJ TEZA CETIRI BITA DEST. ADRESE
MOV A,DSTADRL
LCALL ATOHEX
JNC GDERR ; NIJE ASCI-HEX
ADD A,B ; DEST ADRESA KOMPLETIRANA
CJNE A,#MY_ADR, IS4ALL ; GO IF NOT MY_ADR
SJMP IS42
IS4ALL:CJNE A, #BRADR, GDERR
MOV A, @R0
LCALL ATOHEX
JNC GDERR
SWAP A
MOV B,A
INC R0
MOV A, @R0
LCALL ATOHEX
JNC GDERR
ORL A,B
CJNE A, CHECKSUM, GDERR
34
SETB C
RET
GDERR: CLR C
RET
gde je:
! -startkarakter,
02 -adresa primaoca
01 -adresa pošiljaoca
ovde_se_šalju_podaci -poruka za slanje
5A -checksum (npr.)
@ -stop karakter
;*****SLANJE PODATAKA***************************
;***********************************************
INITTI:
MOV R1, #00H ;ZA CHECKSUM
MOV A, ADRX ;ADRESA KOJOJ SE SALJE
SWAP A
LCALL HEXTOA
MOV DSTADRH, A
MOV A, ADRX
LCALL HEXTOA
MOV DSTADRL, A
MOV COMBUF, #ST_CHAR
35
MOV SRCADRL, A
;***KORISTI SE A,B,R7*
RANDOM_INIT:
MOV RN1,#0F7H ; POCETAK
MOV RN2,#35H
MOV RN3,#55H
MOV RN4,#4EH
MOV R7,#0FFH
M12: LCALL RANDOM
DJNZ R7,M12
36
4.5.2 random
ulazni parametri: nema
izlazni parametri: A
funkcija: generiše nasumičnu vrednost u A
DJNZ B,LOOP8
POP B
RET
37
4.6 Master
ON EQU 01H
OFF EQU 02H
ST EQU 7EH
38
;**** POZICIJE NA LED DISPLEJU ********
PRVIR EQU 80H ; PRVI RED
DRUGIR EQU 0C0H ; DRUGI RED
ORG 0
LJMP INIT
ORG 03H
E0INT: RETI ; INT0 (NE KORISTI SE)
ORG 0BH
39
T0INT: RETI ; TIMER0 INT (NE KORISTI SE)
ORG 13H
E1NT: RETI ; INT1 EXT ARGINE (NE KORISTI SE)
ORG 1BH
T1INT: RETI ; TIMER1 INT (NE KORISTI SE)
ORG 23H
INTSER: RETI ; RI/TI INT INTERNI (NE KORISTI SE)
ORG 2BH
T2INT: RETI ; TIMER2 INT(NE KORISTI SE)
INIT:
MOV SP, #STCK
MOV R0,#7FH
MOV A,#00H
FILL00: MOV @R0,A ; INT MEM =00
DJNZ R0, FILL00
LCALL SERINI
LCALL DISPINI
LCALL CHAR_SET
MAIN:
MOV COUNTS, #0
MOV COUNTE, #0
MOV A, #080H
LCALL DCOMW
MOV A, #0C0H
LCALL DCOMW
40
LCALL DSTRW
SEL_PRESS:
MOV R7,#30 ; 30mS - VIBRACIJA TASTERA
LCALL WAIT1
LCALL OBR_SEL
ENT_PRESS:
MOV R7,#30 ; 30mS - VIBRACIJA TASTERA
LCALL WAIT1
LCALL OBR_ENT
MOV A, COUNTE
XRL A, #00H
JZ ENT1 ;TRUE= PRELAZI U STANJE 1
MOV A, COUNTE
XRL A, #01H
JZ ENT2 ;TRUE= PRELAZI U STANJE 2
MOV A, COUNTE
XRL A, #02H
JZ ENT0 ;TRUE= PRELAZI U STANJE 0
41
MOV A, #DRUGIR ;VRATI START EKRAN
LCALL DCOMW ;
MOV DPTR, #MSG3 ;
LCALL DSTRW ;
LJMP EXITENT ;
42
XRL A, #'K'
JNZ ENT22
MOV A, ADRX
XRL A, S_ADR
JNZ ENT22 ;ERROR
EXITENT:
MOV COUNTS, #00H
RET
43
4.6.5 Obrada tastera SELECT
funkcija:
ažurira displej
menja trenutno stanje
;****** OBRADA TASTERA SELECT ************
OBR_SEL:
MOV A, COUNTE
XRL A, #00H
JZ SEL0 ;TRUE= ENTER STANJE 0
MOV A, COUNTE
XRL A, #01H
JZ SEL1 ;TRUE= ENTER STANJE 1
MOV A, COUNTE
XRL A, #02H
JNZ SEL0
LJMP SEL2 ;TRUE= ENTER STANJE 2
44
SEL8: MOV A, COUNTS
JB 0, SEL9
MOV A, #OFF
LCALL DDATAW
SJMP SELEND
SEL9: MOV A, #ON
LCALL DDATAW
SJMP SELEND
SEL10:MOV DPTR, #MSG6
LCALL DSTRW
SJMP SELEND
SEL2: LJMP ENT0 ;KAO DA JE PRITISNUT ENTER
SELEND: RET
4.7 Slave
45
;**** KONSTANTE *************************
MY_ADR EQU 01H ; MOJA ADRESA
BRADR EQU 0FFH ; BROADCAST ADRESA
ON EQU 01H
OFF EQU 02H
46
4.7.2 inicijalizaciona sekvenca:
funkcija:
definiše stack
upisuje u celu internu memoriju 00h
postavlja RS485 drajver u recieve mod
spušta na masu po jedan kraj tastera ENTER i SELECT
obavlja inicijalizaciju displeja, definisanje karaktera, inicijalizaciju serijkog
porta
ORG 0
LJMP INIT
ORG 03H
E0INT: RETI ; INT0 (NE KORISTI SE)
ORG 0BH
T0INT: RETI ; TIMER0 INT (NE KORISTI SE)
ORG 13H
E1NT: RETI ; INT1 EXT ARGINE (NE KORISTI SE)
ORG 1BH
T1INT: RETI ; TIMER1 INT (NE KORISTI SE)
ORG 23H
INTSER: RETI ; RI/TI INT INTERNI
ORG 2BH
T2INT: RETI ; TIMER2 INT(NE KORISTI SE)
INIT:
MOV SP, #STCK
MOV R0,#7FH
MOV A,#00H
FILL00: MOV @R0,A ; INT MEM =00
DJNZ R0, FILL00
LCALL SERINI
LCALL RANDOM_INIT
47
4.7.3 MAIN petlja
funkcija:
poziva funkciju za prijem podataka
obrađuje primljene podatke
šalje odgovore
ažurira stanje na LED diodama
KOMAND1:
MOV A, COMDATA+1
LCALL ATOHEX
SWAP A
RL A
CPL A
ORL A, #1FH
MOV P2, A
MOV A, S_ADR
MOV S_ADR, #00H
XRL A, #0FFH
JNZ KOM11
LCALL RANDOM
ANL A, #7FH
MOV R4, A
LCALL WAIT10
KOM11: MOV COMDATA, #'O'
MOV COMDATA+1, #'K'
MOV COMDATA+2, #00H
LCALL INITTI
LJMP SLAVE
48
5 Programiranje mikrokontrolera
Upis koda u mikrokontroler može da se vrši preko ISP kabla i ISP konektora na
pločici ili korišćenjem programatora. U ovom slučaju korišćen je programator MEC
ProgramMate UNP2 Universal Programmer i software MEC PG4UW. Postupak
programiranja je objašnjen na sledećim slikama.
49
slika 23. Selekcija AT89S8253
Sledeći korak je učitavanje fajla u bafer, što se postiže sa Load (Load File To
Buffer) i navede putanja do fajla koji je potreban.
Sledeći korak je programiranje i postiže se sa Device/Program, gde se čekira
Flash + EEPROM
Klikom na Yes otvara se novi prozor koji prati postupak upisa kôda u
mikrokontroler
50
Slika 16. Upis kôda u mikrokontroler
51
6 Laboratorijska vežba
Ovde će se pokazati kako funkcioniše najosnovniji protokol tipa master-slave, gde
jedan uređaj proziva ostale, šalje im naredbu i čeka odgovor. Svaki niz poslatih
podataka ima i ček-sumu dodatu na kraju koja se proverava. Omogućeno je i
adresiranje svih uređaja istovremeno.
52
da zasvetle diode u istoj kobinaciji kako je bila selektovana na displeju. U tom
slučaju, na displeju piše Ok.
****Šta se ovde desilo?****
Master je nakon detekcije entera u stanju spremnom da šalje, spakovao poruku u
buffer za slanje. Poruka je oblika: !0100D32A@ ascii tj 21 30 31 30 30 44 33 32 40 u
HEX obliku.
Ovo predstavlja (sa leva na desno):
!- startni karakter
01- Šaljem uređaju sa adresom 1
00- Moja adresa je 0 (master)
D- Upali diode
3- kombinacija kako da upalis diode (3 je konkretno donje dve)
2A- Ček suma
@- Stop karakter
Nakon toga je inicirana rutina za slanje podataka INITTI koja šalje podatke preko
serijskog porta.
Slave je primio prvi karakter (!) koji je prepoznao kao start karakter, i sada očekuje
poruku. Prima poruku dok ne stigne @, nakon čega je spremna obrada poruke to radi
rutina GETDATA.
Nakon toga rutina IS4ME upoređuje adresu koja je stigla sa adresom u memoriji.
Ovde slave sa adresom 2 prepoznaje da adresa nije njegova i da se vrati u petlju
čekajući novu poruku.
Slave 1 prepoznaje da je poruka za njega i nakon toga rutina CHCHSUM proverava
da li je checksum ok. Ukoliko je sve u redu, smešta adresu onoga koji je slao (00) na
adresu za slanje (za odgovor) i najzad glavni program dobija informaciju da čita
podatke.
Glavni program zatim prepoznaje D3 kao naredbu da upali određene diode, to i radi,
i najzad šalje odgovor Masteru (adresi 0) oblika: !0001OK7B@ ascii
Slave 2 opet vidi poruku, ali je opet ignoriše.
Master prima odgovor, ispisuje OK i čeka da se pritisne neki taster i vrati na početak.
************************
4. Pritisnuti neki taster za vraćanje na početak.
5. Možete probati isto i za adresu 2.
53
Ovde master šalje komandu koju slave ne razume. Vidi da je za njega, ali ništa ne
znači. Slave ovde ne odgovara ništa, što se manifestuje kao greška u slanju.
************************
6.4 Broadcast
1. U opciji Send to odabrati ALL
2. Odabrati neku kombinaciju dioda i pritisnuti enter. Trebalo bi da se pojavi Ok1 i
Ok2
****Šta se ovde desilo?****
Opcija broadcast slanja je mogućnost slanja podataka svim slave uređajima. Ovde je
odabrana FF (255) kao adresa za broadcast slanje. Svaki slave uređaj (ukupno 2, ali
i to je više od 1) prima neku naredbu i odrađuje je kao da je samo za njega. Jedina
razlika je kod odgovora. Slave uređaj poziva određenu pseudoslučajnu fju RANDOM
koja mu daje neku nasumičnu vrednost. On čeka neko vreme u zavisnosti od vrednosti
koju je primio i nakon toga odgovara. To se radi kako bi se izbegla kolizija na
magistrali, tj. da se ne desi da 2 ili više uređaja u istom vremenskom trenutku šalju
podatke. Master treba da primi sve odgovore u roku od 2sec u konkretnom slučaju.
Ko ne odgovori za ovo vreme, smatra se da nikad neće.
*************************
3. Isprobati različite kombinacije (isključi slave1 pa pošalji broadcast, pošalji ERR
svima itd...)
54
7 Zaključak
Ovaj projekat je urađen kako bi se omogućilo sadašnjim i budućim studentima
Elektronskog Fakulteta mali uvid u to kako se praktično realizuje osnovna master-
slave komunikacija, u vidu pokazne laboratorijske vežbe.
8 Literatura
1. AT89S8253 dokumentacija – www.atmel.com
2. SN75176 dokumentacija – Texas Instruments
2. Procesori, programski jezici i hardversko-softverske karakteristike embedded
sistema – Mile Stojčev
3. Računarske mreže i prenos podataka – Mile Stojčev
55
9 Dodatak
56
Layout gornje strane PCB-a
57
Layout donje strane PCB-a
58
start
inicijalizacija
while (1)
switch taster
Cekanje odgovora
Set displej Set displej
T F
Switch taster
Stanje = 1
59
start
inicijalizacija
while (1)
primljena poruka ?
databuf[0] = ‘!”
databuf[1..2] = my address
format poruke OK
60
Sanja Tomić
Ime: Sanja
Prezime: Tomić
Datum i mesto rođenja: 04.08.1984. Surdulica
Bračno stanje: Neudata
Adresa stanovanja: Čarnojevića 6/29, Niš
Obrazovanje: Gimnazija ‚‚Jovan Skerlić‘‘ – Vladičin Han
Godina upisa na 2003.
Elektronski fakultet:
Smer: Elektronika
Poznavanje jezika: Engleski
Poznavanje softvera: Protel, mikroC, MSoffice
Interesovanja: Planinarenje, Programiranje
Dosadašnji projekti: 1. Real-time operativni sistem koji ispisuje podatke na 4 led
displeja i čita tastaturu sa 12 tastera sa ¼ duty ciklusom
61
Stevan Marinković
Ime: Stevan
Prezime: Marinković
Datum i mesto rođenja: 11.10.1984. Niš
Bračno stanje: Neoženjen
Adresa stanovanja: Bulevar Nemanjića 78/20, Niš
Obrazovanje: Gimnazija ‚‚Svetozar Marković‘‘ – Niš
Godina upisa na 2003.
Elektronski fakultet:
Smer: Elektronika
Poznavanje jezika: Engleski, Nemački
Poznavanje softvera: Active HDL, uClinux, C#, Protel, mikroC, MSoffice
Poznavanje programskih Assembler, C, C++, C#, VHDL
jezika
Interesovanja: Programiranje, Pilotiranje, Plivanje, Tenis
Radovi: 1. Microcontroler system for temperature regulation with GSM
support - ETRAN, Herceg novi, 2007
2. Portable system for heartbeat and respiration measurement -
INDEL, Banja Luka , 2006
Dosadašnji projekti: 1. Embedded sistem sa Blackfin procesorom i uClinux operativnim
sistemom
2. Real-time operativni sistem koji ispisuje podatke na 4 led
displeja i čita 12 tastera sa ¼ duty ciklusom
3. Digitalni deo LCD drajvera koji može upravljati sa 168 displej
segmenata sa ¼ duty ciklusom i tri naponska nivoa
4. Robot sa 4 točka upravljan preko RF veze
5. Mikrokontrolerski sistem za temperaturnu regulaciju upravljan
SMS porukama
62
Dosadašnji projekti - 6. Analogni i digitalni deo sistema za merenje broja otkucaja srca u
nastavak: minuti i broja udisaja u minuti
7. Digitalni deo sistema sa touch-screen displejom koji upravlja
fizioterapeutske sonde za lasersko i ultrazvučno lečenje
Ostalo: Član plivačkih klubova ‚‚Niš‘‘ i ‚‚Sveti Nikola‘‘ u periodu od 1993
do 2002
Učesnik u timu koji je predstavljao Elektronski fakultet u Nišu na
tri međunarodna takmičenja studenata elektronike Hard&Soft.
63