Proiect Comunicatii de date
-
Upload
tanase-alexandru -
Category
Documents
-
view
215 -
download
0
Transcript of Proiect Comunicatii de date
-
7/24/2019 Proiect Comunicatii de date
1/9
Universistatea Politehnica Timi oara
Facultatea de Automatica i Calculatoare
Proiect la Comunica ii de Date
Comunicarea Master - Slave
Tnase Flaviu Alexandru
Vasile Mario Ctlin
An ! "S! #ru$a %&
-
7/24/2019 Proiect Comunicatii de date
2/9
'% Tema $roiectului
Se consider o structur hardware constnd din dou sisteme de dezvoltare
echipate cu microcontrolere de tip 80C552. Acest tip de microcontroler integreaz n cipfacilitile hardware necesare pentru a comunica pe o magistral serial n standard!2C. Acest hardware are structura unui automat cu stri finite" e#ploata$il prinintermediul unor registre ale microcontrolerului. %odul de e#ploatare este descris pelarg n paragraful 2.
Se cere s se lege ntre ele dou sisteme" unul care funcioneaz ca master &iunul care funcioneaz ca sclav. 'entru fiecare dintre sisteme se va scrie un program"
n lim$a( C" care s permit comunicaia ntre cele dou sisteme astfel)
*. +a nceputul rulrii aplicaiei ,dup reset-" fiecare modul iniializeaz interfaa!2C.
2. up iniializare" sistemul master intr n modul transmitor &i transmite ctresclav dou &iruri de octei. Aceste &iruri snt preluate din memorie" unde se presupunec au fost declarate prin program" ca constante. Sistemul sclav va recepiona aceste&iruri de octei &i le va memora ntr/un $uffer. ransmisia celor dou &iruri se va face cao operaie indivizi$il" prin generarea unui start repetat dup transmiterea primului &ir.
1. up terminarea transmisiei de ctre master" acesta va trece n mod receptor"iar
sclavul va trece n mod transmitor. Acum sistemul sclav va transmite dou &iruri deoctei" iar sistemul master le va recepiona" deasemenea cu start repetat. Apariia uneierori de magistral va avea ca efect a$andonarea operaiei curente ,de transmitere"
respectiv de recepie- &i ncercarea de reluare a ei. eoarece n sistem e#ist un singurmaster" apariia unei stri de pierdere a ar$itrrii va fi tratat la fel ca o eroare.easemenea" a$sena semnalului de acnoledge de la sclav va fi tratat ca eroare.
3ncercarea de repetare a transferului se va face de trei ori" dup care se va a$ortantreaga sesiune de comunicaie.
!ntr/o aplicaie" lucrul cu interfaa serial !2C , S!4* - se poate realiza" n principiu"n doua moduri )
prin interogare (polling)cu ntreruperea serial S!4* invalidat. 3n acest caz" se
testeaz prin program $itul S! pentru a detecta momentul n care interfaa a(unge ntr/ostare definit ,codul strii se cite&te din registrul S*SA-.
prin ntreruperi. 3n acest caz programatorul tre$uie s scrie o su$rutin de tratare antreruperii la care se a(unge automat ,prin mecanisme hardware- atunci cnd $itul dentrerupere S! este setat.
-
7/24/2019 Proiect Comunicatii de date
3/9
3n principiu" un program pentru interfaa serial !2C ar tre$ui s cuprind o funciede iniializare a interfeei" cte o funcie pentru implementarea fiecrui mod de lucru &i ofuncie de ntrerupere ,dac se lucreaz cu ntreruperi-.
uncia de iniializare tre$uie s realizeze programarea S*C46 ,validare" rata detransfer" etc-.
uncia care implementeaz un mod de lucru tre$uie s realizeze un automatsecvenial cu un numr finit de stri. 7a va cuprinde o $ucl de a&teptare" n care setesteaz fanionul S! pn cnd acesta este setat prin hardware" eveniment ce indictrecerea ntr/o nou stare. 3n continuare" aciunea ntreprins depinde de codul striicurente din S*SA.
uncia de tratare a ntreruperii tre$uie s realizeze" n principiu" acelea&i aciuniprezentate anterior" adic implementarea modurilor de lucru" cu diferena c nu se maiface testarea $itului S!" deoarece aceast funcie este apelat automat atunci cnd seschim$ starea &i S! este setat.
Sistemele pe care se va implementa aceast aplicaie snt concepute n principalca platformre de dezvoltare &i testare a aplicaiilor. Aceasta nseamn c dispun deresurse mai mari dect ale unui sistem dedicat ,em$edded- dar mai mici dect ale unuicalculator 'C.
e regul" astfel de aplicaii de dezvolt" la nivel software" pe un calculator 'Cpe care ruleaz un crosscompilator. Acesta genereaz cod o$iect care va fi transportat"de o$icei printr/o cale de comunicaie serial ,S212-" pe sistemul int.
Compilatorul C pentru microcontrolerul 80552 recunoa&te numele registrelor S&i ale $iilor din aceste registre. 7le snt asimilate unor varia$ile predefinite &i pot aprea
n e#presii &i n instrucii de atri$uire. e e#emplu)
# 9 S*SA: sauwhile,;S!-: sau
S! 9 *:snt instrucii valide.
'entru interfaa cu dispozitivele de intrare/ie&ire presupunem c snt disponi$iledou funcii de $i$liotec care au urmtoarele prototipuri)
unsigned char citeste,void-:
void scrie,unsigned char-:
!nterfaa serial !2C ,notat S!4*- permite conectarea microcontrolerului 80C552 la omagistral !2C care utilizeaz doar dou linii" SA ,linia de date- &i SC+ ,linia de ceas-"
pentru transferul informaiei ntre dispozitivele conectate la magistral. 'rincipalele
caracteristici ale acesteia snt )
transfer $idirecional ntre dispozitive master &i sclav
magistral multimaster" fr un master central
-
7/24/2019 Proiect Comunicatii de date
4/9
ar$itrare pentru tentativa de acces simultan la magistral a mai multor dispozitivemaster
sincronizarea ceasului" care permite comunicarea dispozitivelor cu diferite rate detransfer
Conectarea interfeei interne la magistrala e#terna !2C se face prin doi pini de port,'*.
-
7/24/2019 Proiect Comunicatii de date
5/9
este adresat prin octetul S+AF@ de un master transmitor. 3n continuare $itul S! estesetat &i un numr de stri snt posi$ile ,codul lor este n registrul S*SA-. 3n modul sclavreceptor se poate a(unge &i din modul master dac S!4* pierde ar$itrarea pentru accesla magistral ,vezi starile 8G-.
ac $itul AA este resetat n timpul unui transfer" S!4* va returna un $it
64EAC dup urmtorul octet de date: n continuare S!4* nu &i va mai recunoa&tepropria adres sau adresa general. otu&i" magistrala este monitorizat &i revenirea larecunoa&terea adreselor poate fi fcut prin setarea $itului AA ,$itul AA poate fi" deci"folosit pentru izolarea temporar de magistral-.
Modul Sclav Transmi(tor
3n acest mod" un numr de octei de date snt transmi&i ctre un master receptor.
!niializarea transferului se face prin incrcarea S*A &i S*C46 la fel ca n cazulsclav receptor.
up ce S*A &i S*C46 au fost iniializai" S!4* rmne n a&teptare pn cndeste adresat prin octetul S+AF de un master receptor. 3n continuare $itul S! este setat&i un numr de stri snt posi$ile ,codul lor este n registrul S*SA-. 3n modul sclavtransmitor se poate a(unge &i din modul master dac S!4* pierde ar$itrarea pentruacces la magistral ,vezi starea H0G-.
ac $itul AA este resetat n timpul unui transfer" S!4* va transmite un ultim octetde date dup care va intra n una din strile C0G sau C8G. 3n continuare S!4* nu &i vamai recunoa&te propria adres" sau adresa general" ignornd masterul dac acesta
continu transferul ,masterul va recepiona n acest caz valoarea B*D pe linia serial-.otu&i" magistrala este monitorizat &i revenirea la recunoa&terea adreselor poate fifcut prin setarea $itului AA.
Modul Master )ece$tor
3n acest mod" un numar de octei de date snt recepionati de un master receptorde la un sclav transmiator. !niializarea transferului se face la fel ca n modul mastertransmitor.
Cnd SA este generat" $itul S! este setat &i se intr n starea 08G n care
tre$uie ncrcat registrul S*A cu adresa sclavului &i $itul de sens ,S+AF-. Hitul S!tre$uie resetat pentru ca transferul s continue.
Cnd S+AF a fost transmis &i $itul AC a fost recepionat" $itul S! este setat din nou &iun numr de stri n S*SA snt posi$ile. Acestea snt I0G" I8G sau 18G pentru modulmaster &i
-
7/24/2019 Proiect Comunicatii de date
6/9
//Programul pentru Master:
#include
#include
charslv=!"char$e%=!&
//initiali'e' ()*+, voidinitiali'are-
0,(=)//pentru validarea lui (1+) ("=//se resetea'a (+=//se resetea'a (1=//se resetea'a ""=//poate 3 setat sau resetat
*4=//cei trei biti *4)=//sunt po'itionati pentru *42=//rata de transer dorita
6
//trimite tasta citita la (lave voidmaster_send-
("=)//aici se intra in modul Master 7hile-)
i-(1//testare (1
s7itch-()("//aici este anali'ata starea curenta
case!://eroare de comunicatie pe bus lcd_8rite-)9 ;//se a3sea'a semnul ; brea$
case!://sa transmis conditia de start case!)://start repetat a ost transmis
(+= ()"=slv
-
7/24/2019 Proiect Comunicatii de date
7/9
case!2://in acest ca' tasta e transmisa "*A receptionat ("= (+=)//trimit stop brea$
case!B://in acest ca' tasta e transmisa ,+_"*A receptionat ()"=$e%//se incearca o retransmitere a tastei ("=
(+= brea$
case!B://arbitrare pierduta brea$
6 (1=//resetare (1
6
6
6
//aici se citeste raspunsul transmis de slave voidmaster_recieve-
("=)//generare start 7hile-)
i-(1//testare (1
s7itch-()("//aici se anali'ea'a starea curenta
case!://eroare de comunicatie pe bus lcd_8rite-)9 ;//se a3sea'a ; brea$
case!://sa transmis conditia de start case!)://start repetat a ost transmis
()"=slv
-
7/24/2019 Proiect Comunicatii de date
8/9
brea$ case!5://tasta a ost receptionata "*A returnat
$e%=()" ""= ("= (+= brea$
case!5://tasta a ost receptionata ,+_"*A returnat ("=) (+= brea$
6
(1=//resetare (1
6
6
6
voidmain-
lcd_1nitispla%-//initiali'area a3saEului ?* initiali'are-//initiali'area valorilor variabile
7hile-)
master_send-//se trimite la slave master_receive-//se receptionea'a de la slave
6
6
'rogramul pentru slave#include#include
charslv=!"char$e%=!
voidiniti2c-
0,(=) //pentru validarea (1+) ("= //se resetea'a bitul de start (+= //se resetea'a bitul de stop (1= //nu se olosesc intreruperile ""=) //se setea'a "*A
//setarea bitilor pentru comunicarea pe )FMh' *4=
-
7/24/2019 Proiect Comunicatii de date
9/9
*4)= *42=
6
//trimitere tasta incrementata
voidslave_send-
()"4=slv