Ricetrasmissione seriale

Generalità
Il Pic16f877 consente due tipi di trasmissione seriale, sincrona e asincrona. In questa pagina ci occuperemo della trasmissione asincrona, attraverso la quale è possibile effettuare un collegamento seriale fra un Pic16f877 ed un pc con un programma tipo hyperterminal. La trasmissione seriale ha soppiantato quella parallela per il fatto che oggi come oggi le velocità raggiunte dai dispositivi seriali sono molto elevate e quindi confrontabili, se non migliori, di quelle che si ottenevano con la trasmissione parallela. Ci si riferisce quindi allo standard RS232 che prevede particolari livelli logici di riferimento e particolari velocità. Principalmente lo standard RS232 si occupa di traslare i segnali TTL provenienti da un sistema trasmissivo in segnali RS232. I segnali TTL sono 0V (0 logico) e 5V (1 logico). Nello standard RS232 invece lo 0 logico corrisponde a +12V e l%u20191 logico corrisponde a -12V. Abbiamo quindi una maggiore tensione differenziale fra i due livelli logici in modo tale da ottenere una elevata immunità ai disturbi elettrici anche su lunga distanza. Nella realtà, a seconda dei dispositivi, possiamo avere tensioni, per lo 0 logico comprese fra +3V e +18V e tensioni, per l%u20191 logico, comprese fra -3V e -18V. Si possono anche avere altri standard di ricetrasmissione seriale come l%u2019RS422 e l%u2019RS485 che garantiscono una immunità al rumore ancora maggiore. Vediamo ora di seguito, in figura 1, un segnale TTL traslato su livelli RS232 e quindi pronto per essere trasmesso in linea.


Traslazione livelli TTL-RS232
TTL-RS232
Figura 1

Come si può vedere i livelli di tensione in gioco cambiano. Ovviamente in fase di ricezione si effettuerà l%u2019operazione inversa andando ad effettuare una conversione da RS232 a TTL. Nel caso riportato da questi grafici siamo in presenza di una trasmissione seriale 8n1 che significa 8 bit di dati, nessuna parità e 1 bit di stop. Il bit di start è sempre presente e corrisponde ad uno 0 logico, anche il bit di stop corrisponde ad uno 0 logico. Nel nostro caso, con una velocità di 19200 bps avremo un tempo di bit pari a 52.083 uS (1/19200). Per quanto riguarda il Pic16f877 abbiamo già al suo interno un dispositivo USART che permette la ricetrasmissione seriale. Per traslare i livelli a quelli compatibili con la standard RS232 dobbiamo fare seguire al Pic un circuito apposito costituito un integrato che si occupa di effettuare questa traslazione. Nel nostro caso è stato usato un Max232 che a partire da una singola alimentazione a +5V è in grado di generare i segnali a +/- 12V attraverso il meccanismo della pompa di carica. Sono altresì disponibili queste tensioni che possono essere prelevate per farne l%u2019uso che più ci aggrada. Bisogna comunque tenere conto del fatto che non è possibile richiedere a questo integrato l%u2019erogazione di una corrente eccessiva che andrebbe a scapito della ricetrasmissione in corso. La traslazione potrebbe anche essere fatta con una circuiteria discreta a patto che si abbiano a disposizione le due tensioni a +/- 12V.
Per effettuare delle verifiche e degli esperimenti si può utilizzare un Pc con un programma tipo hyperterminal con il quale trasmettere e ricevere dati in seriale. Ovviamente andrà configurato secondo la velocità scelta e con il tipo di trasmissione adatta. Nell%u2019esempio di figura 1 l%u2019hyperterminal andrà impostato a 19200 bps, 8 bit di dati, nessun bit di parità, 1 bit di stop e nessun controllo di flusso. A riposo il l%u2019uscita si trova ad 1 per cui ad un a tensione di -12V, poi viene trasmesso il bit di start che è lungo 1 tempo di bit e di seguito gli 8 o 9 bit di dati. Alla fine viene trasmesso un bit di stop (0 logico, +12V), dopodichè la linea si pone in stato di riposo a -12V (1 logico). Il baud rate è definito come il numero di bit trasmessi al secondo. Come si può notare, per trasmettere un byte, occorrono effettivamente 10 bit, (1 bit di start, 8 bit dati e 1 bit di stop), quindi a 19200 bps occorreranno circa 520 uS. Quando si deve effettuare un trasferimento di dati seriale occorre tenere conto di questo dato per avere una stima di massima sul tempo di trasferimento dei dati. Se ad esempio dobbiamo trasferire un file di 1 Mbyte = 1024 Kbyte = 1024 * 1024 byte = 1048576 byte occorreranno circa (520 * 1048576) uS cioè circa 9 minuti.
Stampa la pagina