Comunicazione seriale USART (RS232)
Introduzione
Sembra anacronistico parlare di UASRT, un protocollo di comunicazione, relativamente lento, infatti, nei PC più moderni non è più integrata, ma possiamo affermare senza timore di smentita che la periferica USART, anche definita RS232, è ancora viva e vegeta ed è ampiamente utilizzata soprattutto nei sistemi embedded , non a caso, Arduino ha inserito questa periferica su tutte le tipologie di scheda, ma diciamo che in generale molte delle board che si trovano in commercio ne fanno largo uso.
il microcontrollore ATmega328 è integrato sulle schede di Arduino Uno, ha delle discrete caratteristiche, e in dotazione ci sono diverse periferiche tra cui anche tre interfacce di comunicazioni seriali: USART, I2C e SPI, queste ultime due periferiche saranno argomento di un futuro post, ma questo spazio lo dedicheremo completamente alla discussione sulla principale e più utilizzata periferica seriale: USART.
L’interfaccia seriale USART (Universal Synchronous and Asynchronous Serial Receiver and Transmitter) soprattutto nei sistemi a microcontrollore, è sicuramene tra quelle più utilizzate, perché la sua implementazione è relativamente semplice, il driver hardware è già integrato all’interno del microcontrollore e sono disponibili diverse librerie software per la gestione della comunicazione, quindi vi sto dicendo che ci dobbiamo metterci solo all’opera per realizzare un esempio didattico per un progetto che usa la periferica seriale RS232. .
Differenza tra protocollo seriale e parallelo
Le prime stampanti, erano connesse al PC tramite la porta parallela, il connettore utilizzato era nella maggior parte dei casi un Cannon a 25 pin (Figura 2), di dimensioni decisamente maggiori rispetto al cavetto USB, che normalmente oggi usiamo per connettere le nostri stampanti.
La porta parallela per il trasferimento dei dati usa un parallelismo a 8 bit (ogni bit ha un proprio cavo di connessione), oltre ai segnali di controllo e gestione della comunicazione, in totale sono necessari 17 cavi di connessione, dal diametro non trascurabile e da una discreta rigidità che lo rende poco agevole da gestire.
Nei PC, dove è ancora montata la porta parallela, generalmente, è gestita da un unico bus interno, che collega più periferiche contemporaneamente con lo scopo di ridurre al minimo l’uso dei pins I/O. In un microcontrollore, come l’ATmega328 con risorse molto limitate è impensabile dedicare ben 17 pins di I/O per realizzare un unica interfaccia parallela per le comunicazione esterne.
Nei primi microcontrollori nacque subito l’esigenza di progettare una periferica che richiedesse poche risorse e fosse semplice da integrare, anche in dispositivi che avessero un hardware molto limitato. L’interfaccia seriale, è sicuramente la migliore soluzione, perchè in particolare, il protocollo RS232 prevede, per la comunicazione base, l’utilizzo di solo due pins (TX e RX) e un cavo di massa, per avere un riferimento comune tra i due dispositivi coinvolti nella comunicazione.
Protocollo di comunicazione USART o RS232
Se la trasmissione dei dati è asincrona (nella maggior parte dei casi), il clock non è usato per sincronizzare i dati durante la comunicazione, ma si usano particolari bits che sono aggiunti ai dati da trasmettere, come i bits Start e Stop (vedi Figura 3) , che indicano al ricevitore l’inizio e la fine della trasmissione.
Il trasmettitore e il ricevitore, prima di avviare la comunicazione, devono essere configurati, per associare ad entrambi gli stessi parametri con quali i dati devono essere trasmessi, per esempio, bisogna impostare la velocità di comunicazione (con quale frequenza i dati sono trasferiti sul bus) quanti bit di stop devono essere utilizzati e se deve essere abilitata la funzione del check sui dati ricevuti, con il bit di parità. Nella Tabella 1, sono indicate le velocità standard utilizzate per il protocollo RS232.
I microcontrollori, hanno un proprio bus interno per la comunicazione tra le periferiche, come le memorie gli ADC ecc. prima di trasferire i dati sul bus seriale della RS232, devono serializzarti, tramite uno shift register integrato nel driver hardware, in ricezione il processo è inverso (vedi Figura 4).
START BIT
Quando non c’è trasferimento di dati, la periferica RS232, integrata nei due sistemi coinvolti nella comunicazione, sono in uno stato di idle, cioè di attesa, l’uscita TX (trasmissione) si pone nello stato alto, fino a quando non inizia una nuova trasmissione. Quando uno dei due sistemi ha necessità di avviare una comunicazione, la linea TX è posta a livello basso , per la durata di un periodo della frequenza di trasmissione impostata , in questo modo, il ricevitore riconosce il cambiamento di stato e si pone in ascolto per campionare i dati ingresso.
DATI INGRESSO
Successivamente all’invio del bit di START, inizia la trasmissione dei dati e il ricevitore campiona l’informazione trasmessa sul bus. Solitamente la lunghezza dei dati è di 8 bit.
BIT di PARITA’
Le linee di comunicazione elettrica possono essere influenzate da disturbi causati da accoppiamenti elettromagneti, disturbi sulla rete d’alimentazione ecc. che possono causare degli errori in ricezione, per diminuire la probabilità d’errore e riconoscere l’errata ricezione dei dati, in coda , subito dopo l’invio degli 8 bit di data, è trasmesso anche un bit di parità, che può essere sia alto che basso in funzione dell’informazione trasmessa.
Per esempio, se il numero dei bit “1” trasmessi è dispari, il bit di parità è posto a valore “1” viceversa se il numero di bit “1” è pari. In questo modo se il dato ricevuto ha un bit corrotto, il ricevitore può riconoscere l’errore perché il bit di parità non è coerente con la logica descritta in precedenza, nel caso in cui ci fossero più di un bit corrotto in questo caso l’errore potrebbe non essere rilevato.
BIT di STOP
Dopo la trasmissione del bit di parità, per comunicare al ricevitore che la trasmissione è conclusa si accoda il bit di STOP, e la linea rimane nello stato alto fino a quando non sarà trasmesso un nuovo dato.
Standard elettrico RS232
Le comunicazioni su linee elettriche, come accennato in precedenza, possono essere influenzata da disturbi prodotti da apparecchiature elettriche e/o elettroniche , sotto forma di campi elettromagnetici o di disturbi sulla linea elettrica. Quando il disturbo è prodotto dai campi elettromagnetici accoppiati, maggiore è la lunghezza del cavo usato per la connessione è maggiore può essere l’accoppiamento e di conseguenza il rumore presente sul canale di comunicazione.
In ambienti, particolarmente rumorosi, recuperare l’informazione potrebbe risultare difficile o impossibile, pertanto, è necessario adottare delle misure aggiuntive, oltre al bit di parità, per salvaguardare l’integrità dell’informazione trasmessa. Uno dei metodi più utilizzati è quello della schermatura del cavo di comunicazione, ma questo non ci protegge da eventuali disturbi presenti sulla linea d’alimentazione.
Per aumentare il livello d’immunità al rumore, un altro metodo è quello di aumentare i livelli di tensione associati ai bit trasmessi sulla linea, per questo motivo il protocollo di comunicazione RS232 prevede livelli elettrici compresi tra -12V a +12V, ma, il microcontrollore ATmega328, gestisce solo livelli logici compresi tra 0 a 5V. Per garantire una maggiore immunità al rumore, per le comunicazioni seriali RS232 si utilizza un traslatore di livelli i logici in uscita al microcontrollore , per esempio il circuito integrato MAX232.
Infatti, quest’ultimo dispositivo, associa al livello logico di 0V una tensione di +12V, mentre, 5V a -12V, viceversa per l’ingresso del microcontrollore. In questo caso abbiamo aumentato il divario tra i due livelli logici e di conseguenza l’immunità al rumore, poichè, per corrompere l’informazione e renderla indecifrabile dal ricevitore, il rumore deve avere un entità molto maggiore rispetto ai livelli logici 0-5V.
Vantaggi della comunicazione USART
- La comunicazione base prevede l’utilizzo di solo due cavi di connessione.
- Non è necessario il clock
- Ha un sistema, con il bit di parità, di riconoscimento di un errore sulla trasmissione dei dati
- E’ un protocollo ampiamente utilizzato e documentato
Svantaggi della comunicazione UART
- La lunghezza massima dei dati che si possono trasmettere per ogni singola trasmissione è limitata a 9 bit
- Non supporta una connessione multi sistema.