Chiamate il Tecnico   -  via Strada Sannitica 31 - Casoria - Na    Tel 338-8208651     e-mail:  cobucci.t@inwind.it

 
 

La comunicazione Seriale

 
Per comunicazione seriale,  si intende una trasmissione di dati costituita da una lunga sequenza di alti e bassi ... 1 e 0 che si susseguono l'uno in coda l'altro e che codificati contengono un'informazione.
Avete mai sentito parlare di Codice Morse ? ... ebbene in quel caso avremmo parlato di tratti e punti o suono corto e lungo, qui invece il nostro messaggio è del tipo :
10110001011000100101001010101010100000101011010110.......
 
Inizieremo col dire, che la comunicazione seriale può avvenire in due modi : Sincrona ed Asincrona, andiamo quindi ad analizzarli.
 
Comunicazione seriale Sincrona.
 
Com'è facile intuire dalla parola, la comunicazione Sincrona, avviene in presenza di un segnale di sincronismo, ovvero un segnale di clock.
La trasmissione seriale Sincrona prevede perciò due linee distinte ... una per i dati, l'altra per il clock.
Il clock è generato dalla fonte di trasmissione ed è usato dalla fonte ricevente al fine di stabilire con assoluta precisione la collocazione dei dati presenti sulla prima linea.
La trasmissione seriale Sincrona permette velocità di comunicazione più elevate, rispetto alla Asincrona, ed è possibile, a differenza della Asincrona, inviare interi pacchetti di dati, preceduti da una sequenza di inizio (header) e succeduti da una sequenza di fine (tail).
Nella sequenza di fine è possibile include anche un codice di controllo, per consentire al ricevente di effettuare una verifica dei dati ricevuti.
Le due Linee, chiamate SDA (Dati) ed SCL (Clock),  sono del tipo a collettore aperto ( elettronicamente parlando, richiedono una resistenza di Pull-Up). La linea SDA e' di tipo bidirezionale, e permette lo scambio dei dati tra i dispositivi I2C collegati, mentre la linea SCL e' unidirezionale e serve come clock per sincronizzare la comunicazione. 

Dispositivi comuni che usano questo metodo di comunicazione sono ad esempio le EEPROM della famiglia 24Cxx.

la Sequenza di inizio (Start - Header), in una trasmissione di dati, prevede il passaggio dallo stadio 1 a quello 0  della linea SDA mentre la linea SCL è alta, ovvero con una durata di 1/2 periodo di clock.
La sequenza di fine (Stop - tail) prevede il passaggio da 0 ad 1, nel momento in cui SCL è alto, sempre con la durata di 1/2 periodo di clock.

La condizione di riposo prevede che i due segnali siano Alti.

                                            
I dati vengono trasmessi a byte (8 bit alla volta), e alla fine della sequenza troviamo un nono bit basso ( inviato dalla sezione ricevente ), a conferma dell' avvenuta ricezione. Questo bit è detto di ACKNOWLEDGE (ACK)
Resta ancora da dire che il valore del Bit (Alto/Basso) è valido solo quando il clock è alto, tutte le variazioni sull'SDA sono da considerarsi irrilevanti quando il clock e basso.
La trasmissione del dato parte sempre dal bit più significativo (MSB).
 

Come è possibile vedere nella figura, il passaggio dal bit Alto al Basso e viceversa, avviene sempre quando il clock è basso.
Ogni dispositivo collegato al bus I2C funge o da slave o da master ed è identificato da un indirizzo univoco a otto bit lo SlaveAddress.

Lo SlaveAddress è un ottetto di Bit, i primi 4 vengono rilasciati dal costruttore del componente elettronico, i successivi 3 servono per indicare il dispositivo sul Bus I2C (A0,A1,A2), l'ultimo è il R/W... il master cambiando questo Bit, indica allo slave se vuole leggere o scrivere.

 
Un semplice I2C Bus per la comunicazione seriale possiamo ottenerlo semplicemente realizzando lo schema sotto riportato (famoso JDM)
 

 
 
 
Ora vediamo invece come si può realizzare un semplice programmatore I2C bus su porta parallela.
 
Se analizziamo la piedinatura della porta LPT possiamo tirare le prime cifre...

 
I Pin dal 18 al 25 sono la nostra massa, decidiamo quale Pin utilizzare per In, Out e Clock.
 
Se stabiliamo per esempio come pin di Uscita il Pin 2 (D0) Ingresso il Pin 10 (S6) e clock il pin 16(C2) uno schema potrebbe essere il seguente
 

 
Bisognerà ora realizzare un programma per scrivere sul Bus. Il Software, dovrà in sintesi compiere 5 operazioni base :
 

- inviare il segnale di start;

- trasmettere l'indirizzo dello slave;

- trasmettere l'indirizzo del particolare registro interno su cui andare a scrivere (opzionale);

- trasmettere il dato da scrivere sul registro;

- ricevere l'ancknowledge

- segnale di stop.

 
Vediamo ora qualche passaggio in Basic :
 

*****************************

 
Impostiamo i registri della porta
Scl = &H37A
Sdaout = &H378
SdaIn = &H379
 

Invia la sequenza di start :

StartScritturaLettura:
'****************************************************************************

Output Sdaout, 0
Output Scl, 0
Return
'****************************************************************************
 

 
Inviare un Byte :

SendByte:
'****************************************************************************

 For i = 7 To 0 Step -1
   Bit = ByteH And 2 ^ i
     If Bit > 0 Then  Bit = 1 Else Bit = 0
        Output Sdaout, Bit
         '*******  clock. *******
        Output Scl, 4
        Output Scl, 0
        '*********************
     Next i

Output Sdaout, 1
Return 
'****************************************************************************

 
 
Comunicazione seriale Asincrona.
 
la prima cosa che si può dire della Comunicazione Seriale Asincrona è che dispone di una sola linea di dati.

Sembra difficile, dopo aver studiato il metodo di Comunicazione Sincrona, spiegare il come si faccia a ricostruire l'informazione avendo a disposizione la sola linea dati ... in realtà il tutto è supportato da una gran quantità di regole standard senza le quali tutto questo sarebbe impossibile.

Le regole di cui sopra, impongono quindi determinate caratteristiche Hardware e Software, tali per cui quando due sistemi si trovano a dover comunicare, questi risultano pienamente compatibili.
Es. RS232 - RS422 - RS485
 
Abbiamo visto come uno dei compiti assegnati al clock, è anche quello di avvisare la sezione ricevente di prepararsi a ricevere i dati ... resta il fatto che nella comunicazione Asincrona questo manca ...
 
Vediamo quindi cosa accade quando inizia la trasmissione del Byte...

Com'è facile intuire, viene inviata una sequenza di Start, questa è necessaria affinché si metta in moto tutto il meccanismo.

 
Supponiamo di avere una condizione di riposo e che quindi la linea sia costantemente a livello logico 1 ... una variazione dello stato logico, ovvero il passaggio da 1 a 0, avverte il ricevente che la trasmissione è iniziata.

A questo punto, la sezione ricevente attiva un clock interno, impostato ad una determinata velocità di decodifica dei dati.

le velocità consentite dallo Standard RS232 vanno da :    75 Bps  a 128kBps.
 
E facile comprendere quindi che,  se le due parti sono state configurate per una trasmissione a 19200Bps, avremo un treno di bit in cui ogni bit avrà la durata di 52 microsecondi.
Terminato il Bit di Start, la sezione ricevente, saprà precisamente con quale frequenza interpretare i dati in arrivo, inizierà quindi a leggere con la cadenza preimpostata.
Terminato il Byte avremo la sequenza di Stop, che nello standard RS232 può prevedere 1, 1-1/2 o 2 Bit, questa volta Alti ( cioè 1), che riporteranno la linea alla condizione di riposo.
 

 
la sequenza di Bit, in questo caso va dal meno significativo LSB (D0)  al più significativo MSB (D7), applicando il Bit di Start (0) in testa ed il Bit di Stop in coda.

*************

E' importante a questo punto fare una considerazione.

la comunicazione seriale Asincrona spesso e volentieri la si ritrova come Standard sui PC. Il Dato, in questo caso, non nasce seriale ...  non stiamo parlando di un bus I2C dove tutti i componenti comunicano allo stesso modo su 2 Linee,  Il nostro Dato è generato da un processore che nel nostro caso usa un Bus Parallelo.

Quando dobbiamo quindi inviare un Byte è importante sapere che, esiste un componente elettronico che esegue il lavoro di trasformare un Byte da Parallelo in Seriale, stiamo parlando della UART (Universal Asyncronous Receiver/Trasmitter)

 *************

 

Prima di finire, dobbiamo introdurre però un'altro Bit ... il così detto Bit di parità, che anticipa il Bit di Stop, e che  è necessario al fine di assicurare la corretta ricezione.

 

In realtà succede che il sistema risulta facilmente disturbabile da interferenze esterne...

...  inoltre il Bit, a differenza della comunicazione Sincrona, non viene letto durante il periodo di clock Alto, ma ( e questo anche a seconda delle specifiche tecniche ) verrà interpretato magari sul fronte di salita o di discesa del clock locale.

 
Se si osserva la figura seguente, si può capire che l'interpretazione del Bit avviene a volte anche a metà periodo del Bit.
 

ecco che, commutazioni improvvise dovute ad eventuali interferenze, possono causare l'errata interpretazione del Byte.

Il Bit di parità ( a seconda del caso se Pari o Dispari ) conferma la trasmissione.

 
Se per esempio adottiamo un Bit di parità Pari, questo sarà 0 se il numero di bit nel Byte trasmesso è pari, se il numero di Bit trasmessi e Dispari, il bit di parità sarà Alto ... cosi che il numero di bit trasmessi sarà sempre un numero Pari, avremo quindi :
 

 
Il discorso sulla Comunicazione seriale Asincrona potrebbe considerarsi terminato ...
 
... per cercare però di ottenere un esempio pratico, dobbiamo aprire una piccola parentesi ed affacciarci su un esempio di Comunicazione Seriale Asincrona che ci sia il più familiare possibile.
Il caso più familiare che abbiamo, è proprio quello della seriale del nostro PC.
In più, a tutto quello che abbiamo detto fin ora sulla nostra comunicazione, c'è da aggiungere che :
Il treno di Bit mostrato nella figura precedente, viene fuori da un particolare componente chiamato UART, costruito per convertire i dati dal formato Parallelo ( così come presenti sul Bus ) in Seriale. Questa sequenza di Bit ha 2 livelli logici ormai comuni che sono 0 e 1, ovvero 0V e 5V.
 
Il segnale che troviamo sul nostro connettore seriale (9 o 25 Pin) posto sul retro di un PC è diverso, ed è diverso perchè... al fine di diminuire i disturbi e le perdite di tensione sul cavo, lo standard RS232 ha adottato livelli logici diversi ... il Bit vale 1 quando il valore di tensione è compreso tra -3V e -25V, il Bit vale 0 quando il valore di tensione è compreso tra +3V e +25V.
Siccome sui nostri PC le tensioni più alte disponibili sono +12V e - 12V ...  vengono adottate queste per la trasmissione, avremo quindi il seguente risultato:
 

 
I componenti interessati in questo frangente erano in origine 2, un Driver di linea MC1488 in grado di traslare il livello di tensione dallo stato TTL a quello RS232 con relativa inversione, e preparare quindi il segnale ad essere trasmesso. Alla ricezione, c'era un secondo componente l' MC1489 ovvero un ricevitore di linea in grado di fare l'operazione inversa ... ribaltare il segnale e riportarlo a livello logico TTL.
I tempi nel frattempo corrono, e questi due hanno lasciato il posto ad un unico componente, Il Max232, molto più compatto ed in grado di gestire contemporaneamente In e Out.
 
L'architettura interna di una seriale da PC sarà quindi :
 

 
analogamente  uno schema per connettersi ad un qualsiasi apparecchio con Comunicazione RS232 sarà :
 
 
Questo in figura è uno dei tanti schemi che si trovano in giro su Internet per la connessione con i Cellulari, personalmente realizzato e testato.
 

 
 
 
 
 
 
       
       
    WebMaster: Tommaso Cobucci