Documente Academic
Documente Profesional
Documente Cultură
Microcontrolere si sisteme
integrate
2
EIA RS-232C(F) – este un standard electric si
mecanic
Electric el specifică niște nivele logice (logic levels), in logică negativă (unde
nivelul de “1” este mai negativ decât cel de “0”).
Mecanic el specifică tipul de conector utilizat si pinii acestora asociați unor semnale.
Primul bit de date serializat este cel mai puțin semnificativ (LSB)
Caracterul ASCII (7 biti) emis este ‘A’ adică 0x41 3
RS-232 este un standard cu semnalizare
“asimetrică” (la fel ca la porțile obișnuite), pentru
legături punct la punct
- Ecartul (diferența) mare intre cele doua nivele RS-232 (H si L) asigură
margini mari de zgomot si deci potențial imunitate mare la perturbații
- Exista circuite emițătoare E (drivers, transmitters) RS-232 si receptoare
R (receivers) RS-232
- Exista si circuite care conțin si emițătoare si receptoare (transceivers)
- Si unele si altele sunt circuite inversoare, iar emițătoarele trebuie să aibă
un sistem de surse de alimentare bipolare (V+ si -V) prin raportare fata
de masa circuitului
- Pentru o legătură de date unidirecțională avem nevoie de un emițător si un receptor
- Pentru o legătură de date bidirecțională avem nevoie de 2 emițătoare si 2
receptoare
- Este o legătură punct la punct: putem avea doar o singură ieşire
conectată la o linie de semnal (si una sau mai multe intrări): două ieşiri RS-
232 NU pot fi legate împreună!
4
Cum se folosește RS-232 (conexiunea fizica)
Emițătorul si Receptorul sunt
întotdeauna inversoare, lucru de care
trebuie ținut cont dacă utilizăm o altă
soluție hardware, decât cea a unor circuite
standard (gen MAX232, ca mai jos),
pentru realizarea E(mitătorului) sau
RS-232 R(eceptorului).
E R Cele 2 sisteme conectate trebuie să aibă
TTL o masă comună GND (al 3-lea fir)!
TTL
GND
RS-232
R E
RS-232
TTL TTL
GND TTL/CMOS
5
RS-485 / RS-422 sunt standarde cu semnalizare
“diferențială”, pentru legături punct la punct (RS-422) sau
multipunct (RS-485): sunt standarde electrice, nu si
mecanice
- RS-422 si RS-485 au in comun aceleași nivele logice
diferențiale
-Pentru aceste standarde nu exista si o specificație mecanica
(conector, pini, ca la RS-232)
- Semnalizarea diferențială oferă potențial imunitate mare la
perturbații (la zgomot electromagnetic de mod comun)
- Avem circuite emițătoare (drivers, transmitters) RS-485 (422)
si receptoare (receivers) RS-485 (422) sau, similar RS-232,
transceivere (transceivers)
- Toate au intrări/ieşiri diferențiale si nu necesită un sistem de
surse de alimentare bipolare
-Pentru o legătură de date unidirecțională avem nevoie de un driver si
un receptor (si 2 fire)
-Pentru o legătură de date bidirecțională avem nevoie de 2 drivere 6si
2 receptoare (si 4 fire)
Standardul RS-422/RS-485: nivelele logice
Principial nu este nevoie
Contează tensiunea intre
de o masă comună intre D si R
cele 2 linii de semnal
dar in realitate de cele mai multe
RS-485!
ori ea există sau trebuie să existe TTL
Zgomotul care apare
pe mod comun este
RS-485 rejectat
TTL TTL
Driverele/emițătoarele si
receptoarele au două borne
TTL de ieșire respectiv intrare
borna inversoare: -, B, o
borna neinversoare: +, A, “ ”
Vin+
Vin-
11
Principiul comunicației seriale asincrone
• Este numită asincronă deoarece nu există un semnal de
ceas explicit, ceasul urmând a fi regenerat intern, pe baza unei
temporizări riguroase
• Datele sunt transmise organizate in cadre de biţi (bit frames)
• Fiecare cadru are un bit de start, mai mulți biți de date,
opțional un bit de paritate pară sau impară si unul sau mai mulți
biți de stop
• Linia de emisie este adusă in “1” si/sau “0”, pe durata unor
intervale de timp succesive bine determinate, fiecare din aceste
intervale de timp (numite si timpi de bit) fiind alocat unor anume
biți dintr-un cadru de biți
• Pe baza cunoașterii poziției predeterminate a acestor biți,
receptorul monitorizează aceste date, “asamblând” valorile de
“1” sau “0” detectate in fiecare interval de timp, intr-un
“container” de dimensiuni corespunzătoare (de cele mai multe
ori un octet)
– Receptorul si emițătorul trebuie să utilizeze ceasuri riguros
“identice” ca frecvență pentru avea intervale de timp “identice” le
emisie si recepție si a putea interpreta corect datele recepționate
12
Comunicația serială asincronă- nivele
logice si formatul cadrului de biți
• Nivelul inactiv (idle) al liniei de emisie este “1” (o să-i corespundă un
mark ca nivel RS-232)
• Emiţătorul semnalează începutul unui cadru printr-o tranzitie din “1”
in “0” (o să-i corespundă un space ca nivel RS-232) pe TxD, adică cu
un bit de start (start bit)
• La intervale de timp regulate (date de rata baud/viteza de transmisie)
emiţătorul oferă biţii de date (data bits), începând cu cel mai puţin
semnificativ (LSB)
• Unul sau doi biţi de stop (stop bit) semnalează sfârşitul cadrului
(linia de emisie revine in “1”), procesul putând fi reluat
TxD
15
AVR 8 biți: componentele U(S)ART-ului
16
AVR 8 biți: conexiunile externe ale
U(S)ART
• Un U(S)ART utilizează doi pini (in modul asincron) pentru
emisie -TxD si recepție- RxD sau trei pini când mai există
încă un pin XCK pentru semnalul de ceas pentru modul
sincron.
– Pinii utilizați (si porturile aferente) sunt diferiți funcție de varianta
de AVR
– Pentru un Atmega 16 sau ATtiny 2313 avem TxD = PD1 si
RxD=PD0
– Dar la un ATMega169 avem RxD=PE1 si TxD=PE0 !
• Acești pini ai portului serial nu mai pot fi utilizați ca I/O de
uz general atâta timp cat ei sunt utilizați pentru comunicația
serială (emisia si recepția este activata)
• Implicit, după un Reset, U(S)ART-ul este configurat in mod
asincron cu emisia si recepția inactive (ele trebuie activate
de utilizator)
• Nu vom discuta aici despre comunicația serială sincronă
(comunicație de tip master-slave), in care se utilizează un
semnal de ceas explicit (pinul XCK – eXternal cloCk)
17
AVR 8 biți: conexiunile externe ale U(S)ART-ului,
exemple
ATmega16
18
AVR 8 biti
U(S)ART-
schema bloc
• Cele 3
registre de
stare si
control,
registrele de
date,
registrul de
ceas si
conexiunile
externe
19
AVR 8 biți U(S)ART: generatorul de
ceas
Rata Baud este specificata Circuit pentru crearea
ca un parametru in UBRR semnalului de ceas pentru
emisie si recepție
20
AVR 8 biti U(S)ART: emiţătorul
22
AVR 8 biti UART : recepția asincronă a
datelor
• Deoarece nu există un semnal explicit de ceas UART-ul trebuie sa includă
subsisteme de refacere a semnalului de ceas (clock recovery) si
reconstruire a datelor (data recovery) pentru a putea realiza recepția
asincronă a datelor seriale.
• Receptorul UART este mai complicat decât emiţătorul!
• Circuitul de refacere a ceasului (clock recovery) este utilizat pentru
sincronizarea ceasului generat intern cu cadrele de biti asincrone care sosesc
pe pinul RxD.
• Circuitul de reconstruire a datelor eșantionează si filtrează trece jos fiecare bit
care sosește, îmbunătățind astfel imunitatea la zgomot a receptorului
• Domeniul de incertitudine in care este posibilă recepția asincronă a datelor
depinde precizia semnalului de ceas generat intern, de rata baud utilizată, de
dimensiunea cadrului ca număr de biți si de cât de des sosesc cadrele de biți
• Există cerințe stricte legate de egalitatea celor frecvențelor de ceas
utilizate la emisie si la recepție, precum si de stabilitatea lor (timp,
temperatura): cerințele sunt cu atât mai stricte cu cat viteza de
comunicație este mai mare 23
AVR 8 biti UART: recepția asincronă a
datelor -2
• Circuitul de refacere a ceasului sincronizează ceasul intern cu
cadrele de biți recepționate serial.
• In figura următoare este ilustrat procesul de eșantionare si
identificare a bitului de start al unui cadru de biți ce va fi
recepționat.
• Există de fapt o mașină secvențială care testează starea intrării si ia decizii
• Rata de eșantionare este de 16 ori rata baud pentru modul “normal” (U2X=0) si
de 8 ori rata baud pentru modul “viteza dublă” (U2X=1).
• “Viteza dublă” duce la dublarea ratei baud, prin reducerea numărului de
eșantioane testate per bit; de exemplu dacă pentru UBRR=23 avem o rată baud
de 9600 Bds cu U2X=0, la același UBRR, dar cu U2X=1 vom avea 19200 Bds
24
AVR 8 biți U(S)ART: registrele de stare
si control
• Pentru majoritatea variantelor de AVR există trei
registre de stare si control a căror denumire
poate fi eventual ușor diferită (a se consulta foaia
de catalog):
– Registrul UCSRA – USART Control and Status
Register A
• Conține in majoritate biți de stare, dar exista si doi biți
control
– Registrul UCSRB – USART Control and Status
Register B
• Conține in majoritate biti de control, dar exista si doi biţi de
date
– Registrul UCSRC – USART Control and Status
Register C
• Conține numai biţi de control
25
AVR 8 biți U(S)ART: seriile Tiny si Mega
modernizate
In foile de catalog ale variantelor modernizate apare o nouă schemă bloc care ilustrează
funcționalitățile disponibile - aceleași ca la variantele clasice.
Exista însă si unele noi cum ar fi:
- suport pentru comutarea sensului la RS-485 half duplex (pin XDIR)
- implementarea unui slave LIN bus (suport pentru un cadru de biti Break)
- implementare unui mod de comunicare in infrarosu (IRCOM- InfraRed COmmunication Mode )
compatibil IrDA1.4
- integrarea cu Event System
Există acum 15 registre de comandă, stare si date asociate sistemului.
26
Denumirile unora din registre s-au modificat, deci obligatoriu trebuie consultată foaia de catalog.
AVR 8 biți U(S)ART: structura
registrelor de stare si control
27
AVR 8 biți U(S)ART: registrul de date UDR
• Din punct de vedere al utilizatorului/
programatorului există un singur registru de
date, de 8 biti (dar fizic există două registre
buffer separate RXB si TXB) :
• Registrul UDR – USART Data Register
– Daca este accesat in scriere avem emisie: UDR=
data;
– Daca este accesat in citire avem eventual
recepție: data =UDR;
28
AVR 8 biti U(S)ART: iniţializarea
UART-ului
• Etapele utilizării unui UART sunt cel puțin următoarele:
– Se stabilește (se programează) rata baud dorită, funcție de
frecventa ceasului sistem utilizat
– Se stabilește formatul cadrului de biţi serial
– Se activează recepția si/sau emisia, eventual se activează si
întreruperile aferente
– Apoi se poate realiza emisia si recepția de octeți (“caractere”)
• Operațiile de emisie si recepție propriu-zise pot fi bazate
pe:
– interogarea (polling) unor indicatoare (biți de stare) din
registrele de stare ale UART-ului (într-o buclă de așteptare)
așteptând schimbarea stării lor sau
– utilizarea sistemul de întreruperi si a întreruperilor generate
de schimbarea de stare a acestor indicatoare
– Utilizarea DMA, numai la XMEGA
• ATENTIE: aceiași “inițializare” trebuie realizată si la
partenerul de “conversație” al USART-ului: trebuie să
avem riguros aceiași rată baud si același format al
cadrului
29
Viteza de comunicație serială asincronă: rata
Baud
• Rata baud reprezintă, exprimat colocvial (provenind dintr-o
traducere ad-literam), viteza cu care sunt transmişi/recepţionaţi biții:
rata Baud, RB: din engleza unde rate = “ceva” /timp , adică viteză
• Este exprimată in biți per secundă (bps) sau Bauds (Bds)
• In acest context si aici 1Baud=1bps, dar in alt context acest lucru
nu este neapărat adevărat
• Există un set de valori de rate Baud standard:
110, 150, 300, 600, 900, 1200, 2400, 4800, 9600, 14400, 19200,
38400, 57800..
Inversul ratei Baud adică intervalul de timp alocat unui bit, cat “durează
bitul”, este timpul de bit (bit time) Tbit=1/RB [sec].
De ex. dacă RB=9600Bd, Tbit=1/9600=104usec
Știind numărul total tuturor biților se poate calcula cat durează in total
emisia si/sau recepția unui caracter 30
AVR 8 biți UART: parametrul rată Baud (viteza
de comunicație)
• Reprezintă valoarea care va fi programată in perechea de
registre UBRR generatorului de ceas, compusa dint un octet
superior (UBRRH) si unul inferior (UBBRL)
• Pentru determinare lui se poate consulta tabela din foaia de
catalog sau se utilizează formula dată in aceiași foaie de catalog
• Valoarea UBRR (parametru rate baud) este un număr in
domeniul de la 0 la 4095
– fosc este frecvența ceasului sistem (oscilatorului de ceas)
Pentru AVR 8 biti ceasul sistem trebuie să fie intr-o variantă stabilizată
cu rezonator cu cuarţ!
Numai aşa sunt îndeplinite cerinţele legate de precizie si stabilitate (temperatura si timp)
pentru frecventa generatorului de ceas al UART-ului 33
Stabilitatea si precizia unui oscilatorul intern sau extern RC sunt insuficiente!
AVR 8 biți UART: exemplu de programare
a ratei Baud (in limbaj de asamblare)
35
AVR 8 biți UART: formatul cadrului de biți
serial
• Întotdeauna se începe cu un bit de start (St)
• Urmează 5 până la 9 biți de date, începând cu cel mai puțin
semnificativ (pondere 0)
• Dacă paritatea este activată, un bit de paritate (programabil ca
bit de paritate pară - even sau impară - odd) va fi inserat in
continuare
• Urmează cel puțin un bit de stop (Sp) care este necesar pentru
a finaliza cadrul
– Următorul cadru poate începe imediat după bitul de stop sau linia
poate sta un interval de timp neprecizat in stare inactivă (idle)
Cadru biţi
37
Algoritmul utilizat pentru calculul bitului de
paritate
• Bitul de paritate pară (even) este calculat realizând un
XOR (SAU-EXCLUSIV) intre biții de date.
• Dacă se folosește paritatea impară (odd) rezultatul
XOR-ului este inversat.
• Relaţiile intre bitul de paritate si biţii de date sunt:
Ppara = dn ⊕ dn-1⊕ … ⊕ d1 ⊕ d0 ⊕ 0
Pimpara = dn ⊕ dn-1⊕ … ⊕ d1 ⊕ d0 ⊕ 1
Ppara Bitul de paritate folosind paritatea pară
Pimpara Bitul de paritate folosind paritatea impară
dn al n-lea bit de date
• Dacă este utilizat, bitul de paritate trebuie plasat intre
ultimul bit de date si primul bit de stop al cadrului
serial. 38
AVR 8 biți UART: configurarea tipică a cadrului serial
(in limbaj de asamblare)
0=Mod asincron
10 = paritatea para
40
AVR 8 biți UART: activarea emisiei si a
recepției (in limbaj de asamblare)
41
AVR 8 biți UART: activarea emisiei si a
recepţiei (in limbaj C)
….
//Activeaza transmisia si receptia
UCSRB | = (1<<RXEN)|(1<<TXEN);
…
//Sau activeaza numai transmisia
UCSRB | = 1<<TXEN;
……
43
AVR 8 biți UART: emisia unui octet (in
limbaj C)
…
/* Se asteapta eliberarea bufferului de
emisie, functia este blocanta, nu se
iese din while decat atunci cand bitul
UDRE =1*/
while ( !( UCSRA & (1<<UDRE)) )
;
/* Dupa eliberare se pune data in buffer
si se incepe emisia */
UDR = data;
…..
44
AVR 8 biți UART: recepția unui octet (in
limbaj de asamblare)
• Octeții recepționați sunt
memorați temporar intr-o
“coadă” – un buffer FIFO
– bufferul USART-ului AVR are 2 ;Copiaza caracterul
octeți, FIFO cu 2 nivele
(ATMega16) ;receptionat in R16
• Indicatorul “recepție completă” receive:
RXC este setat atunci când
există un octet in așteptare ;asteapt data
(disponibil) in buffer sbis UCSRA, RXC
– Așteaptă până când RXC se rjmp receive
face “1”
– Apoi putem citi in R16 pe UDR ;ia octetul din
– Citirea lui UDR va șterge pe ;buffer
RXC atunci când bufferul s-a
golit in R16, UDR
45
AVR 8 biți UART: recepția unui octet
(in limbaj C)
unsigned char car;
/* Se asteapta pana avem ceva
receptionat in buffer, functia va fi
blocanta deorecea se asteapta in
while pana cand bitul RXC =1 */
while ( !(UCSRA & (1<<RXC)) );
/*Se citeste caracterul receptionat */
car=UDR;
46
AVR 8 biți U(S)ART: registrul de date
UDR, biții UDRE si RXC
• Scrierea in UDR memorează octetul in bufferul
de emisie al U(S)ART-ului si inițiază transferul
serial
– Începerea transferului va șterge bitul de stare UDRE
(Usart Data Register Empty)
• Registrul de date nu mai este gol
– UDRE va fi setat atunci când octetul este mutat in
registrul de deplasare paralel-serie si practic UDR
este gol putând fi scris următorul octet
• Citirea lui UDR înlătură si returnează următorul
octet din bufferul de recepție al U(S)ART-ului
– Dacă bufferul FIFO de recepție s-a golit si bitul
RXC- Receive Complete din UCSRA va fi șters (=0)
47
AVR 8 biți UART: UDR- registrul de
date, al 9-lea bit
48
AVR 8 biți U(S)ART: dezactivarea
emisiei
• Pentru a dezactiva emisia (emițătorul de fapt) trebuie
șters bitul TXEN ( =0) din registrul UCSRB
– De menționat ca dupa reset emisia este implicit dezactivata
ea trebuind sa fie activata de utilizator daca se dorește
utilizata, făcând TXEN=1
• Octeții care se află deja in așteptare pentru a fi emiși,
vor fi emiși, înainte de dezactivarea propriu-zisă a
emițătorului
– Bitul TXC (Transmit Complete) va fi setat (=1) atunci când
bufferul de emisie TXB este gol si registrul de deplasare
utilizat pentru emisie este gol
• Odată ce emițătorul a fost dezactivat, pinul TxD
poate fi utilizat ca un pin I/O normal din portul
PORTD (la ATMega 16 )
49
AVR 8 biți U(S)ART: dezactivarea
recepției
51
AVR 8 biți U(S)ART: citirea indicatorilor
de eroare
• Erorile sunt si trebuie sa fie memorate împreună/sincron cu datele
recepţionate in bufferul FIFO de recepţie: un set de indicatori trebuie sa fie si
este asociat unui anumit octet receptionat
• Din acest motiv indicatorii de eroare (din UCSRA) trebuie citiţi înainte de a
citi datele care au pozitionat eventual acesti indicatori:
…
in R17, UCSRA
in R16, UDR
…
Sau in C:
….
eroare=UCSRA;
data =UDR;
….
• Tipic se pot verifica toţi biţii individuali, setarea oricăruia din ei însemnând o
eroare de recepţie, de exemplu (exemplu in limbaj de asamblare):
andi R17, (1<<FE)|(1<<DOR)|(1<<PE);oricare din ei ar fi in ‘1’
brne ReceiveError ;salt la o rutina de tratare a erorilor
52
AVR 8 biți U(S)ART: registrele
UCSRC si UBRRH (ATMega)
• Aceste registre de I/O asociate U(S)ART-ului pun o problemă
utilizatorului ele având alocată aceiași adresă I/O in spațiul dedicat
din memoria de date AVR
• De aici va rezulta o anumită constrângere si modalitate specifică de
a le accesa la scriere sau citire
• De fapt registrul UCSRC poate fi folosit ca atare sau ca UBRRH
selecția făcându-se cu ajutorul bitului URSEL din acest registru
• Când se dorește sa se scrie in UBRRH, cel mai semnificativ bit numit
URSEL (bitul 7) trebuie să fie “0”
– Dar UBRR este exprimat pe 12 biti (8 in UBRRL si 4 in UBRRH) astfel ca
UBRR are valoarea maximă de 4095, si această cerință este realizată
practic automat, bitul 7 din UBRRH fiind intotdeauna “”0”
• Când se dorește sa se scrie in UCSRC, bitul URSEL trebuie a fie
setat (“1”)
• Vezi slide-ul urmator
• Citirea acestor registre este mai puțin necesară in practică, dar este
posibilă
53
AVR 8 biți U(S)ART: registrele
UCSRC si UBRRH (ATmega) -2
54
AVR 8 biți U(S)ART: exemplu de interfaţă RS-
232 full-duplex
/*initializare uart
rata baud primita ca un argument intreg fara semn */
void USART_Init(unsigned int baudrate)
{
/* Seteaza rata baud */
UBRRH = (unsigned char) (baudrate>>8);
UBRRL = (unsigned char) baudrate;
/* Activare 2x viteza dubla */
UCSRA = (1<<U2X);
RS-485 TTL
64
Magistrala SPI - semnalul de ceas SCK
• Deși datele sunt in mod conventional grupate in mod
tipic in pachete de 8 biți, adică 8 perioade ale ceasului
SCK, in realitate transferul de date poate avea un număr
arbitrar de biți/perioade ale ceasului
• Când nu mai sunt date de serializat Master-ul oprește
ceasul si, in mod normal, asta duce la deselectarea
Slave-ului
• Există multe exemple de periferice cu interfata SPI unde
se vehiculează pachete de 12 sau 16 biți, registrele de
deplasare respective având același număr de biți
• Starea de referință (inactivă) a semnalului de ceas SCK,
“0” sau “1”, precum si frontul activ (cel pe care se
memorează/eșantionează biții de intrare) crescător sau
descrescător, trebuie sa fie programabile de utilizator;
– De exemplu pentru AVR 8 biti, aceasta se face cu ajutorul biților
CPOL- Clock Polarity si CPHA- Clock Phase din registrul SPCR
– SPI Control Register
65
Magistrala SPI- diagrame de timp
In acest exemplu liniile MOSI/MISO comută (isi pot schimba starea) pe frontul căzător
al lui SCLK si sunt memorate/eșantionate/citite pe frontul crescător
Vezi si http://www.epanorama.net/links/serialbus.html 66
AVR 8 biți: schema bloc a interfeței SPI
ATMega16
69
AVR 8 biți: SPI si programarea ISP (ATMega)
• Nu in ultimul rând, in contextul AVR, interfaţa SPI poate fi utilizată si pentru o
programare de tip ISP (In System Programming ) a microcontrolerului (serial
downloading):
– a memoriei de program (Flash),
– a memoriei EEPROM si
– a fuzibilelor
Cu ajutorul acestei interfețe se pot realiza operații de scriere si citire(verificare)
din zonele de memorie enumerate mai sus atunci când:
- semnalul /RESET este ținut activ (=‘0’)
- exista semnal de ceas
- fuzibilul SPIEN (activare programare prin SPI) este programat
• Se utilizează un algoritm specific descris in foaia de catalog AVR
70
AVR 8 biți, interfețe seriale sincrone:
magistrala I2C (IIC)
• Prezentarea I2C care urmează este una sumara, doar la nivel introductiv!
– Pentru familia de microcontrolere AVR 8 biti interfaţa I2C se numește TWI (Two Wire serial Interface), interfață cu 2
fire
• Este o magistrală serială sincronă destinată interconectării de circuite integrate (IIC-
Inter Integrated Circuits), inventată in anii ’80 de fostul Philips Semiconductor (acum NXP)
– I2C este sincronă fiindcă se vehiculează si un semnal de ceas împreună cu semnalul de date
• Este o magistrală de tip Multi-Master, ceasul fiind furnizat / generat de Master
• Informația este organizată pe pachete
• Este o magistrală multi-punct, permite conectarea utilizând numai 2 fire (Two Wire-2W) a
până la 128 de dispozitive (sau 1024 pentru adresa extinsa) I2C diferite
• Este destinată a fi utilizată pe distanțe mici (<1 m)
• Este o magistrală cu linii bidirecționale, de tip drenă in gol (ca ieşiri)
– Obligatoriu trebuie să existe rezistente de sarcină externe, către Vcc (pull-up)
• Comunicația este doar Half-Duplex pentru că există o singură linie de date, bidirecțională!
• Este relativ lentă (este oricum mai lentă decât SPI):
– 100 kbiti/s (in modul normal-standard), 400 kbiti/s (in modul rapid-fast, disponibil si la variantele
mai noi de AVR XMEGA)
– La cele mai noi dispozitive există si un mod de mare viteză - high speed care poate asigura
potențial o viteză de 3.4Mbps
OBSERVAŢIE
Magistrala SMBus (System Management Bus), definită de Intel in 1995, este un subset al I²C care
(re) definește protocolul I2C intr-un mod mai strict. Este utilizata si o întâlniți de exemplu la plăcile
de bază PC pentru comunicația cu sistemul de alimentare de tip baterie reîncărcabilă. 71
2
I C, exemple de utilizare
Adresa Data
Adresa Data
81
AVR 8 biti TWI: schema bloc a sub-sistemului,
conexiunile externe (ATMega16)
ATMega16
82
AVR 8 biti, TWI: registrele asociate
• Pentru AVR 8 biti exista un set de 5 registre utilizate
pentru implementarea interfeței TWI:
– Registrul pentru stabilirea vitezei de comunicație (rata bit, bit
rate) TWBR - TWI Bit Rate Register
– Registrul de control TWCR - TWI Control Register
– Registrul de stare TWSR - TWI Status Register
– Registrul de date TWDR -TWI Data Register; este un singur
registru, utilizat la scriere pentru emisie si la citire pentru recepţie
– Registrul de adresa pentru Slave TWAR -TWI (Slave) Address
Register
• Pentru utilizarea lor si a interfeței TWI consultați foile de
catalog!
83
AVR 8 biti TWI: registrele
84
AVR 8 biti TWI: exemplu de conectare a unui
ATMega16 cu o memorie EEPROM serială, 24C02
87