Proiect Comunicatii de date

download Proiect Comunicatii de date

of 9

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