490 likes | 776 Views
Master-slave komunikacija realizovana korišćenjem RS485 interfejsa . Predmet : Mikroprocesorski sistemi Predmetni nastavnik: Prof. dr. Mile Stojčev. Projektni zadatak. Realizovati protokol koji ostvaruje master-slave komunikaciju između 3 uređaja na zajedničkoj magistrali
E N D
Master-slave komunikacija realizovana korišćenjem RS485 interfejsa Predmet: Mikroprocesorski sistemi Predmetni nastavnik:Prof. dr. Mile Stojčev
Projektni zadatak • Realizovati protokol koji ostvaruje master-slave komunikaciju između 3 uređaja na zajedničkoj magistrali • Protokol mora imati neku vrstu provere greške prilikom prenosa • Treba se realizovati mogucnost broadcast slanja
Podela po broju bitova koji se prenose u jednom trenutku Serijski prenos Paralelni prenos Podela po načinu sinhronizacije Sinhroni prenos Asinhroni prenos Nacini prenosa podataka
Paralelni prenos Brži Potrebno više linija Moraju imati sinhronizaciju (handshake) Serijski prenos Sporiji Bit po bit Moze biti i asinhron Nacini prenosa podataka
Sinhroni prenos podataka • Korišćenje sinhronizacionih signala na nivou takta • Predajnik generiše taktni signal koji je… • Prenet do prijemnika bilo preko posebnog kanala ili… • Direktno regenerisan od strane prijemnika iz dolazećeg signala
Asinhroni prenos podataka • Predajnik može u bilo kom trenutku generisati bitove • Asinhroni prijemnik ne regeneriše takt na osnovu dolazećeg signala • Početak i kraj rada prijema : metod start-stop • Predajnik i prijemnik koriste posebne taktne impulse čije su frekvencije veoma bliske jedna drugoj
Vrste serijskog prenosa • Simpleks (simplex) • Polu Dupleks (half-duplex) • Potpuni dupleks(full-duplex)
RS485 • Serijski • Asinhroni • Polu-dupleks i Potpuni-dupleks • Diferencijalni linijski predajnici i prijemnici
RS485 • Dvosmerna komunikacija većeg broja uređaja vezanih na jedan vod • Upredene parice Zc=100Ωdo Zc=120Ω • Do 32 predajna stepena i 32 prijemnika • Rastojanje do 1200 metara
RS485 • Osobine diferencijalnih signala omogućavaju visok imunitet na šum i komunikaciju na velikim rastojanjima • RS-485 mreža komunicira sa naponima od -7V do +12V • Binarni protok do 10 Mb/s
RS485 • Završna impedansa • Polarizacija
RS485 • SN75176B drajver • Potrošnja drajvera je do 60mA • Napon napajanja je 5V
RS485 • Električna šema ulaza(D,DE,RE) portova (A,B) i izlaza (R)
Provera tačnosti - čeksuma • karakter provere (check character checksum) • jednostruka preciznost (single precision checksum) • dvostruka preciznost (double precision checksum) • Honeywell (Honeywell checksum) • ostatak (residue checksum)
Čeksuma – karakter provere • Svakom karakteru se dodeljuje decimalna vrednost • Decimalne vrednosti svakog karaktera u poruci se zajedno sabiraju . • Ovaj karakter se pridružuje na kraju poruke u obliku redundantnih bitova i vrši se predaja
Čeksuma – jednostruka preciznost • Čeksuma se izračunava binarnim sabiranjem podataka u okviru poruke • Carry out • Čeksuma kod sabiranja u običnoj preciznosti predstavlja samo LS bajt aritmetičke sume binarnih podataka koji se prenose • Korišćena u projektu
Čeksuma – jednostruka preciznost H E L L O 48 45 4C 4C 4F H E L L O CHSUM 48 45 4C 4C 4F 74 LS bajt je 74 h
Čeksuma – dvostruka preciznost • Čeksuma je suma obima 2n bitova • Ako podatke čine 8-bitni karakteri, čeksuma će biti 16-bitna, čime se smanjuje verovatnoća generisanja pogrešne čeksume
Honeywell čeksuma • Čeksuma je obima 2n bitova • Čeksuma se formira preplitanjem uzastopnih reči podataka sa ciljem da se dobiju reči dvostruke dužine • Reči dvostruke dužine se sabiraju zajedno pa se formira čeksuma dvostruke preciznosti
Čeksuma ostatak • Prividno identična čeksumi jednostruke preciznosti • Razlika: ostatak bit prenosa se dodaje LS bajtu sume • Za primer malopre, čeksuma ostatak se formira dodavanjem 1 vrednosti 74 h, pa se dobija 75 h
TASTERI DISPLEJ MASTER LED DIODE RS485 magistrala SLAVE 1 SLAVE 2 LED DIODE LED DIODE Blok šema sistema
Opis blok šeme • Koristi se RS485 interfejs • Polu – dupleks • Master slave komunikacija • Displej i tastatura za komunikaciju sa korisnikom • User – frendly meny • Moguće adresiranje jednog ili svih uređaja (broadcast) • Detekcija greške čeksumom jednostruke preciznosti • Detekcija prisutnosti uređaja time-out funkcijama
Komunikacioni protokol • Format poruke Start karakterAscii '!' HEX '0x21' Adresa pošiljaoca Ascii 00 do FF00 je rezervisana za master, a FF za broadcast Adresa primaoca Ascii 00 do FF PodaciAscii poruka Čeksuma Ascii Dvobajtna reprezentacija čeksume jednostruke preciznosti End karakterAscii '@' HEX '0x40'
Primer komuniciranja sa jednim uređajem Neka poruka bude oblika: !0100D32A@ ascii tj 21 30 31 30 30 44 33 32 40 u HEX obliku. • Slave prima prvi karakter (!) koji je prepoznao kao start karakter, i sada očekuje poruku • Upisuje poruku u buffer dok ne stigne @, nakon čega je spremna obrada poruke • Upoređuje se adresa koja je stigla sa adresom u memoriji • Slave1 prepoznaje da je poruka za njega • 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) • Prepoznaje se D3 kao naredba da se upale određene diode • Šalje se odgovor Masteru (adresi 0)
Primer broadcast slanja Neka poruka bude oblika: !FF00D32A@ ascii Koraci 1 .. 3 su isti kao i za slanje jednom uređaju • Prepoznaje se broadcast adresa (FF) • Proverava se checksum • Ukoliko je sve u redu, smešta se adresa onoga koji je slao (00) na adresu za slanje (za odgovor) • Prepoznaje se D3 kao naredba da se upale određene diode • Generiše se slučajna vrednost • Čeka se određeno vreme u zavisnosti od slučajne vrednosti • Šalje se odgovor Masteru (adresi 0)
Meni za upravljanje uređajem • Koristi se dvoredni displej sa 16 karaktera u redu • Upravljanje uređajem se vrši pomoću 2 tastera • Bira se adresa uređaja kome se šalje i raspored dioda koje treba upaliti • Nakon inicirane komunikacije prikazuje se status (uspešna ili neuspešna komunikacija)
start inicijalizacija while (1) switch taster pritisnut enter pritisnut select switch stanje switch stanje Biranje adrese uredjaja (2) slanje podataka (3) start ekran (1) (1) (2) (3) Set displej Adresa = counts Poruka = counts Counts++ Counts++ Stanje = 1 F F Stanje = 2 Set displej Set displej counts > 4 counts > 8 Stanje = 3 Iniciranje slanja Counts = 0 Counts = 0 Cekanje odgovora Set displej Set displej T F Switch taster Kom = OK Kom = err Stanje = 1 Algoritam programa za master modul
start inicijalizacija while (1) primljena poruka ? databuf[0] = ‘!” databuf[1..2] = my address format poruke OK obrada poruke i promena stanja na diodama odgovor “OK” ERROR Algoritam programa za slave modul
ORG 0 LJMP INIT ;************ INICIJALIZACIJA ********* ;************************************** ORG 30H INIT: MOV SP, #STCK MOV R0,#7FH MOV A,#00H FILL00: MOV @R0,A ; INT MEM =00 DJNZ R0, FILL00 CLR EN485TX ; RS485 U RECEIVE MODU CLR SEL_EN ; DRUGI KRAJ SELECT TASTERA NA MASU CLR ENT_EN ; DRUGI KRAJ ENTER TASTERA SETB STAT.MASTER LCALL SERINI LCALL RANDOM_INIT Inicilizaciona sekvenca ; ****** INIT INTERNOG UARTA ********** ;*************************************** SERINI: MOV A,#0FDH ; 9600 MOV TH1, A ; SET TIMER 1 TO SELECTED BAUD RATE MOV TMOD,#20H ; SET TIMER 1 TO AUTO RELOAD MODE MOV TCON,#0C0H ; START TIMER 1 MOV SCON,#52H ; EN.SER.RECEIVE ; 8N1; TI=1 RET
MAIN: MOV COUNTS, #0 MOV COUNTE, #0 MOV A, #080H LCALL DCOMW MOV DPTR, #MSG2 LCALL DSTRW MOV A, #0C0H LCALL DCOMW MOV DPTR, #MSG3 LCALL DSTRW MOD0: JNB SELECT, SEL_PRESS JNB ENTER, ENT_PRESS SJMP MOD0 SEL_PRESS: MOV R7,#30 ; 30mS - VIBRACIJA TASTERA LCALL WAIT1 LCALL OBR_SEL JNB SELECT, $ ;SACEKAJ DA SE PUSTI TASTER MOV R7,#60 ; 60mS - VIBRACIJA TASTERA LCALL WAIT1 SJMP MOD0 ENT_PRESS: MOV R7,#30 ; 30mS - VIBRACIJA TASTERA LCALL WAIT1 LCALL OBR_ENT JNB ENTER, $ ;SACEKAJ DA SE PUSTI TASTER MOV R7,#60 ; 60mS - VIBRACIJA TASTERA LCALL WAIT1 SJMP MOD0 Master – glavna petlja
Master – obrada tastera enter ;****** OBRADA TASTERA ENTER ************ 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 • Postoje 3 stanja • Glavno stanje (biranje adreae uređaja) ENT0 • Biranje rasporeda dioda ENT1 • Slanje poruke ENT2
Master – obrada tastera enter ENT0: MOV COUNTE, #00H ; MOV A, #PRVIR ; LCALL DCOMW ; MOV DPTR, #MSG2 ; LCALL DSTRW ; MOV A, #DRUGIR ;VRATI START EKRAN LCALL DCOMW ; MOV DPTR, #MSG3 ; LCALL DSTRW ; LJMP EXITENT ; ENT1: MOV COUNTE, #01H MOV ADRX, COUNTS ;STAVI U ADRESU ZA SLANJE MOV S_ADR, COUNTS ;STAVI U ADRESU ZA PROVERU ODGOVORA MOV A, #DRUGIR LCALL DCOMW MOV A, #ST LCALL DDATAW MOV A, #PRVIR LCALL DCOMW MOV A, #' ' LCALL DDATAW LJMP EXITENT ENT2: MOV COUNTE, #02H MOV A, #DRUGIR+8 LCALL DCOMW MOV DPTR, #MSG7 ;STAVI ...... LCALL DSTRW MOV A, COUNTS XRL A, #08H ;DA LI JE SLANJE PAKETA? JNZ ENT3 MOV COMDATA, #'M' ;SLANJE PAKETA..... MOV COMDATA+1, #00H SJMP ENT4
Master – slanje paketa i provera odgovora za slanje jednom uređaju ENT4: LCALL INITTI ;INICIRAJ TRANSMIT MOV A, S_ADR XRL A, #0FFH ;DA LI JE BROADCAST? JZ RNDCHK ENT5: MOV T_OUT, #0FFH ; CEKAJ 0.5S NA ODGOVOR LCALL GETDATA JC ENT20 ;DA LI JE PRIMLJENA ISPRAVNA PORUKA ZA MENE? ENT22: MOV A, #DRUGIR+8 LCALL DCOMW ;NIJE MOV DPTR, #MSG4 LCALL DSTRW MOV A, S_ADR LCALL HEXTOA LCALL DDATAW SJMP EXITENT ENT20: MOV A, COMDATA ;JESTE, PROVERI DA LI JE FORMAT 'OK' XRL A, #'O' JNZ ENT22 MOV A, COMDATA+1 XRL A, #'K' JNZ ENT22 MOV A, ADRX XRL A, S_ADR JNZ ENT22 ;ERROR ENT21: MOV A, #DRUGIR+8 LCALL DCOMW MOV DPTR, #MSG5 ;OK JE LCALL DSTRW EXITENT: MOV COUNTS, #00H RET
Master –provera odgovora za broadcast slanje RNDCHK: MOV STREC, #00H MOV T_OUT, #00H SETB TR2 MOV R1, #22 RND1: JB RI, JTOGET JNB TF2, RND1 CLR TF2 DJNZ R1, RND1 CLR TR2 JB STREC.U1, RND4 MOV A, #DRUGIR+8 LCALL DCOMW MOV DPTR, #MSG10 LCALL DSTRW RND4: JB STREC.U2, EXITENT MOV A, #DRUGIR+11 LCALL DCOMW MOV DPTR, #MSG11 LCALL DSTRW SJMP EXITENT JTOGET: LCALL GETBR JNC RND1 MOV A, ADRX CJNE A, #01H, RND2 SETB STREC.U1 MOV A, #DRUGIR+8 LCALL DCOMW MOV DPTR, #MSG8 LCALL DSTRW RND2: MOV A, ADRX CJNE A, #02H, RND3 SETB STREC.U2 MOV A, #DRUGIR+11 LCALL DCOMW MOV DPTR, #MSG9 LCALL DSTRW RND3: SJMP RND1
Master – 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 • U zavisnosti od stanja u kom se nalazi meni, tasterom select se menja ili adresa uređaja, ili raspored dioda koje treba upaliti
Master – 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 SEL0: INC COUNTS MOV A, COUNTS CJNE A, #03H , SEL01 MOV COUNTS, #0FFH ;BROADCAST ADRESA FF MOV A, #PRVIR+10 LCALL DCOMW MOV DPTR, #MSG1 LCALL DSTRW SJMP SELEND SEL01: MOV A, #PRVIR+10 LCALL DCOMW MOV A, COUNTS LCALL HEXTOA LCALL DDATAW MOV A, #' ' LCALL DDATAW ;DVA PRAZNA MESTA LCALL DDATAW SJMP SELEND SEL1: INC COUNTS MOV A, COUNTS CJNE A, #09H, SEL12 MOV COUNTS, #00H SEL12: MOV A, #DRUGIR+11 LCALL DCOMW MOV A, COUNTS JB 3, SEL10 ;VECI JE OD 7H; NIJE ZA DIODE JB 2, SEL5 MOV A, #OFF LCALL DDATAW SJMP SEL6 SEL5: MOV A, #ON LCALL DDATAW SEL6: MOV A, COUNTS JB 1, SEL7 MOV A, #OFF LCALL DDATAW SJMP SEL8 SEL7: MOV A, #ON LCALL DDATAW 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
Slave – glavna petlja SLAVE: MOV T_OUT, #00H LCALL GETDATA JNC SLAVE MOV A, COMDATA XRL A, #'D' ;UPALI DIODE JZ KOMAND1 MOV A, COMDATA SJMP SLAVE 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
Potprogrami koji su korišćeni u master i/ili slave programu • Funkcije za čekanje: • wait 1 ms – WAIT1 • wait 10 ms – WAIT10 • Funkcije za konverziju podataka: • ascii u hex – ATOHEX • hex u ascii – HEXTOA • Funkcije za upravljanje displejom • inicijalizacija displeja – DISPINI • pošalji komandu – DCOMW • pošalji karakter – DDATAW • pošalji niz karaktera – DSTRW • ispitavanje da li je slobodan displej – WTBUSY • kreiranje simbola – CHAR_SET • Funkcije za slanje i primanje podataka: • Inicijalizacija serijskog porta – SERINI • primi podatke – GETDATA • pošalji podatke – INITTI • Funkcije za generisanje nasumičnih vrednosti • random init – RANDOM_INIT • random - RANDOM