Salta al contenuto
Note per Studenti Esercizio 27 · comunicazione seriale asincrona e bus I2C, tempi di trasmissione e tolleranza di frequenza (temi d'esame febbraio 2023, luglio 2026 e settembre 2026)

Esercizio 27comunicazione seriale asincrona e bus I2C, tempi di trasmissione e tolleranza di frequenza (temi d'esame febbraio 2023, luglio 2026 e settembre 2026)

Esame
In questa pagina 5

Testo (temi d'esame febbraio 2023 problema P7, luglio 2026 problema P4, settembre 2026 problema P5; 3 settembre 2020 problema 4.3).

(i) Un microcontrollore trasferisce dati verso un convertitore D/A esterno a 12 bit con un bus I2C a 400 kbit/s. Il buffer da trasferire contiene 128 valori a 12 bit (andamento temporale di una sinusoide campionata uniformemente che occupa l'intero range del convertitore). Determinare: (a) il numero di byte del messaggio; (b) una stima del tempo di trasmissione dell'intero messaggio; (c) il valore in volt dell'LSB del DAC con FSR=5FSR=5 V; (d) la massima variazione tra due campioni consecutivi, in LSB.

(ii) Un termometro digitale trasmette a un microcontrollore, su bus I2C a 400 kHz, letture a 12 bit in un range da −60-60 °C a +120+120 °C con frequenza di misura 50 Hz; nel codice c'è una soglia a 95 °C. Determinare: (a) il valore in °C dell'LSB; (b) il valore della lettura a 95 °C; (c) il tempo richiesto dalla trasmissione di un dato; (d) una stima del massimo ritardo tra il superamento della soglia e l'intervento del microcontrollore.

(iii) Indicare quali affermazioni sul bus I2C sono vere o false: a. è una forma di trasmissione seriale asincrona; b. non richiede alcun supervisore o master; c. la velocità massima è sempre minore di 200 kbit/s; d. una linea deve essere terminata da un'impedenza di 120 Ω; e. ogni dispositivo connesso ha un indirizzo univoco; f. non consente comunicazioni full-duplex.

(iv) Trasmissione seriale asincrona a 8 bit di dati, senza parità, un bit di stop, a 19200 bit/s: quanto tempo per un blocco di 64 byte? Con clock di 8 MHz e campionamento a 16×, il baud rate a 115200 è realizzabile con un divisore intero? Quale tolleranza ha il ricevitore?


Teoria usata: Bus I2C, SPI e CANI2C: bus seriale sincrono a 2 fili (SDA dati, SCL clock, con resistenze di pull-up), un master (il µC) e molti slave con indirizzo a 7 bit; byte da 9 bit (8 + ACK dato dal ricevitore abbassando SDA); start: SDA scende con SCL alto; stop: SDA sale con SCL alto; 100 kbit/s (normale), 400 kbit/s (fast); half-duplex. SPISerial Peripheral Interface: bus seriale sincrono a quattro fili: 4 fili (MOSI, MISO, SCK, CS), full duplex, master e slave selezionati da CS, 4 modi (CPOL, CPHA). CAN: bus differenziale (120 Ω) asincrono, messaggi etichettati da un identificatore (11 o 29 bit), arbitraggio automatico (vince l'ID più basso), bit stuffing dopo 5 bit uguali, CRC a 15 bit, contatori di errori (127, 255).Bus I2C, SPI e CAN →, Comunicazione seriale - UART, RS232, RS422 e RS485La trasmissione serialeche trasmette i bit uno dopo l'altro su una sola linea invia un bit alla volta su pochi fili. Asincrona (UART): senza clock comune, ogni dato è inquadrato da 1 bit di start, 5-8 bit di dati, parità opzionale e 1-2 bit di stop; per 8 bit di dati servono 10 bit sulla linea (efficienza 80%); tempo di bit $BT=1/bps$; il ricevitore campiona a $1{,}5,BT,2{,}5,BT,\dots$ dal fronte di start e tollera uno scostamento di frequenza di circa $\pm5{,}3%$ (o $4{,}6%$ con campionamento a 16×). Sincrona: il trasmettitore invia anche il clock (e il frame sync), efficienza 100%. Livelli fisici: RS232 ($\pm12$ V, 1 = $-12$ V), RS422/RS485 (differenziale, doppino, 10 Mbit/s su $<15$ m; RS485 multi-trasmettitore), loop di corrente 0-20 mA.Comunicazione seriale - UART, RS232, RS422 e RS485 →, ADC e DAC - risoluzione, SNR, ENOB ed erroriUn convertitore a $n$ bit con fondo scala $FSR$ ha risoluzione $LSB=FSR/2^n$; il codice vale $C=\mathrm{round}(V/LSB)$ e la tensione corrispondente è $V=C\cdot LSB$ con incertezza $\pm\frac12LSB$ (errore di quantizzazione). Con un modello a rumore uniforme di potenza $LSB^2/12$ il SNR di una sinusoide a fondo scala è $6{,}02,n+1{,}76$ dB; dal SNR misurato si ricava il numero di bit efficaci $ENOB=\frac{SNR-1{,}76}{6{,}02}$. Gli errori reali (offset, guadagno, INL, DNL, missing code) abbassano l'accuratezza. Accuratezza ≠ precisione: alta accuratezza implica alta precisione, non viceversa.ADC e DAC - risoluzione, SNR, ENOB ed errori →.

(i) DAC su I2C

(a) Ogni valore a 12 bit occupa 2 byte (un byte non basta): 128⋅2=256128\cdot2=256 byte di dati, più 1 byte di indirizzo della periferica (7 bit di indirizzo + bit R/W): 257 byte. (b) Ogni byte richiede 9 tempi di bit (8 bit più l'ACK); il bit-time è 1400 kHz=2,5 μ\frac1{400\text{ kHz}}=2{,}5\ \mus. Tempo ≈257⋅9400 000 bit/s=5,78 ms\approx\frac{257\cdot9}{400\,000\ \text{bit/s}}=\mathbf{5{,}78\ ms} (più le condizioni di start e stop, circa 22 bit-time =5 μ=5\ \mus: trascurabili). (c) LSB=FSR212=54096=1,22 mVLSB=\frac{FSR}{2^{12}}=\frac5{4096}=\mathbf{1{,}22\ mV}. (d) La sinusoide a fondo scala ha ampiezza 40952≃2047,5\frac{4095}2\simeq2047{,}5 LSB; con 128 punti per periodo la massima variazione tra campioni successivi è 2047,5⋅2π128=100,5≈1002047{,}5\cdot\frac{2\pi}{128}=\mathbf{100{,}5}\approx100 LSB (vicino al passaggio per lo zero della sinusoide): è il "gradino" che un filtro di ricostruzione deve smussare.

(ii) Termometro su I2C

(a) Range 120−(−60)=180120-(-60)=180 °C su 212=40962^{12}=4096 livelli: LSB=1804096=0,0439 ∘CLSB=\frac{180}{4096}=\mathbf{0{,}0439\ ^\circ C}. (b) C=round(95−(−60)180⋅4096)=round(3527,1)=3527=0xDC7C=\mathrm{round}\big(\frac{95-(-60)}{180}\cdot4096\big)=\mathrm{round}(3527{,}1)=3527=\mathbf{0xDC7} (la lettura parte da −60-60 °C →0\to0). (c) Per ogni dato il messaggio ha l'indirizzo e 2 byte di dato (12 bit non stanno in 1 byte): 3 byte ⋅9=27\cdot9=27 tempi di bit: 27400 kHz=67,5 μs\frac{27}{400\text{ kHz}}=\mathbf{67{,}5\ \mu s} (circa 72,5 μ72{,}5\ \mus con start e stop). (d) Si misura a 50 Hz, quindi ogni 150=20\frac1{50}=20 ms: nel caso peggiore la soglia viene superata subito dopo una lettura e il microcontrollore se ne accorge alla successiva: 20 ms+67,5 μs+Tcalcolo≈20,07 ms20\ \text{ms}+67{,}5\ \mu\text{s}+T_{calcolo}\approx\mathbf{20{,}07\ ms} (più il tempo di elaborazione e di latenza della ISR).

(iii) Vero/falso

  • a. Falso: è sincrona (esiste la linea di clock SCL).
  • b. Falso: serve un master (il µC), che genera il clock e avvia i messaggi.
  • c. Falso: la modalità fast arriva a 400 kbit/s (oltre 200).
  • d. Falso: le linee SDA e SCL hanno resistenze di pull-up all'alimentazione; i 120 Ω appartengono a CAN e RS485.
  • e. Vero: ogni dispositivo ha un indirizzo a 7 bit univoco.
  • f. Vero: c'è un solo filo di dati: la comunicazione è half-duplex (SPI è full-duplex).

(iv) Seriale asincrona

Tempo. 8 dati + 1 start + 1 stop =10=10 bit per byte: 64 byte =640=640 bit; T=64019200=33,3 msT=\frac{640}{19200}=\mathbf{33{,}3\ ms}. 115200 bps con clock 8 MHz e campionamento a 16×: il clock della UART deve essere 16⋅115200=1,843216\cdot115200=1{,}8432 MHz; il divisore da 8 MHz vale 8 MHz1,8432 MHz=4,34\frac{8\ \text{MHz}}{1{,}8432\ \text{MHz}}=4{,}34: non intero. Con divisore 4 (clock 22 MHz, baud 125125 kbit/s) lo scostamento è +8,5%+8{,}5\%; con 5 (1,61{,}6 MHz, 100100 kbit/s) −13%-13\%: entrambi oltre la tolleranza del ricevitore. Tolleranza del ricevitore: 0,59,5=5,3%\frac{0{,}5}{9{,}5}=5{,}3\%, ridotta a 0,43759,5=4,6%\frac{0{,}4375}{9{,}5}=4{,}6\% dall'incertezza sul rilevamento dello start (campionamento 16×). Quindi 115200 bit/s non è realizzabile con 8 MHz: serve un quarzo diverso (per esempio 7,37287{,}3728 MHz, divisibile esattamente: 7,3728 MHz16⋅115200=4\frac{7{,}3728\text{ MHz}}{16\cdot115200}=4). Per il caso del 3 settembre 2020 (19200 bit/s, clock 4 MHz): divisore 13, baud effettivo 19231 bit/s, errore 0,16%0{,}16\%: accettabile (Esercizio 21 · controllo digitale della velocità di un motore con regolatore PI, scale, timer e trasmissione seriale (tema d'esame 3 settembre 2020)).

Errori comuni

  • Contare solo i byte di dati (256) e dimenticare l'indirizzo, oppure contare 8 bit per byte invece di 9.
  • Dire che un valore a 12 bit viaggia in 1 byte.
  • Confondere I2C (sincrono, un master, pull-up) con CAN o RS485 (differenziali con terminazione da 120 Ω).
  • Dimenticare che per 8 dati la seriale asincrona usa 10 bit sulla linea.

Versione ripasso

Testo. I2C a 400 kbit/s: DAC a 12 bit con 128 valori; termometro a 12 bit su −60…120-60\ldots120 °C a 50 Hz; vero/falso; seriale asincrona (febbraio 2023, luglio e settembre 2026, 3 settembre 2020).

Teoria collegata