Esercizio 27comunicazione seriale asincrona e bus I2C, tempi di trasmissione e tolleranza di frequenza (temi d'esame febbraio 2023, luglio 2026 e settembre 2026)
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 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 °C a °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): 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 è s. Tempo (più le condizioni di start e stop, circa bit-time s: trascurabili). (c) . (d) La sinusoide a fondo scala ha ampiezza LSB; con 128 punti per periodo la massima variazione tra campioni successivi è LSB (vicino al passaggio per lo zero della sinusoide): è il "gradino" che un filtro di ricostruzione deve smussare.
(ii) Termometro su I2C
(a) Range °C su livelli: . (b) (la lettura parte da °C ). (c) Per ogni dato il messaggio ha l'indirizzo e 2 byte di dato (12 bit non stanno in 1 byte): 3 byte tempi di bit: (circa s con start e stop). (d) Si misura a 50 Hz, quindi ogni ms: nel caso peggiore la soglia viene superata subito dopo una lettura e il microcontrollore se ne accorge alla successiva: (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 bit per byte: 64 byte bit; . 115200 bps con clock 8 MHz e campionamento a 16×: il clock della UART deve essere MHz; il divisore da 8 MHz vale : non intero. Con divisore 4 (clock MHz, baud kbit/s) lo scostamento è ; con 5 ( MHz, kbit/s) : entrambi oltre la tolleranza del ricevitore. Tolleranza del ricevitore: , ridotta a dall'incertezza sul rilevamento dello start (campionamento 16×). Quindi 115200 bit/s non è realizzabile con 8 MHz: serve un quarzo diverso (per esempio MHz, divisibile esattamente: ). Per il caso del 3 settembre 2020 (19200 bit/s, clock 4 MHz): divisore 13, baud effettivo 19231 bit/s, errore : 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 °C a 50 Hz; vero/falso; seriale asincrona (febbraio 2023, luglio e settembre 2026, 3 settembre 2020).
- (i) 257 byte; ms; mV; salto massimo LSB.
- (ii) °C; 95 °C →
0xDC7; 67,5 µs per dato; ritardo massimo ms. - (iii) a F, b F, c F, d F, e V, f V.
- (iv) 64 byte a 19200: ms; 115200 con 8 MHz non realizzabile ( o , tolleranza ).
- Errori: byte di indirizzo dimenticato; 8 bit per byte; I2C con 120 Ω; 10 bit per byte (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 →).