Sunteți pe pagina 1din 45

Lucrare de Laborator CD – Nr.

Aparate de masurare si generare de semnale

1. Scopul lucrarii

Familiarizarea cu aparatura de laborator in vederea utilizarii acesteia in urmatoarele sedinte ale


disciplinei Comunicatii de date. Se vor studia: generatorul de semnal, osciloscopul, analizorul
Saleae si analizor de spectru de frecventa.

2. Spectrul de semnale electromagnetice. Tipuri de semnale si parametrii care le


definesc

Desigur ca spectrul semnalelor este mult mai larg, (dupa cum se poate afla dintr-o scurta cautare
cu Google dupa “spectrul electromagnetic”), dar noi ne vom referi la o gama restransa. Cu cat se
extinde gama semnalelor aparatura devine mult mai scumpa.

In cadrul laboratorului se vor genera si vizualiza urmatoarele tipuri de semnale: sinusoidal,


dreptunghiular, triunghiular, dinte de fierastrau. Forma idealizata a semnalelor este prezentata in
figura 1.

Fig 1 – Exemple de semnale

3. Generatorul de semnal

In cadrul sedintelor de laborator din cadrul materiei Comunicatii de Date se va folosi generatorul
de semnal TG120 Function Generator, care arata ca in fig.2.

1
Lucrare de Laborator CD – Nr. 1

Fig 2 – TG120 Function Generator

Generatorul de functii TG120 este un dispozitiv capabil sa generate o varietate de forme de unda
la frecvente incepand de la ordinul mHz pana la MHz. Acesta poate oferi o gama larga de
amplitudini controlate si poate mentine amplitudinea constanta la variatii de frecventa.

Caracteristici tehnice:
 Domeniul de frecventa: 0.2Hz - 20MHz
 Forme de unda: sinusoidal, dreptunghiular and triunghiular plus dc
 Domeniul de amplitudine: 10mV to 20V pk-pk (50 Ohms)
 DC offset (offset-ul = decalajul datorat componentei continue, drift-ul = modificarea cu
temperatura)
 Control simetriei (Variable symmetry control)

 Sincronizarea externa (External sweep input)


Datasheet -http://resources.aimtti.com/datasheets/gen-tg120-2p.pdf

4. Aparate de masura si monitorizare a semnalelor


4.1 Osciloscopul

Osciloscopul este un dispozitiv a carui principala functie este afisarea unor semnale electrice
variabile in timp. Acesta afiseaza un grafic bidirectional al semnalului – pe axa x se face
reprezentarea in functie de timp iar pe axa y in functie de tensiune.

2
Lucrare de Laborator CD – Nr. 1

Uzual se pot vizualiza semnale periodice. Semnalele neperiodice pot fi vizualizate cu osciloscopul
doar dupa ce sunt achizitionate si memorate; se capteaza secvente de o anumita lungime in timp!
Caracteristici ce se pot masura cu osciloscopul:
- Referitoare la timp: frecventa, perioada, factorul de umplere, timpul de cadere/ridicare
- Referitoare la tensiune: amplitudinea, tensiunea maxima si minima, tensiunea medie
Pentru a afla mai multe despre utilizarea osciloscopului accesati link-ul urmator:
https://learn.sparkfun.com/tutorials/how-to-use-an-oscilloscope

Oscilosciopul Tektronix TDS 1001b (fig. 3) prezent in laborator este un dispozitiv dotat cu 2 canale
analogice, avand banda de frecventa de 40MHz si o rata de esantionare de pana la 1Gs/s in timp
real. (Restul caracteristiciilor tehnice si manualul de utilizare apar la link-urile urmatoare:
http://www.tek.com/sites/tek.com/files/media/media/resources/3GW_25644_2.pdf
http://www.sophphx.caltech.edu/Lab_Equipment/Tektronix_TDS1000_2000_User_Manual.pdf )

Fig 3 - Tektronix TDS 1001b

Dupa cum am prezentat de la inceputul capitolului osciloscopul este utilizat pentru vizualizarea
semnalelor, dar pentru aceasta e nevoie sa ne conectam la semnal cu o sonda (fig 4). Aceasta are
rolul de a transporta semnalul de la circuit la osciloscop.
Sonda are un varf metalic care trebuie conectat la punctul de unde dorim vizualizarea semnalului
si o un cleste (“crocodil”) in lateralul ei, avand rolul de masa (GND).

Fig 4 – Sonda analogica

Desi pare un dispozitiv extrem de simplu ce are ca rol doar transportul semnalului catre osciloscop,
design-ul sondei este unul complex. In cadrul acestui laborator nu se doreste o prezentare
amanuntita a sondei dar ar merita specificat faptul ca aceasta permita o atenuare o semnalului de

3
Lucrare de Laborator CD – Nr. 1

10 ori (datorata unei rezistente foarte mari, de 9MΩ care combinata cu rezistenta interna a
osciloscopului, 1MΩ creaza un divizor de tensiune 1/10) ceea ce permite o crestere a acuratetii
semnalului la frecvente foarte ridicate. In momentul in care alegem o atenuare a semnalului este
importanta si compensarea acestuia (in acest fel se modifica valoarea capacitatii sondei printr-un
condensator variabil incorporat in ea).

4.2 Analizorul Saleae

La fel ca si osciloscopul prezentat in subcapitolul anterior, analizorul Saleae (fig. 5) este utilizat
pentru achizitionarea semnalelor in vederea analizei. Spre deosebire de osciloscop, Saleae-ul nu
este capabil sa afiseze semnalele in timp real, acesta functioneaza doar pe baza de trigger si analiză
ulterioară a ceea ce s-a achizitionat.
Saleae-urile disponibile in laborator – cu 4 si 8 canale – permit vizualizarea atat a semnalelor
analogice cat si a celor digitale. La dispozitivul cu 8 canale toate canalele sunt configurabile
(analogic/digital), iar la cel cu 4 canale doar unul este configurabil, celelalte 3 fiind digitale. In
cazul digital amplitudinile semnalelor masurate au valori intre 1.8V si 5.5V iar in cazul analogic
nu sunt impuse valori ale amplitudinii semnalelor.

Fig 5 – Saleae conectat

Alte functii oferite de Saleae ar fi: masurare automata a frecventei/perioadei semnalului,


decodificare mesajului in functie de protocolul pe care se comunica sau in functie de tipul de
codare folosit, cautarea unei anumite secvente de semnal din intreg sirul de date, de salvare si
exportare a unei capturi.

4.3 Analizor de spectru de frecventa

Analizorul de spectru este folosit pentru monitorizarea spectrului radioelectic si masurarea puterii
componentelor spectrale. Acest dispozitiv afiseaza amplitudinea semnalelor in functie de frecventa
(fig. 6) fiind complementare osciloscoapelor care afiseaza amplitudinea semnalelor in functie de
timp.

4
Lucrare de Laborator CD – Nr. 1

Fig 6 – Display-ul unui analizor

In cadrul acestui laborator se va folosi analizorul de spectru HM5014 (fig 7) cu ajutorul caruia se
va capta un semnal RF, fie de la un generator se semnal RF fie de la un alt dispozitiv pus la
dispozitie de cadrul didactic. Se vor analiza principalii parametrii ai semnalului: frecventa
centrala, latimea de banda, puterea/amplitudinea etc.

Fig 7 – Analizor de spectru HM5014

Datasheet & user manual:


http://www.testequipmentdepot.com/hameg/pdf/hm5014-2_manu.pdf

5
Lucrare de Laborator CD – Nr. 1

5. Partea practica

A. Generati un semnal dreptunghiular cu ajutorul generatorului descris in capitolul 3, iar cu


dispozitivele de masurare evaluati principalii parametrii ai semnalelor descrisi in capitolul 2.

A= f= T= Factor de umplere =

B. Generati un semnal sinusoidal: A = 3 Vpp, f = 100kHz.

Generati un semnal triunghiular: A = 10 Vpp, f = 5MHz.

C. Transmiteti cu ajutorul unui dispozitiv RF (pus la dispozitie de cadrul didactic) un mesaj si


evaluati acest mesaj cu ajutorul analizorului de spectru.

Proiect

Proiectarea si simularea circuitelor folosind mediul Proteus


Mediul Proteus face parte din categoria programelor de tipul Electronic design automation (EDA),
acesta permite proiectarea si simularea de circuite atat la nivel HW cat SW simuland execuia
programelor intr-un mediu complet controlabil.

Mediul Proteus este alcatuit din urmatoarele componente majore:

Schematic Capture permite proiectarea si simularea de circuite, avand deja biblioteci si modele
pentru majoritatea componentelor electrice utilizate in industrie.

Microcontroller Simulation permite simularea comportamentului SW pe diferite arhitecturi de


microcontrollere (AVR, ARM, PIC, etc), aceasta componenta se comporta precum o masina
virtuala pentru arhitectura aleasa.

PCB Design permite proiectarea din punct de vedere al PCB-ului pentru realizarea fizica a
circuitului.

3D Verification permite verificarea circuitului realizat cu scopul proiectarii mecanice a produsului


finit.

In cadrul proiectului se vor folosi numai compmonentele de “Schematic Capture” si


“Microcontroller Simulation” acestea fiind suficente pentru exersarea notiunilor predate in cadrul
cursului si a laboratorului.

Mediul de dezvoltare este ilustrat in figura 8.

6
Lucrare de Laborator CD – Nr. 1

Fig 8 - Mediul de dezvoltare Proteus, componenta ISIS

Se observa urmatoarele caracteristici ale mediului de dezvoltare:

Zona de unelte (1) aceasta permite accesul la cursor, plasare de componente, conexiuni electrice
si aparate de masura virtuale.

Zona de componente si biblioteci (2) in aceasta zona se vor plasa componentele selectate de
utilizator pentru a facilita accesul reapid.

Zona de proiectare (3) reprezinta locul in care utilizatorul va adauga efectiv componentele pentru
circuitul realizat si va stabili conexiunea intre acestea.

Zona pentru controlul simularii (4) contine optiunile pentru pronirea si oprirea simularii
circuitului si a aplicatiei.

Pentru a va familiariza cu Proteus urmariti tutorialele urmatoare:


http://www.theengineeringprojects.com/2013/03/a-complete-tutorial-on-how-to-use-proteus-isis-
ares.html

https://www.youtube.com/watch?v=WYkTHvtrnLk

Bibliografie

[1] Documentatie TG120 Function Generator (Datasheet format pdf)


[2] Documentatie Tektronix TDS 1001b (Datasheet format pdf si manual de utilizare)
[3] I. Silea, Comunicatii de date (Note de curs)

7
Lucrare de Laborator CD – Nr. 2

Efectul mediului asupra semnalelor


1. Scopul lucrării

Justificarea deformării formei semnalului datorită caracteristicilor mediului, atunci când se propagă
prin acesta. Utilizarea diferitelor aparate de măsură și deprinderea studenților cu interpretarea
graficelor și a parametrilor formelor de undă.

2. Breviar teoretic

Un semnal care parcurge un mediu fizic își modifică amplitudinea și forma chiar dacă nu există
perturbații care să se suprapună peste semnalul ce trece prin mediu. Acest lucru se datorează
parametrilor electrici (rezistența R, conductanța G, capacitatea C și inductanța L) care au valori ce
depind de calitatea materialelor mediului și care cresc odată cu lungimea traseului (aspecte ce sunt
tratate la electrotehnică în teoria liniilor lungi). Valorile acestor parametri sunt date în cataloagele
producătorilor raportat la unitatea de lungime (de ex. 0.2x10-5 Ohm/m, 5x10-8pF/m). Mediul se
comportă, datorită acelor parametri, ca un filtru care nu permite trecera anumitor frecvențe componente
ale semnalului. Fenomenul este foarte evident la transmiterea semnalelor digitale și de aceea în această
lucrare analizăm un astfel de semnal.
Explicarea fenomenelor se bazează pe cunoștințe de teoria sistemelor, prezentate sintetic în
continuare: un conductor electric este un sistem (Fig.1) care are o funcție de transfer H(s) determinată
cu un stimul aplicat la intrare u(t) si răspunsul la ieșire y(t) (de exemplu, utilizând metoda legilor lui
Kirchhoff sau altă metodă de rezolvare a problemelor de circuite) și ne propunem să calculăm
răspunsul y(t) al circuitului la acțiunea la intrare a lui u(t) atunci când cunoaștem funcția de transfer
H(s).

Fig.1

Avem două situații de funcționare a mediului la transmiterea datelor:


a) prin transmiterea unor semnale sinusoidale, situație cunoscută ca funcționare în regim armonic
permanent și
b) prin transmiterea unor trepte de tensiune sau a unor impulsuri (tren de impulsuri) rectangulare,
situație cunoscută ca funcționare în regim tranzitoriu.
Pentru studiul celor două situații noi vom aproxima comportarea mediului (cablul de o anumită
lungime) cu cea a unui filtru trece jos, realizat cu componente R (rezistență) și C (condensator),
comprimând (în fapt) parametri distribuiți.
Lucrare de Laborator CD – Nr. 2

Fig. 2

În ambele cazuri de funcționare, amintite mai sus, ne interesează cum arată semnalul la ieșire, adică
determinarea răspunsului sistemului la un anumit semnal de intrare. Mai întâi avem nevoie de funcția
de transfer și dat fiind că avem un sistem la care putem scrie legile după care funcționează putem
determina modelul analitic (în caz contrar eram nevoiți să determinăm prin încercări experimentale
răspunsul sistemului și apoi să identificăm modelul matematic împreună cu parametrii aferenți).

Așadar funcția de transfer H(jω) se calculează plecând de la circuitul echivalent în complex (fig. 3):
Y=Zc/(Zc+ZR).U ═> H(jω)=1/(1+jω.R.C) sau notând ω0=1/R.C (pulsația de tăiere), se obține
H(jω)=1/(1+jω/ ω0) cu modulul ‫׀‬H(jω)‫=׀‬1/[(1+(ω/ ω0)2]1/2 și faza φH=φnumărător-φnumitor= arctg(0/1)-
arctg[(ω/ ω0)/1]= -arctg(ω/ ω0).
(Relațiile de mai sus, precum și altele care apar în lucrare- vezi fig. 6-au fost deduse în detaliu nu
numai la TS, ci si la diferite discipline de matematică).

Fig. 3
Pentru a reprezenta grafic modulul și faza, le calculăm pentru valorile lui ω egal cu: ω =0, ω =∞ și ω
=ω0. Graficul modulului ne arată atenuarea semnalelor sinusiodale cu diferite frecvențe, iar cel al fazei
ne arată întârzierile (defazajul) undei la respectivele frecvențe.
Lucrare de Laborator CD – Nr. 2

a) Regimul armonic permanent (fig. 4).

Fig. 4
Observăm că prin aplicarea unor semnale sinusoidale, atunci când frecvența este mare (perioada mică),
amplitudinea la ieșire este mai mică, iar semnalul este mai defazat față de cel de la intrare. Dacă
frecvența crește peste ω0 =1/R.C (pulsația de tăiere), atunci aceste componente nu mai trec (nu se mai
propagă) prin mediu.
Un semnal periodic de tip impulsuri rectangulare se compune dintr-o infinitate de sinusoide (sau
cosinusoide), lucru ușor de dovedit prin utilizarea teoriei seriei Fourier. Prin mediu, doar o parte din
aceste frecvențe se pot propaga, acest fapt conducând la distorsionarea semnalului care ajunge la
receptor.

b) Regimul tranzitoriu
În situația în care semnalele ui=u(t) și ue=y(t) sunt cauzale, circuitul funcționează în regim tranzitoriu și
pentru studiul comportării în regim tranzitoriu se utilizează transformata Laplace.Vom nota cu Y(s)
transformata Laplace a semnalului y(t) de la ieșire și cu U(s) transformata Laplace a semnalului de
intrare u(t) . Metodologia de calcul a răspunsului y(t) la excitația u(t) aplicată la intrare, pentru un
circuit/system, este următoarea:
- determinarea lui U(s) din u(t) , folosind transformata Laplace directă.
- determinarea lui Y(s) , folosind relația Y(s) = H(s) U(s) .
- determinarea lui y(t) din Y(s) , folosind transformata Laplace inversă.
Să vedem răspunsul circuitului din fig. 3, a cărui funcție de transfer o avem, la un semnal u(t) de tip
impuls rectangular. Acest impuls arată ca în fig. 5 și este decris matematic de relația: u1(t)=A[u(t)-
u(t+τ)].

Fig. 5 Fig. 6
Folosind Laplace rezultă ecuațiile din fig. 6, aloarea lui α fiind egală cu ω/ ω0.
Reprezentând grafic (sunt de fapt răspunsurile la două semnale treaptă și aplicarea principiului
superpoziției) vom obține (fig. 6):
Lucrare de Laborator CD – Nr. 2

Fig. 6
Un astfel de răspuns se poate obține direct în domeniul timp scriind legea a 2-a a lui Kirchhoff
R.i(t)+1/Cʃi(t)dt=u(t) și căutând soluția.

3. Partea practică

Experimente cu componente fizice:


- realizarea montajului din fig. 7

Fig. 7
- calcularea pulsației și frecvenței de tăiere (ft) pentru R și C date în montaj
- efectuarea experimentelor descries mai jos.
La intrarea circuitului se aplică de la generator un semnal sinusoidal cu amplitudine de 1V, și
componenta continuă 0V. Frecvența semnalului sinusoidal trebuie să fie egală cu valorile specificate în
tabelul 1.
Osciloscopul trebuie pus in modul de lucru dual pentru a putea vedea simultan semnalul de intrare si
cel de iesire. In tabelul 1 se vor trece valorile amplitudinii semnalului de iesire, si ale defazajului care
apare intre semnalul de iesire si cel de intrare.
Sondele atât cea de la generator, cât și cea de la osciloscop se conectează respectând borna care
reprezintă borna de semnal (firul cald), respectiv borna care reprezintă borna de masă.

Tabelul 1.

Frecv generator ft/10 ft /4 ft /2 ft 2ft 4ft 10ft


Amplit. iesire
Faza φ
Lucrare de Laborator CD – Nr. 2

Concluzii in urma măsurătorilor:


__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________
__________________________________________________________________________________

Din măsurătorile efectuate se poate observa că circuitul se comportă ca și un filtru trece jos: semnalele
de intrare care au frecvența în banda de trecere (f<ft) trec fără a fi atenuate sau defazate, în timp ce cele
aflate în afara benzii de trecere (f>ft) sunt defazate cu -π/2.

Se introduc apoi la intrare trenuri de impulsuri rectangulare modificându-se perioada și lățimea


impusurilor. Se vor desena pe hârtie și se vor comenta formele de undă ce apar pe cele două canale de
măsură ale osciloscopului.

Dacă se dispune de un analizor de spectru se vor vizualiza spectrele semnalului înainte (la ieșirea
generatorului) și după trecerea prin circuitul RC (la ieșirea montajului). Se consemnează frecvențele
care sunt atenuate.

4. Proiect

Experimente prin simulare:


a). Cu ajutorul mediului de simulare Proteus realizați o schemă a unui bloc care să permită simularea
experimentului prezentat mai sus (fig. 7) și salvați într-un fișier schema de simulare și semnalele
vizualizate ca urmare a simulărilor si comparati aceste rezultate cu cele obtinute in cadrul laboratorului
(componente fizice).
b). Reluati pasii de la punctul a). pentru un Filtru trece sus si un Filtru trece banda.

Bibliografie
1. Curs de Teoria sistemelor (prof. T. Dragomir)
2. Cursuri de matematici
3. Note de curs de Comunicații de date (I. Silea)
TRANSMISIA SERIALA. Dispozitive UART/USART
1. INTRODUCERE

1.1 Scopul lucrarii


Scopul lucrării de laborator este acela de a familiariza studenții cu aspectele practice de bază pentru
utilizarea în aplicații a comunicației de date folosind transmisia serială bazată pe dispozitive de tip
UART/USART (Universal Asynchronous Receiver Transmitter/ Universal Synchronous-
Asynchronous Receiver Transmitter). Astfel de dispozitive sunt intergrate în structuri de tip SoC
(System on Chip).
1.2 Utilizarea magistralei RS232
Principiul de funtionare, logica de transmisie au ramas aceleași chiar dacă dispozitivele recente sunt
apte să lucreze pe 16, 32 sau 64 de biți și sunt părți componente ale microcontrollerelor/procesoarelor
de ultimă oră, putând fi programate pe baza unui sistem de registre mai complex.

2. BREVIER TEORETIC

2.1 Comunicația serială vs paralelă


Într-un sistem de comunicație digital, transmisia datelor se poate face în 2 moduri: serial și paralel.
Dacă în primul mod datele se transmit pe un singur fir, bit cu bit, în cel de-al doilea mod, cel paralel,
datele se pot transmite pe mai multe fire, in paralel (informația este transmisă simultan pe mai multe
fire).

Fig 1 – Comunicația paralelă vs serială

Diferențele între cele 2 tipuri de transmisie sunt prezentate în următorul tabel:


Caracteristicile Transmisie serială Transmisie paralelă
transmisiei
Descriere Transmisie bit cu bit Mai mulți biți transmiși simultan
Viteza de transmisie Scăzută Ridicată
Distanța de Relativ ridicată Scazută
transmisie
Aplicabilitate Comunicația între microcontroller-e Circuite integrate
Rețele de calculatoare Memorii (RAM)
Mediul de transmisie Un singur canal pe care sunt Biții transmiși simultan pe mai
transmisi biții, unul câte unul multe linii/canale paralele

2.2 Diferențe între UART și USART


Deși adesea noțiuniile sunt confundate între ele, modulele UART și USART diferă prin prezența sau
absența semnalului de tact (clock) pentru sincronizarea între circuite. Prin semnalul de tact se poate
realiza, în cazul USART-ului, transimisa numai a datelor utile fără a mai fi nevoie de date auxiliare
transmise pe lângă, date precum Start bit, Parity bit etc. Din punct de vedere operațional orice circuit
USART poate să funcționeze și în modul asincron.
Comparând cele două moduri ajungem la următorul tabel de diferențe:
UART USART (Mod sincron)
Are nevoie doar de linia de date Are nevoie de linia de date și de o sursă de
tact/clock
Rata de transimisie a datelor poate varia Rata de transmisie a datelor este fixă
Comunicație full duplex Comunicație half duplex
Viteza de transfer maximă este în jurul a Permite viteze mai mari de transfer
115200 bps

Endianness (Big and Little Endian)


Endianness-ul se referă la ordinea octețiilor atât în memorie cât și în transmisia de date. Distingem
două abordari:
1) Big endian, adesea denumit format Motorola, în cadrul căruia cel mai semnificativ octet (MSB)
este stocat sau transmis primul.
2) Little Endian, denumit și format Intel, în cadrul căruia cel mai puțin semnificativ octet (LSB)
este stocat sau transmis primul.
Iulstrarea celor două concepte se regăsește în Fig 2
Fig 2 Diferența între little și big endian

La ora actuală nu s-a impus niciuna dintre abordări în detrimentul celeilalte astfel că, în practică, pot
apărea probleme la conectarea diferitelor circuite - în cazul în care nu se ține cont de oridinea cerută de
către producator.
2.3 Aspecte generale despre comunicații prin RS232
Un sistem de comunicaţii de date are urmatoarele parţi componente:
Sursa - echipamentul care generează datele; Destinaţia - echipamentul care primeşte datele;
Canalul de comunicaţie (mediul prin care se trimit datele/semnalele).
Echipamentul sursă poate fi uneori şi receptor, sau invers. Din acest punct de vedere avem
urmatoarele tipuri de transmisii:
1. Transmisia simplex. Pe canal, datele se transmit într un singur sens. Exemplu: transmisia Radio
TV clasica.
2. Transmisia duplex (sau full duplex). Pe canal, datele se transmit concomitent în ambele sensuri.
Echipamentele sînt concomitent sursa şi receptor. Exemplu: telefonie, reţele de calculatoare.
3. Transmisia semiduplex (sau half duplex). Pe canal, datele se transmit în ambele sensuri, dar nu
concomitent, ci în intervale de timp distincte. Exemplu: interfoane, staţii radio mobile.
Un model general a unui sistem de comunicaţii de date este aşa numitul sistem de comunicaţii cu 7
parţi (Fig.3).

1 2 3 5 6 7
4
DTE DCE DCE DTE
Fig.3
Unde:
1,7 - DTE (Data Terminal Equipment) este un terminal de comunicaţii de date (calculator)
3,5 - DCE (Data Communication Equipment) este un modem – un echipament de conectare la linie
2,6 - sînt interfeţele dintre DTE şi DCE.
Prin interfaţă înţelegem o specificaţie, un standard, prin care sînt definite caracteristicile mecanice,
electrice şi logice prin care două echipamente se interconectează. În sens mai larg, adesea, prin
interfaţă se înţelege dispozitivul hardware care implementează funcţionalitaţile definite anterior.
4 - este canalul/linia de comunicaţie.
Ne propunem, în continuare, sa prezentăm pe scurt interfaţa serială standardizată sub acronimul
RS232. Standardul a fost elaborat iniţial în SUA de catre organismul EIA (Electronic Industry
Association). Ulterior, el a fost adoptat şi în Europa, sub denumirea V24, de către CCITT.
Un exemplu de comunicație RS232 este ilustrat (Fig. 4), iar semnificațiile funcționale pentru DCE și
DTE se găsesc în Tabelul de mai jos (NU trebuie memorate pentru examen aceste informații; ele sunt
prezentate pentru a înțelege complexitatea realizării fizice a schimbului de date):

Fig. 4 Comunicație RS232


Tabel cu numărul circuitului conform CCITT, semnificația, destinația/sursa, alocarea la pinii cuplei
DB-25 pentru DCE și pentru DTE.
Nivelele de tensiune sunt: - 25V ÷ - 3V pentru “1” logic şi + 3V ÷ + 25V pentru “0” logic. Tipic se
utilizează tensiuni de +/-12 V și adaptoare de nivel (circuite MAX232).

Fig. 5 Nivelele de tensiune și valorile logice asociate


2.4 Structura USART 8251.
O schemă bloc și o implementare (utilizare) hardware este redată în fig. 6 a), respectiv fig. 6 b):

Fig. 6 a)
Fig. 6 b)
Interfața permite transferul sincron sau asincron. Formatul datelor în transferul asincron este (fig.7):

Fig. 7
Caracteristici: Sincronizare la nivel de caracter prin bitul START, 5 – 8 biţi de date, bit de paritate
(opţional) și 1, 1.5 sau2 biţi de STOP.
Informația între procesor (microcontroler) și 8251 se schimbă pe baza unor registre tampoan pentru
recepție și emisie. Structura lor este conform fig. 8.

Fig.8

Recepţia: Pentru creşterea vitezei, a fost implementat conceptul de suprapunere (fig. 9).
Fig. 9 Suprapunerea la receptie.

 Tamponul pentru recepţie este alcătuit din 2 registre, RA şi RB;


 Datele sunt preluate de pe linia serială în registrul RB, se elimină informaţia de cadrare,
şi, după asamblarea unui caracter, acesta este transferat în registrul RA şi, simultan, este
activat terminalul RXRDY şi rangul cu acelaşi nume din registrul de stare.
 Prin acest semnal, circuitul anunţă microprocesorul că are un caracter asamblat pe care
poate să i – l ofere.
 Microprocesorul va trebui să preia conţinutul registrului RA în timpul cât se asamblează
un nou caracter în registrul RB.
 Dacă nu este îndeplinită această cerinţă, vechiul caracter se pierde, întrucât în RB se va
transfera noul caracter şi circuitul va detecta eroare de ritm şi va poziţiona un rang din
registrul de stare, anunţând astfel exteriorul că a aparut această eroare.
 În acest fel, s – a realizat suprapunerea între timpul necesar preluarii şi asamblarii unui
caracter de pe linia serială cu timpul necesar citirii caracterului asamblat de către
microprocesor.
 Semnalul RXRDY este dezactivat doar de un semnal activ pe linia /RD, ceea ce
corespunde unei citiri din partea microprocesorului.
Emisia:
 Suprapunerea este ilustrată în fig.10.

Fig. 10
 Tamponul pentru transmisie este alcătuit din 2 registre, TA şi TB (vezi fig.5).
 Unitatea centrală încarcă un caracter în registrul TA, circuitul îl transferă în registrul
TB, de unde caracterul este serializat şi transmis pe linie.
 După transferul conţinutului registrului TA în TB, circuitul activează semnalul TXRDY
comunicând microprocesorului că poate prelua un nou caracter.
 Simultan este activat şi rangul cu acelaşi nume din registrul de stare.
 Dezactivarea terminalului TXRDY se face de primul front al semnalului /WR care
corespunde operaţiei de scriere a unui nou caracter de către microprocesor.
 Terminalul TXRDY este activat la îndeplinirea condiţiilor descrise mai sus doar dacă
transmisia poate avea loc, adică rangul TXE din cuvântul de comandă este 1 şi
terminalul /CTS = 0;
 De remarcat că rangul TXRDY din registrul de stare este activat indiferent de starea
rangului TXE şi a terminalului /CTS.
 Terminalul TXE este activat atunci când caracterul din TB a fost serializat şi transmis,
indicând microprocesorului că tamponul de transmisie este gol.
 Dacă microprocesorul nu scrie o nouă dată în registrul TA, până când circuitul a
terminat de serializat caracterul din TB, acesta va detecta eroare de ritm la transmisie şi
va poziţiona rangul corespunzător din registrul de stare.
 De remarcat că eroarea de ritm la recepţie este distructivă, în sensul că se pierd
caractere, pe când la transmisie nu este distructivă, provocând doar scăderea vitezei
transmisiei.
 Semnalele TxRDY şi RxRDY pot fi surse de cereri de întrerupere.
Exemple de conexiuni/legături fizice pentru a realiza schimbul de date (nu este trecut și numărul
pinului):

Fig. 11 Conexiune cu protocol hardware folosind RDS/CTS și DTR/DSR


O astfel de conexiune permite transfer sincron și/sau asincron de date între cele două sisteme.
Fig. 12 Conexiune cu număr minim de fire pentru protocol soft X-ON/X-OFF
Conexiunea din fig. 12 permite doar transfer asincron de date între cele două sisteme.

Programarea circuitului se face pe baza unei logici illustrate în fig.13.

Fig.13

Structura cuvântului de mod pentru transmisie asincronă este: cea din fig. 14, cuvântul de comandă
este în fig.15, iar cuvântul de stare în fig. 16.
Fig.14

Fig. 15

Fig.16
Utilizarea în cadrul proiectelor de electronică industrială şi comunicații a numeroase componente
comune precum: Microcontroller (uC), LCD, EEPROM, RAM, Real Time Clock, Convertoare analog-
numerice sau numeric-analogice, diferiți senzori (de temperatură, de presiune etc.) a determinat
necesitatea dezvoltării acestei interfețe, sub forma unor noi circuite.
EXEMPLU DE IMPLEMENTARE
Pentru schema din fig. 5 b) să se realizeze o interfaţa serială cu circuitul 8251, conectată la o unitate
centrală ....., transferul facându–se prin program. Datele iniţiale ale transferului sunt: 8 biţi de date, fară
paritate, 2 biţi de STOP, factor de multiplicare 16, Rata de transfer: 9600 bps.
Sunt relevante:
 Rutina de programare a circuitului specializat,
 Rutinele de emisie şi recepţie.
Rezolvare:
Adresele de port: 00H pentru date şi 02H pentru comenzi/ stari;
 Rutina de programare:
MOV AL,0CEH ; cuvânt de mod
OUT 02H,AL
MOV AL,15H ; cuvânt de comanda
OUT 02H,AL
 Rutina de emitere caracter:
Emite: IN AL,02H ; citire şi testare rang TxRDY din cuvântul de stare
RCR AL,1
JNC Emite
MOV AL,CL ; se preia data din registrul CL
OUT 00H,AL
RET
 Rutina de recepţie caracter:
Recept: IN AL,02H ; citire şi testare rang RxRDY din cuvântul de stare
RCR AL,2
JNC Recept
IN AL,00H ; se preia data de la 8251
MOV CL,AL ; se depune data în registrul CL
RET
2.4 Structura USART a microcontroller-ului Atmega328p.
USART-ul prezent pe microcontroller-ul ATMEGA328P prezintă următoarele caracteristici:
- Operare Full Duplex (Independent Serial Receive and Transmit Registers)
- Operare în mod sincron și/sau asincron
- Suportă cadre cu 5, 6, 7, 8, sau 9 biți de date și 1 sau 2 biți de stop
- Generarea și verificarea din hardware a bitului de paritate
- Detectia de “OverRun” la nivel de date
- Detecția erorilor de format
- Filtrarea automată a zgomotelor (include detecția de biți falși de start și un filtru trece jos)
O schemă bloc este redată în fig. 17 și o implementare (utilizare) descrisă în continuare.
Fig. 17
Se observă trei zone principale: a) Generatorul de tact; b) Emițătorul; c) Receptorul.
Schema bloc a generatorului de tact este ilustrat în fig. 18.
Unde semnalele au semnificația următoare:

Generatorul de tact are scopul de a genera tactul pentru transmisie și receptie și poate fi configurat
în modurile: asincron normal, asincron double speed, sincron master și sincron slave.
In modurile asincrone și sincron master generatorul fi cel care determină baud rate-ul, setarea
registrului aferent se face confrom cu următoarea formulă (vezi în tabelul ce urmează):

Formatul datelor în transferul asincron este (fig.19):

Fig.19
Pentru transferul sincron se poate alege, funcție de aplicație, ca citirea și scrierea să se facă pe front
urcător sau pe front coborâtor al semnalului de clock. Modul de operare sincron este ilustrat in fig. 20.

Fig.20
Dacă este nevoie de utilizarea unui bit de paritate acesta se poate să fie par sau impar și se definește
prin operația de ”sau” pe biți de date:

Pentru a avea loc citirea și scrierea de date perifericul de USART trebuie inițializat. Un exemplu de
inițializare este următorul:

Pentru a asigura transmisia sau recepția tuturor datelor se poate proceda în două moduri polling sau
întrerupere. Pentru citirea prin polling pașii ce trebuie urmați sunt descriși în diagrama din fig. 21 a) de
mai jos.

Fig. 21
Diagrama se ”traduce” în cod în felul următor:
Pentru scrierea datelor și verificarea scrierii prin polling, pașii ce trebuie urmați sunt descriși în
diagrama din fig. 21 b). Diagrama se ”traduce” în cod în felul urmator:

Detecția de erori se face prin intermediul registrului UCSRnA, astfel se pot determina erori de paritate,
suprapuneri de date și erori de format.
Documentația completă a microcontroller-ului Atmega 328p se găsește la următorul link:
http://www.atmel.com/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-
328P_datasheet.pdf

3.PARTE PRACTICĂ
1. Considerând transmisia serială asincronă să se deseneze diagrama de timp pentru transmisia
codului ASCII pentru caracterele A, Q având următoarele caracteristici:
a) 8 biți de date, 1 stop bit, fără bit de paritate
b) 8 biți de date, 1 stop bit, paritate even
2. Folosind placa de dezvoltare Arduino sau simularea în mediul Proteus să se realizeze
transmisia/recepția de mesaje pe interfața USART prin polling și prin întrerupere.

4.TEMĂ PROIECT

Să se realizeze în mediul Proteus comunicația serială între 2 microcontrolere Arduino328p în modul


asincron și sincron.
Să se realizeze în mediul Proteus comunicația RS232 folosind circuitul MAX232, înregistrând
secvența de date și nivelele de tensiune.

BIBLIOGRAFIE
1. Documentație Interfața USART 8251 (…).
2. Documentație circuite 8253, Max 232, 74LS138.
3. Documentatie Atmega328p
4. Proiectarea microsistemelor digitale - Note de curs (M. Popa)
OBSERVAȚII
(i) - La examinarea de final de curs NU este nevoie ca studenţii să memoreze poziţia fiecărui bit de
programare. Întrebarea de la test va fi asociată cu un text care va conţine toate datele necesare rezolvării.
(ii)- Nu se poate proiecta o aplicaţie cu datele furnizate de acest material, pentru că materialul este
didactic şi nu conţine detalii privind variaţia în timp a semnalelor, valorile lor logice în care semnalele
sunt active, alocarea la pini etc. Pentru proiectare este nevoie de consultarea foilor de catalog.
Lucrare de laborator CD – Nr. 4

CONCEPTUL DE MAGISTRALĂ I 2 C
1. INTRODUCERE
1.1. SCOPUL LUCRĂRII
Scopul lucrării de laborator este acela de a f amiliariza studenții cu aspectele practice de
bază pentru utilizarea în aplicații a comunicației de date folosind i nterfața I2C.

1.2. UTILIZĂRILE MAGISTRALEI I 2 C


Magistrala I2C a fost dezvoltată de compania Phillips Semiconductors și reprezintă o magistrală de date
serială formată din două linii, una de ceas (SCL) și una de date (SDA sau SDL), folosite pentru comunicația între
microcontrolere sau între un microcontroler și alte dispozitive ce dispun de această interfață. Acest standard este
implementat în peste 1000 circuite integrate realizate de mai mult de 50 dintre marile companii de pe piață.
Utilizarea în cadrul proiectelor de electronică industrială şi comunicații a numeroase componente comune
precum: Microcontroller (uC), LCD, EEPROM, RAM, Real Time Clock, Convertoare analog-numerice sau
numeric-analogice, diferiți senzori (de temperatură, de presiune etc.) a determinat necesitatea dezvoltării acestei
interfețe.
Nodurile care comunică pe această magistrală trebuie să aibă definit același tip de protocol (cel standard) și
același nivel de tensiune (poate fi vorba, în general, despre 3.3V sau 5V, dar sunt acceptate și alte nivele de
tensiune). Dispozitivele prezente în rețea pot fi de două tipuri, nod master sau nod slave.

Figura 1-1. Magistrala I2C – structura generală


Numărul de module dintr-o rețea I2C este limitat deoarece fiecare dispozitiv poate comunica folosindu-se de
o adresă. În cazul general, adresarea se face pe 7 biți. Un exemplu al magistralei este prezentat în Figura 1-1.

2. BREVIAR TEORETIC - PROTOCOLUL DE TRANSFER PE


MAGISTRALA I 2 C

2.1 B ITUL DE S TART . B ITUL DE S TOP .


Comunicația este inițiată de condiția de START în care linia de date este coborâtă cât timp linia de ceas este
ridicată și apoi nodul „master” trimite cei 7 biți ce corespund adresei nodului „slave” urmați de-al 8-lea bit, cel
mai nesemnificativ, ce definește comanda de citire (1) sau scriere (0) ce urmează a fi realizată. Comunicația este
încheiată prin condiția de STOP în care linia de date este ridicată cât timp linia de ceas este ridicată - după
transferul în orice sens a unui octet și a bitului de confirmare (setat sau nu).Condiția de START(S) și cea de
STOP(P) pot fi văzute în Figura 2-1.
Trimiterea acestor biți ce definesc începutul și sfârșitul transferului de date este obligatorie pentru respectarea
protocolului definit în standard.

Figura 2-1. Bitul de START al comunicației pe magistrală


2.2 T RANSFERUL DE DATE .
Transferul de date are loc după trimiterea condiției de START. În timpul perioadei în care linia de ceas (SCL)
are valoarea “1” logic linia de date (SDA) rămâne stabilă. Modificarea liniei de date are loc doar în cazul în care
linia de ceas are valoarea “0”. Pentru fiecare bit de date transferat este generat un impuls al liniei de ceas.

Figura 2-2-1. Transferul de date – condiții de funcționare la nivel de bit

În cazul în care în locul condiției de STOP este trimisă o condiție de START repetată, transferul de date
continuă după aceleași reguli. Condiția de STOP va fi trimisă după ultimul bit de date din cadrul transferului.
Fiecare octet care este transmis în cadrul transferului de date trebuie să înceapă cu cel mai semnificativ bit –
după ce acesta este transferat de către nodul master, este necesar un semnal de confirmare al recepţiei de către
nodul slave printr-un bit de confirmare (ACK). În cazul în care nodul slave va răspunde cu un octet, nodul master
va trebui să trimită un bit de confirmare (ACK). Dacă doi octeți sunt transmiși în cadrul aceluiași transfer linia de
ceas este ținută pe “0” logic pentru o perioadă scurtă de timp necesară nodului slave pentru a trimite toți cei 8 biți
de date.

Figura 2-2-2. Transferul de date – condiții de funcționare la nivel de octet. Bitul de confirmare.

2.3 B ITUL DE CONFIRMARE .


Bitul de confirmare (ACK) este prezent după fiecare octet de date – confirmă că octetul a fost primit în
întregime și că este posibilă trimiterea unui nou octet de date. Transmiterea bitului de confirmare are loc în
următorul mod : transmițătorul încetează să mai transmită date în timpul impulsului de ceas corespunzător bitului
de confirmare iar receptorul va menține linia de date pe “0” logic cât timp linia de ceas este “1” logic.
În cazul în care linia de date este “1” logic pe durata impulsului de ceas corespunzător bitului de neconfirmare
se consideră cazul de neconfirmare (NACK). Există 5 posibilități de a ajunge în cazul de neconfirmare :

1) În cadrul magistralei nu există nodul slave adresat care ar fi trebuit să trimită bitul de confirmare.
2) Nodul slave nu poate primi sau transmite date deoarece execută alte funcții în timp real.
3) În timpul transferului de date, nodul primește date sau comenzi pe care acesta nu le cunoaște.
4) În timpul transferului de date, nodul nu mai poate primi alți biți de date.
5) Nodul master receptor trebuie să semnaleze sfârșitul transferului de date nodului slave transmițător.

Figura 2-3. Bitul de confirmare. Cazul de neconfirmare.

2
2.4 S INCRONIZAREA LINIEI DE CEAS .
În cazul în care mai multe noduri de tip master sunt prezente pe aceeași magistrală I2C, sincronizarea liniei
de ceas are loc în următorul mod :
- Un nod de tip master trage linia de ceas pe valoarea “0” logic;
- Linia de ceas rămâne pe valoarea “0” logic atât timp cât există cel puțin un nod master care o menține în
acea stare;
- După ce toate nodurile de tip master au contorizat trecerea prin această stare, linia de ceas revine la
valoarea “1” logic;
- Primul nod master care va contoriza starea de “1” logic va trage linia de ceas înapoi pe “0” logic;
- În acest mod, sincronizarea liniei de ceas este realizată prin trecerea liniei de ceas pe valoarea “0” logic
pe o durată determinată de nodul master care contorizează cel mai lent această stare și trecerea liniei de
ceas pe valoarea “1” logic pe o durată determinată de nodul master care contorizează cel mai rapid această
stare.

Figura 2-4. Sincronizarea liniei de ceas.

2.5 A RBITRAJUL NODURILOR DE TIP MASTER .


Ca și în cazul sincronizării liniei de ceas, acest paragraf descrie cazul în care în cadrul magistralei există mai
multe noduri de tip master. Nodurile de tip slave nu sunt implicate în cadrul arbitrajului.
În cazul în care două noduri de tip master generează o condiție de START simultan este necesar un arbitraj
pentru a stabili care dintre noduri va duce transferul de date la final. Arbitrajul are loc în cadrul fiecărui bit : dacă
la un anumit moment de timp unul dintre noduri încearcă trimiterea valorii 1 logic iar celălalt nod trimite valoarea
0 logic nodul care a încercat trimiterea valorii 1 logic va pierde arbitrajul. Celălalt nod master va duce transferul
de date la final.
Nu este pierdut nici un bit de date în urma arbitrajului dar, nodul ce pierde arbitrajul trebuie să aștepte
eliberarea liniei de ceas pentru a relua transferul de date.
În cazul în care un nod este atât de tip master cât și de tip slave, pierde arbitrajul și este adresat de către nodul
master ce câștigă arbitrajul, acesta va funcționa ca nod de tip slave.

Figura 2-5. Arbitrajul între nodurile de tip master.

3
Totuși, există cazuri în care se poate ajunge la condiții nedefinite :
- Dacă master1 trimite o condiție de START repetat și master2 trimite un bit de date
- Dacă master1 trimite o condiție de STOP şi master2 trimite un bit de date
- Dacă master1 trimite o condiție de START repetat și master2 trimite o condiție de STOP.

2.6 A LTE ASPECTE


Transferurile de date posibile sunt :
- Între un nod master și un nod slave în care nodul master trimite un octet de date și nodul slave trimite un
bit de recunoaștere;

- Între un nod master și un nod slave în care nodul master citește direct după ce acesta trimite adresa
nodului slave și bitul de citire;

- O combinație în orice mod a cazurilor anterioare.

3. EXEMPLU DE IMPLEMENTARE

3.1. C OMPONENTE NECESARE .


- 2 x Arduino UNO;
- 2 Fire pentru realizarea legăturii folosind interfața I2C (pinii A4 - SDA și A5 - SCL);
- 1 Fir pentru realizarea legăturii între liniile de masă ale celor 2 module (masă comună);
- Librăria „Wire.h” disponibilă online.
-
-
-
-
-
-
-
-
-
-
-
-
-
Figura 3-1-1. Legătura între Arduino MASTER și Arduino SLAVE folosind I2C (real).

4
Figura 3-1-2. Legătura între Arduino MASTER și Arduino SLAVE folosind I2C (schematic).

3.2. M ODALITATE DE UTILIZARE A MAGISTRALEI I 2 C.


În cazul în care se dorește transmiterea informației între două Arduino în cadrul unui proiect, o metodă utilă
și rapidă este reprezentată de utilizarea magistralei I2C. Conexiunea între două module Arduino UNO arată exact
ca și în Fig. 3-1-1.
Exemplul prezentat are următoarele funcții :
- Nodul master trimite nodului slave valori de la 0 la 5, secvențial cu frecvența de 2Hz;
- În cazul în care nodul master trimite nodului slave valoarea 0 în cadrul liniei de date a magistralei I2C –
la recepția valorii, nodul slave va comanda schimbarea stării ledului acestuia la frecvența de 5Hz până la
recepția următoarei valori;
- În cazul în care nodul master trimite nodului slave valoarea 3 în cadrul liniei de date a magistralei I2C –
la recepția valorii, nodul slave va comanda schimbarea stării ledului acestuia la frecvența de 2.5Hz până
la recepția următoarei valori;
- În momentul în care nodul master va trimite valoarea 5 următoaea valoare trimisă pe linia de date va fi
0. (Toate valorile reprezintă octetul de date).

3.3. C ODUL AFERENT NODULUI M ASTER


#include <Wire.h>

int x = 0;

void setup() {
Wire.begin(); // Pornire nod master în cadrul magistralei
}

void loop() {
Wire.beginTransmission(9); // Adresarea nodului slave cu adresa 9
Wire.write(x); // Trimiterea octetului de date
Wire.endTransmission(); // Trimiterea condiției de STOP
x++; // Incrementarea valorii ce urmează a fi
// trimisă

5
if (x > 5) // Resetarea valorii la 0 după ce a fost
// trimisă valoarea 5
delay(500);
}

3.4. C ODUL AFERENT NODULUI S LAVE


#include <Wire.h>

int LED = 13;


int x = 0;

void setup() {
pinMode (LED, OUTPUT); // Setarea pinului de led ca output
Wire.begin(9); // Pornire nod slave cu adresa 9
Wire.onReceive(receiveEvent); // Definirea unui trigger în cazul recepției
// de informație de pe linia de date
}
void receiveEvent(int bytes) {
x = Wire.read(); // Citirea unui octet de pe linia de date a
// magistralei
}
void loop() {
if (x == '0') { // Dacă valoarea este 0, ledul va pâlpâi de 2
// ori până la recepția următoarei valori
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(200);
}
if (x == '3') { // Dacă valoarea este 3, ledul va pâlpâi o
// singură data până la recepția următoarei
// valori
digitalWrite(LED, HIGH);
delay(400);
digitalWrite(LED, LOW);
delay(400);
}

4. PARTEA PRACTICĂ

4.1. I MPLEMENTARE H ARDWARE


Pentru exemplul prezentat la punctul 3 grupuri de câte 2 studenți studiază documentația
modulelor Arduino și realizează montaj ul hardware , apoi se
scrie/compilează/testează/ încarcă codul programelor software și se ur mărește funcționarea.
În li mita ti mpului se pot concepe și alte pr ograme pentru transmi tere informații între cele
două module.
Validarea efectuării acestei părți a lucrării de laborator se face de către cadrul didactic care
coordonează laborator ul.

4.2. I NTERPRETARE SEMNALE

Cadrul didactic c oordonator al laboratorului, prezintă studenților modulele Saleae pentru


vi zuali zarea transferur ilor de date și modul de utilizare al acestora.

6
Folosind modulele de achiziție de tip Saleae existente i n laborator se va efectua o captu r ă a
schi mbului de date înt re cele două module Arduino și se vor analiza și interpreta secvenț ă cu
secvență semnalele , pe fiecare canal achiziți onat.

Imaginile captate și comentate se vor pune într -un document conținând datele de identificare
ale studentului (data/nr.lucrare de laborator/numele&prenumele/subgrupa/anul de
studii&specializarea) și se vor preda cadrului didactic coordonator al laboratorului.

Proiect – Tema 3
În mediul de si mulare Proteus s ă se realizeze un montaj între un Arduino UNO și doi senzori de
temperatura DS1621*, comunicația avand loc pe magistrala I2C. Modulul Ardunino va citi valorile de
temperatură (virtuale) măsurate de cei doi senzori și le va afișa pe un display serial 2x16 (conectat pe porturile
sale seriale).

* http://datasheets.maximintegrated.com/en/ds/DS1621.pdf

BIBLIOGRAFIE
1. Documentație Interf ața I2C ( UM10204, I2C-bus specification and user manual, Rev. 6 — 4 April 2014
(format pdf, NXP Semiconductors).
2. Documentație module Arduino UNO.
3. Note de curs Comunicații de date ( I. Silea) .

7
Lucrare de Laborator CD – Nr. 5

CONCEPTUL DE MAGISTRALA SPI

1. Introducere

1.1 Scopul lucrării


Scopul lucrării este de a familiariza studenții cu aspectele practice de baza pentru utilizarea în
aplicații de comunicații de date folosind interfata SPI.

1.2 Utilizarea magistralei SPI


Magistrala SPI (Serial Peripheral Interface), dezvoltată de Motorola, este o interfață de
comunicare serială sincronă (ca si I2C) folosită pentru comunicarea la distante foarte reduse ce
opereaza în mod full-duplex (transferul de date are loc în ambele direcții simultan). Device-urile
comunică folosind o relație de tipul master - multi slave (nu sunt suportati mai multi masteri),
master-ul fiind cel care inițiază frame-urile de date.
SPI se mai numeşte si "four wire" serial bus pentru a-l deosebi de celelalte standarde ce folosesc
1, 2 sau 3 fire. Cele patru fire utilizate in comunicație sunt:

SCLK — Serial Clock (output from master)


MOSI/SIMO — Master Output, Slave Input (output from master)
MISO/SOMI — Master Input, Slave Output (output from slave)
SS — Slave Select (active low; output from master)

Fig. 1 Relație Master – Slave

Fig. 2 Relație Master – Multi Slave


Lucrare de Laborator CD – Nr. 5

2. Breviar Teoretic – Protocolul de transfer pe magistrala SPI


Într-o comunicaţie SPI masterul este cel care iniţiază comunicaţia prin setarea liniei SS pe 0
(enable Slave Select). In prealabil masterul trebuie să se asigure că frecvenţa setată ceasului este
suportată de către slave.

Fig. 3 – Exemplu comunicaţie SPI

Perifericul slave utilizează semnalul de ceas (SCK) pentru achiziţia de date (fluxul de biţi
transmişi serial de către master). După cum am precizat încă din partea introductivă comunicaţia
SPI este o comunicaţie full duplex:

- master-ul trimite un bit pe linia MOSI care este citit de către slave de pe aceeaşi linie;
- slave-ul trimite un bit pe linia MISO care este citit de către master de pe aceeaşi linie;

Fig. 4 – Registrii Master/Slave


Lucrare de Laborator CD – Nr. 5

Transferul propriu-zis de date folosind protocolul SPI implică doi regiştrii de deplasare serială a
datelor (serial shift registers), unul pentru master şi unul pentru slave interconectaţi ca în figura
4. Masterul începe transmisia unui octet prin scrierea acestuia în registrul său de deplasare.
Deplasarea se începe cu bitul cel mai semnificativ (MSB) pe liniile MOSI moment în care un
nou bit este adaugat pe pozitia cea mai puţin semnificativă (LSB) din registru. Pe masură ce se
face transmisia către slave (prin MOSI), slave-ul începe la randul său să transmită date din
registrul său de deplasare (prin MISO) către master. În acest fel se face schimbul de informaţii
între cele 2 registre seriale de deplasare. După ce întreg cuvântul a fost transmis, master-ul şi
slave-ul au interschimbat valorile din cei doi regiştrii; dacă mai există date de transmis procesul
se repetă.
Când nu mai există date de transmis masterul va întrerupe generarea semnalului de ceas şi va
pune linia SS destinată slave-ului respectiv pe 1.

În cazul unei comunicaţii Master – Multi Slave, selectarea slave-ului de către master se face prin
intermediul liniei SS. Slave-urile neselectate de către master nu vor lua parte la comunicaţie –
vor ignora semnalele de pe SCK şi MOSI şi nu vor transmite nimic pe MISO.
Master-ul poate selecta doar un slave la un moment dat.

3. SPI vs I2C

Protocoalele SPI şi I2C sunt folosite pentru comunicaţia între circuite integrate şi periferice la
viteze de transfer scăzute. În următorul tabel este prezentată o comparaţie între cele 2 standarde
de comunicaţie:

Caracteristici SPI I2C


Tipul magistralei Single Master – Multi Slave Multi Master – Multi Slave
Tip de comunicaţie Full duplex Semi-duplex
Rata de transfer Mare Mică
Viteze de transmisie Nu e definită o limită (uzual 1Mbps – 3.4Mbps
10Mbps)
Format mesaj (date) Mesaje de orice lungime Limitare la 8 biţi (pachete a cate
un octet urmate de un ACK)
Numar fire 4 2
Adresare device-uri Fără suport de adresare (se 7 biţi alocaţi pentru adresare
foloseşte linia SS)
Control flow Nu Da (atât pentru SCL cât şi
pentru SDA)
Acknowledgement Nu există - master-ul poate Da – după fiecare byte urmează
transmite în gol un bit de ACK
Lucrare de Laborator CD – Nr. 5

4. Parte Practică
4.1 Componente necesare
- Arduino Uno
- SPI Bus Serial EEPROM (25LC040A)
- Breadboard + fire pentru realizarea legăturilor

Circuitul 25LC040A

Circuitul 25LC040A este un circuit de EEPROM (electrically erasable programmable read-only


memory), acesta are ca scop păstrarea datelor şi în cazul unei pierderi a tensiunii de alimentare.

Cricuitul prezintă următoarele caracteristici:

 Interfata SPI
 Max. clock 10 MHz
 Organizare 512 x 8-bit
 Mod de scriere pe pagină (până la 16 bytes)
 Protecţie pentru suprascrierea datelor
 Număr de ciclii de ştergere/scriere: 1,000,000 Erase/Write cycles
 Perioada de reţinere a datelor : > 200 ani
Pentru varianta DIP avem următorul pin layout

Descrierea acestora este dată de următorul tabel:


Lucrare de Laborator CD – Nr. 5

Schema bloc a circuitului este următoarea:

Comenzile suportate de circuit sunt:

Pentru efectuarea operaţiei de scriere trebuie data comanda de WREN(write enable)

Scrierea unui octet trebuie să urmeze secvenţa:


Lucrare de Laborator CD – Nr. 5

Citirea unui octet se face conform diagramei de mai jos:

Descrierea completă a circuitului se găseste în următorul document:


http://ww1.microchip.com/downloads/en/DeviceDoc/21827C.pdf

4.2 Cerinţe

Să se realizeze o scriere urmată de o citire a unei secvenţe de date (pe baza unor comenzi
recepţionate de pe interfaţa serială) de la un Arduino Uno la o memoria flash EEPROM
(25LC040A) pe baza exemplului următor:
#define MOSI 11 //MASTER OUT SLAVE IN
#define MISO 12 //MASTER IN SLAVE OUT
#define SPICLOCK 13 //MASTER CLOCK OUTPUT
#define SLAVESELECTEEPROM1 10 // SLAVE SELECT CHIP EEPROM 1

#define WREN 6 //Activare scriere pentru EEPROM


#define WRDI 4 //Dezactivare scriere pentru EEPROM
#define READ 3 //Operatie citire EEPROM
#define WRITE 2 //Operatie scriere EEPROM

#define SSTRANSITIONDELAY 10
#define WRITEDELAY 1000

//Variabile pentru datele de intrare/iesire EEPROM


Lucrare de Laborator CD – Nr. 5

byte eeprom_output_data=0;
byte eeprom_input_data=0;

//Adresa de scriere/citire
int address=7;

//Valori pentru scriere


char valEEPROM1=25;

String inputString = ""; // Variabila pentru stocarea comenzii


boolean stringComplete = false; // Comanda finalizata

//Functie pentru transferul datelor


char spi_transfer(volatile char data)
{
SPDR = data; // Incarcare date
while (!(SPSR & (1<<SPIF))){} // Pooling pentru a asigura transferul
complet al datelor
return SPDR; // recuperarea datelor citite
}

//Functie pentru citirea EEPROM1


byte read_eeprom1(int EEPROM_address)
{

int data; //Variabila temporara pentru


stocarea datelor citite
digitalWrite(SLAVESELECTEEPROM1,LOW); //Activare circuit EEPROM 1
delay(SSTRANSITIONDELAY);
spi_transfer(READ); //Transmisie comanda citire
spi_transfer((char)(EEPROM_address>>8)); //Transmisie adresa MSB first
spi_transfer((char)(EEPROM_address)); //Transmisie adresa
data = spi_transfer(0xFF); //Receptie caracter
delay(SSTRANSITIONDELAY);
digitalWrite(SLAVESELECTEEPROM1,HIGH); //Dezactivare EEPROM 1
return data;
}

//Functie pentru receptionarea datelor pe interfata seriala


void serialEvent() {
while (Serial.available()) {
// citire caracter cu caracter
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
//activare conditie procesare
if (inChar == '\n') {
stringComplete = true;
}
Lucrare de Laborator CD – Nr. 5

}
}

void handleMemoryOperation(String data)


{
switch(data[0])
{
case '0':
digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
delay(SSTRANSITIONDELAY);
spi_transfer(WREN); //write enable
digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
delay(SSTRANSITIONDELAY);
digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
spi_transfer(WRITE); //write instruction
spi_transfer((char)(address>>8)); //send MSByte address first
spi_transfer((char)(address)); //send LSByte address
spi_transfer((char)valEEPROM1); //write data byte
digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
//wait for eeprom to finish writing
delay(WRITEDELAY);
digitalWrite(SLAVESELECTEEPROM1,LOW); //enable device
delay(SSTRANSITIONDELAY);
spi_transfer(WRDI); //write disable
digitalWrite(SLAVESELECTEEPROM1,HIGH); //disable device
Serial.println("Write done");
break;
case '1':
eeprom_output_data = read_eeprom1(address);
Serial.print("EEPROM1 data: ");
Serial.println(eeprom_output_data,DEC);
break;
default:
break;
}
}

//Inializarea sistemului
void setup()
{
Serial.begin(9600); //Initializarea interfata seriala
inputString.reserve(10); //Alocare date comanda
pinMode(MOSI, OUTPUT); //Configurare pin iesire
pinMode(MISO, INPUT); //Configurare pin intrare
pinMode(SPICLOCK,OUTPUT); //Configurare pin iesire
pinMode(SLAVESELECTEEPROM1,OUTPUT); //Configurare pin iesire

digitalWrite(SLAVESELECTEEPROM1,HIGH); //Dezactivare EEPROM 1


Lucrare de Laborator CD – Nr. 5

// SPCR = 01010000
//interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
//sample on leading edge of clk,system clock/4 rate (fastest)
SPCR = (1<<SPE)|(1<<MSTR);
byte clr; //Variabila temporara pentru
curatarea registrelor SPE si MSTR
clr=SPSR; // "Curatarea" registrului SPSR
clr=SPDR; // "Curatarea" registrului SPDR

void loop()
{
if (stringComplete) {
Serial.print("Received command: ");
Serial.println(inputString);
//Alegere operatie
handleMemoryOperation(inputString);
// Resetare variabile globale
inputString = "";
stringComplete = false;
}

Realizaţi o structura Master – Multi Slave (Arduino – 2 memorii EEPROM) şi pe baza unor
comenzi date să se facă scrirea/citirea din cele 2 memorii:

0 - scriere date circuit 1


1 - citire date circuit 1
2 - scriere date circuit 2
3 - citire date circuit 1

Utilizând analizoarele Saleae să se monitorizeze liniile SPI: SCK, MOSI, MISO, SS.

Proiect
Să se implementeze un sistem Single Master – Multi Slave pentru citirea şi scrierea datelor din
două memorii EEPROM (25LC040A) pe baza protocolului definit mai jos:

Operaţie Separator Identificator_Slave Separator Adresa Separator Valoare

Operaţie: 0 – scriere, 1 – citire


Identificator_Slave: 0 – slave 0, 1 – slave 1
Lucrare de Laborator CD – Nr. 5

Adresa: adresa de scriere in EEPROM


Valoare: valoarea transmisa pentru scriere in EEPROM (în cazul citirii se va trimite valoarea
0xFF)
Separator: caracterul „-”

Exemplu: 0_1_25_12 – se va face o scriere în memoria slave 1, la adresa 25, valoarea 12

S-ar putea să vă placă și