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.
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.
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")))'
← questi sono 7 bit quindi va aggiunto l’ottavo bit!
0b1101100
Il valore binario può essere visualizzato scegliendo l’opzione Format=BIN nei menu dell’oscilloscopio:
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).
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.