Cerca

modulo attività

modulo tecnica

Login Form

Trasmissione seriale e baud rate. (segue da questo articolo)

print 3zsp

Viene inviato all'uscita seriale un blocco di 4 caratteri "zzz " come sperimentato nall'articolo precedente ma si effettuano modifiche del baud rate.

 

L'ultimo carattere è uno 'spazio' riconoscibile dalla presenza di 6 bit pari a zero all'inizio della sua trasmissione (nota 1).

 

Lo sketch usato è il seguente (serial_Test_1) ma con la riga 17 modificata di volta in volta.

serial Test 1

 

A 1.200bit/s

Con un baud rate di trasmissione pari a 1200 si ha la situazione di figura:

br1200 ciclo

- la durata della trasmissione, che coincide con la durata del ciclo compresa la pausa, è circa 6,7 * 5ms = 33,5ms

- la quantità di bit trasmessi è: 10 bit per serial frame * 4 byte = 40bit trasmessi per ogni blocco

- la durata del periodo di permanenza di ogni singolo bit è 33,5/40 = 0,838ms

- la frequenza di trasmssione misurata è 1/0,000838 = 1193Hz

valore in buon accordo con il baud rate stabilito di 1200Hz.

 

 

  

  

E se si guarda il monitor cosa si vede?

niente di comprensibile, ci sono caratteri a caso o un carattere che fa capire che il monitor non è in grado di decifrare.

baud monitor

Tutto perchè non abbiamo modificato il baud rate del monitor: la trasmissione seriale usata con l'uso del pin D1 utilizza il protocollo RS232 quindi è asincrona. Con il protocollo RS232  trasmettitore e ricevitore devono prima essere stati accordati sulla stessa frequenza di comunicazione.

Nella tendina a comparsa in basso a destra sul monitor, basta modificare il valore su 1200 e tutto viene stampato correttamente.

 

 

 

 

 

Proviamo con una frequenza di trasmissione molto più elevata

 

A 57.600 bit/s

Risulta (foto a lato)br57600

- la durata della trasmissione è circa 6,9 * 100µs = 690µs

- la quantità di bit trasmessi è: 10 bit per serial frame * 4 byte = 40bit trasmessi per ogni blocco

- la durata del periodo di permanenza di ogni singolo bit è 690/40 = 17,25µs

- la frequenza di trasmssione misurata è 1/0,0000173 = 57.800Hz

valore in buon accordo con il baud rate stabilito di 57.600Hz.

Malgrado l'alta velocità, la trasmissione del blocco di 4 caratteri dura più del ciclo base (un poco di più di 260µs, vedi sotto) per cui è ancora necessario introdurre un tempo di attesa al'interno del ciclo. (nota 2)

 

 

 

 

 

 

Si va ad esagerare

A 250.000 bit/s

br250000Al di là dei calcoli ormai ovvi, si vede che la trasmissione avviene interamente entro il ciclo di loop, anzi, rimane del tempo ozioso (idle) durante il quale non c'è trasmissione.

L'intervallo tra due trasmissioni consecutive è 3,1 * 50µs = 155µs che significa che ll buffer non viene mai riempito.

La durata della trasmissione dell'intero pacchetto di 4 caratteri si misura in 3,2 * 50µs = 160µs.

Con una velocità di 250.000bit/s

- il periodo di ciascun bit è 1/250000 = 4µs

- un serial frame di 10 bit dura 40µs e

- 4 byte occupano 160µs di tempo di trasmissione: ottimo accordo con la misura.

Il ciclo base dura però di più di 260 µs, esso dura 6,3 * 50µs = 315µs!

 

Ma 260µs erano stati misurati in assenza del comando Serial.print() in quanto per la sua misura era stata disabilitata la riga dello sketch.

Ora si apprezza che la durata del comando Serial.print(testo), il secondo impulso basso lungo, è 0,9 * 50µs = 45µs

 

Già quanto dura l'istruzione di invio sulla seriale? (continua qui)

 

note

nota 1: Lo spazio è codificato ASCII con 20H che in binario corrisponde a 0010 0000 che nella trasmissione vengono trasmessi in ordine inverso cioè 0000 0100 a cui deve essre anteposto il bit di start (in verde) che è zero; in questo modo si riconosce subito la sua posizione: 6 zeri consecutivi sono all'inizio del quarto carattere.

nota 2: il tempo di attesa è introdotto automaticamente dal microcontrollore per salvaguardare i dati già presenti nel buffer in attesa di essere trasmessi.

We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive plugin by www.channeldigital.co.uk