Decodifica di protocollo con l’oscilloscopio (RS232)

Usiamo un oscilloscopio per studiare le linee seriali di Arduino.

La sonda dell’oscilloscopio deve essere collegata con il morsetto a coccodrillo su GND e il puntale di misura sul pin 0 (RX0) per registrare il canale di comunicazione che va dal PC all’Arduino.

Protocollo RS232

Per questo test non è necessario alcuno sketch, è sufficiente usare il monitor seriale o un programma di comunicazione come miniterm, minicom, cu, o perfino screen, opportunamente configurati.

Usando il programma scelto, inviare una stringa all’Arduino.

Decodifica RS232

Nell’immagine precedente, la stringa inviata è linux.livorno.it, con protocollo RS232 a livelli TTL, alla velocità di 9600 baud e con il classico formato 8N1, cioè:

  • un bit di start (a livello basso)
  • un numero variabile di bit di dati (8 bit nel nostro caso, bit meno significativo trasmesso per primo)
  • un bit di parità opzionale (assente nel nostro caso)
  • un bit di stop (a livello alto)

Quindi, in questo caso, la trasmissione di un singolo carattere richiede 1 + 8 + 1 == 10 bit e il trigger dell’oscilloscopio deve essere impostato sul fronte di discesa per iniziare a registrare dal bit di start.

Ingrandimento della lettera elle minuscola (formato ASCII)

La lettera elle minuscola secondo la codifica ASCII dei caratteri ha il valore binario a 8 bit 0b01101100 come si può verificare con una riga di Python:

python3 -c 'print(bin(ord("l")))'
0b1101100
← questi sono 7 bit quindi va aggiunto l’ottavo bit!

Il valore binario può essere visualizzato scegliendo l’opzione Format=BIN nei menu dell’oscilloscopio:

Ingrandimento della lettera elle minuscola (formato binario)

Questi 8 bit sono trasmessi a partire dal bit meno significativo (lsb first), preceduti da un bit di start e seguiti da un bit di stop, quindi lo scorrimento della traccia dell’oscilloscopio da sinistra a destra mostra nell’ordine:

  • il bit di start
  • il bit meno significativo del carattere trasmesso, seguito dai bit successivi fino all’ottavo
  • il bit di stop

Alla velocità di 9600 baud, ogni bit viene trasmesso in circa 104 us (microsecondi):

python3 -c 'print(1/9600)'        
0.00010416666666666667

quindi con la scala orizzontale dell’oscilloscopio impostata a 100 us, 1 bit corrisponde a circa un riquadro, ma anche con il trigger impostato sul bit di start, al bit di stop si è accumulato uno scostamento significativo rispetto alla griglia.

Per calcolare la durata dei bit usando le funzionalità matematiche dell’oscilloscopio, si può inviare la lettera U maiuscola che è rappresentata in binario con una serie di bit che si alternano, cioè 0b01010101 (non a caso veniva usata in certi sistemi per la rilevazione automatica della velocità di trasmissione).

Lettera U (104 us)

La riga in basso mostra la durata dei bit a 1 come +Width=104.0us e un ciclo di lavoro del 50% come +Duty=50%, da cui si ricava che la durata dei bit a 1 e a 0 è identica, confermata dalla misura Period=204.0us.