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’1 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’1 logico, comprese fra -3V e -18V.
Si possono anche avere altri
standard di ricetrasmissione seriale come l’RS422 e l’RS485 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
Figura 1
Come si può vedere i livelli di
tensione in gioco cambiano.
Ovviamente in fase di ricezione
si effettuerà l’operazione 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’uso che più ci aggrada.
Bisogna comunque tenere conto del fatto che non è possibile richiedere a questo
integrato l’erogazione 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’esempio di figura 1 l’hyperterminal
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’uscita 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.