Parliamo di:

INTERFACCIA SERIALE ASINCRONA STANDARD RS232journal.gif (11761 byte)

Tutorial curato da : Maurizio

Vediamo innanzitutto di spiegare cosa si intende per interfaccia seriale:

La definizione in effetti nasce dal modo in cui i dati stessi vengono inviati da un dispositivo ad un altro. SERIALIZZARE dei dati significa inviarli uno dietro l'altro sullo stesso portante fisico

Possiamo per chiarire meglio il concetto immaginare una serie di auto accodate lungo una strada ad un'unica corsia.

Appare evidente che visto le caratteristiche della strada (portante fisico) ,questa non potra essere attraversata da più di un'auto alla volta .

Diversa sarebbe invece la situazione qualora si trattasse di una strada larga con più corsie ,infatti più macchine potrebbero effettuare l'attraversamento della stessa contemporaneamente e PARALLELAMENTE.

Ma torniamo alla natura di un collegamento seriale ,dall'esempio trattato si intuisce facilmente che il numero di auto che possono attraversare la strada (portante fisico) nel tempo di riferimento dipende pertanto dalla velocita dei mezzi che la percorrono.

Nel caso delle autovetture naturalmente si parla di Km/h (a proposito fate attenzione ai nuovi autovelox) mentre per la trasmissione dati si intende misurarne il flusso in Baud e cioè in Bit x Secondo (attenzione Bit e non Byte x secondo), infatti si sente parlare spesso di parole come Baud Rate per specificare la velocita dei bit trasmessi o ricevuti su una interfaccia.

Nella trasmissione seriale esistono comunque metodologie funzionali diverse, ovvero:

a)Trasmissione Seriale Sincrona

b)Trasmissione Seriale Asincrona

Queste differiscono tra loro sostanzialmente per come vengono trattate Dal dispositivo trasmittente o ricevente

Nel caso della trasmissione seriale sincrona (a) innanzitutto occorrono minimo due fili che vengono rispettivamente utilizzati per la trasmissione/ricezione dei dati e per la trasmissione/ricezione del CLOCK.

Si sente spesso parlare di clock (clock di cpu, clock di conversione, clock dei dati etc etc....) La domanda pertanto potrebbe nascere spontanea : ma cosa si intende per CLOCK ? ,un bel dilemma per chi si affaccia per la prima all'elettronica digitale.

letteralmente significa orologio e in effetti non a caso è stato utilizzato questo termine,infatti così come l'orologio scandisce i secondi i minuti e le ore, il clock scandisce la persistenza di un valore fisico nell'istante di tempo considerato, verificandondolo per l'appunto.

Tutto ciò si riallaccia con il discorso della trasmissione Sincrona e Seriale ,dove per entrambe occorre sempre e comunque un clock ,sia che si tratti di clock trasmesso su di un portante dedicato (ad esempio un filo solo per il clock) oppure di un clock generato localmente sia dalla stazione trasmittente che dalla stazione ricevente

Quando infatti una stazione sincrona trasmette il proprio dato seriale verso una stazione ricevente, provvede innanzi tutto ad inserire il dato sul portante fisico dedicato (1mo filo) e poi provvede a delimitare la sua validità trasmettendo su il secondo filo dedicato, un impulso di clock ,affinchè la stazione ricevente sia informata di prendere in considerazione solo il valore del dato trasmesso nell'intervallo di tempo delimitato dall'impulso di clock ricevuto

Naturalmente come mezzo trasmissivo è possibile utilizzare varie fattispecie, infatti al posto di due fili potremmo utilizzare una portante in radiofrequenza con due canali di cui uno dedicato ai dati e l'atro alla trasmissione\ricezione del clock.

I vantaggi della modalità sincrona sono senza dubbio derivati da una elevata verocità di trasmissione dei dati unita ad un minore tasso di errore in quanto per la natura stessa (sincrona) del campionamento dei bit risultano piu improbabili errori di interpretazione da parte della stazione ricevente.Di contro le risorse trasmissive impegnate sono maggiori.(due fili al posto di uno)

La trasmissione Seriale Asincrona invece, pur essendo molto più limitata nella velocita risulta SENZALTRO più utilizzata sopratutto nelle interfaccie RS232 dei personal.

Il principio di funzionamento si basa sulla trasnissione dei bit su di un un unico filo e sulla ricezione degli stessi su di un'altro (in tutto due fili ovvero uno TX e uno RX) a differenza della sincrona che invece impegna almeno 4 fili (1 TX DATA + 1 TX CLOCK + 1 RX DATA + 1RX CLOCK)

Il Trucco consiste nell'inviare una flag o meglio un bit di start di valore convenuto all'oscillatore del clock remoto, ovvero sulla stazione ricevente, in modo tale che questo si sincronizzi esattamente con quello della stazione trasmittente.Quindi più esattamente per ogni byte trasmesso sarà sempre aggiunto un bit di sincronismo (il primo della sequenza) e generalmente anche un bit di chiusura della parola trasmessa.e in alcuni casi se la parola da inviare viene settata a 7 bit potremo accodarci un bit di parità che verrà utilizzato dalla stazione ricevente per effettuare un semplice controllo della correttezza dei 7 bit di dati ricevuti

Ovvero se consideriamo i 7 bit che rappresentano il dato da trasmettere e il caso specifico in cui il numero di bit messi ad 1 risulta in quantità dispari (esempio 1110000P) , per implementare un controllo di parità potremo decidere di mettere ad uno anche l'ottavo bit della sequenza (P) , affinchè il numero complessivo di bit trasmessi a livello uno sia sempre pari (caso della parità pari), oppure prevedere l'esatto opposto , e cioè porre ad uno il bit della parità qualora il numero di uno presente nei 7 bit che lo precedono sia pari (parità di tipo dispari)

Avremo pertanto >> 1Bit di Start + 7/8 bit di dati + 1bit di stop + 1 eventuale bit di parità (solo se i bit dedicati ai dati sono 7)

Ribadiamo che il controllo di parità non è certamente uno dei più affidabili e inoltre non può essere utilizzato quando la parola da trasmettere è di 8 bit . (lo standard prevede Max 10 bit)

Il primo bit della sequenza (bit di start) serve per sincronizzare la stazione remota per la ricezione dei prossimi 7/8 bit ,ovvero di quelli che rappresentano il dato vero e proprio da trasferire, mentre l'ultimo bit (10mo) , chiude la trama ovvero la sequenza di bit della parola corrente.

Possiamo ora rappresentare graficamente ciò che finora è stato esposto :

Da come si può constatare dalla rappresentazione grafica ogni parola è appunto formata da 10 bit, notiamo inoltre come il ricevitore esegue la lettura dei singoli bit .

Cioè, avverrà che dopo la ricezione del primo fronte positivo ,il ricevitore, comincierà ad aspettare per la lettura del primo bit di dati un periodo di tempo pari a 1,5 volte la durata di bit.

Perchè 1,5 volte??

Intanto perchè deve scartare il primo bit della trama (bit di start) la cui funzione è appunto di dare il via alla funzione di ricezione e campionamento dei bit e poi perchè così il valore dei bit successivamente analizzati sara il più affidabile possibile per quanto riguarda una corretta interpretazione.

Notiamo appunto che così facendo il momento della lettura di ogni bit di dati, coincide esattamente al centro della durata di ognuno ,sopperendo così ad eventuali problemi di jitter di fase in RX , interferenze di vario genere ed eventuale imprecisione del generatore del clock on board ,sulla stazione ricevente.

In effetti si tratta di un sistema molto semplice che per questo,consente di essere implementato con un minimo dispendio di risorse hardware e software.La sua diffusione e pressoche universale, infatti, lo troviamo oltre che nelle interfaccie RS232 ,nei telecomandi per automatismi e antifurti.

Il numero dei bit della parola poi non e detto che debba essere per forza limitato a 7/8 bit ,ma consente di essere adattato con flessibilità ragionevoli alle esigenze della applicazione specifica.

 

Vediamo adesso come si debba procedere per implementare una trasmissione seriale

Intanto dobbiamo stabilire una regola univoca ,affinchè ad un determinato valore del bit (0 oppure 1), il corrisponda univocamente un determinato valore di tensione (0V /-12Vper il bit=1 oppure +12V per il bit=0)

Praticamente se devo trasmettere un bit a livello 1 utilizzerò un livello di tensione di 0 volts oppure di -12 Volts, mentre se il bit da inviare è =0 lo codificherò a livello +12Volts

Una volta stabilito ciò devo affinche possa iniziare la mia trasmissione devo innanzitutto avvisare la stazione ricevente della mia iniziativa , inviandogli un bit cosidetto di start ,il quale servira per sincronizzare correttamente il ricevitore ,affinche questo comminci a campionare i bit in ingresso a partire dal momento in cui a ricevuto il primo bit a livello zero (bit di start)

Pertanto il primo bit inviato è sempre messo a zero e ha la funzione di avvisare il ricevitore che deve cominciare la decodifica dei bit successivi fino ad un numero massimo secondo quanto stabilito dallo standard convenuto (esempio 10 bit Max per la RS232)

Nel caso volessimo realizzare un dispositivo che realizzi ciò le strade possono essere diverse :

a) Tramite circuiti completamente hardware realizzati con contatori e porte logiche

b) tramite l'uso di dispositivi basati su microcontroller (esempio ST6)

Prima di analizzare il punto b, credo sia utile per una maggiore comprensione dell'argomento trattato visionare il circuito sperimentale che segue :

Descrizione funzionale e circuitale.....

L'impresa è abbastanza ardua , ma vediamo di semplificare al massimo.

Cominciamo con dare uno sguardo al circuito di ingresso (vedi sopra parte nominata RS232) notiamo che ci sono dei ripiegamenti dei circuiti di interfaccia e cioè:

C108 con C107 , ovvero Data Terminal Ready con Data Set Ready : il primo di questi viene posto alto dal terminale (esempio un computer in emulazione TTY) e cioè a +12V, serve ad indicare che il nostro terminale è attivo, ovviamente a questa indicazione deve seguire una conferma da parte del DCE (Data Control Equipment) ovvero del modem o di dispositivo che ne fa le veci , come nel caso della nostra interfaccia.hardware.

Nel caso specifico 'informiamo' il nostro Terminale che la nostra interfaccia risponde immediatamente e costantemente al C108.

 

C105 con C106 con C109 , ovvero Request To Send con Confirm To Send con Carrier Detector. --Il Primo viene portato alto dal terminale quando effettivamente richiederà di trasmettere , cioè ad esempio, avverra che il DCE (per esempio un modem) emetterà la portante solo quando il terminale oltre ad essere attivo (C108 alto a +12V) sarà pronto a trasmettere'(C105 messo alto a +12V). --Il terminale pertanto , potrà cominciare a trasmettere i dati solo dopo che vedrà innalzare il C106 , (risposta al C105), e questo avverrà , solo e soltanto dopo che il DCE (modem) , a sua volta, vedrà alta la portante in ricezione, (trasmessa dal DCE remoto sui fili fonici), cosa che dovrà essere notificata dal modem al terminale con l'innalzamento del C109 , il quale se è a livello alto indica appunto , la presenza della portante in ricezione sulla linea fonica (doppino telefonico o linea dedicata a 2 o 4 fili).

Oltre tutto troviamo il C102 ovvero il ritorno comune dei segnali (massa), il C103 ovvero Tx Data , dove il terminale locale (DTE) invia i dati che devono essere trasmessi a l DTE remoto , e infine il C104 dove vengono ricevuti i dati diretti dal modem al terminale locale, .

Ricordiamo ancora , che nel caso specifico al posto del modem utilizzeremo la nostra interfaccia seriale / parallela che provvederà a convertire i dati seriali che dal nostro computer fuoriescono sul pin C103 , nei medesimi disponibili però in forma parallela sul Shift Registeter 74HC164.

Riguardo il C104 vale invece il discorso inverso, ovvero in questo pin il nostro terminale riceverà i dati che eventualmente il modem riceverà dalla linea fonica , provvedendo dopo la loro demodulazione ad inviarli serialmente al proprio terminale sul pin C104 in questione.

ATTENZIONE PRECISIAMO CHE NEL CASO SPECIFICO QUESTA INTERFACCIA SERIALE / PARALLELA E' UNIDIREZIONALE, ovvero consentirà solo di converire il formato dei dati entranti sul pin C103 , da seriale a parallelo e non viceversa .

----

Passiamo adesso a descrivere l'hardware e il funzionamento della nostra interfaccia:

Notiamo che il segnale digitale uscente dal C103 della RS232 , viene applicato sulla Nand (A1) di tipo triggerato, la quale dopo averlo adeguatamente ripulito da eventuali spurie ,provvede ad inviarlo parallelamente alle Nand (A2) e (A3).

In particolare la Nand (A3) trasmette riportandolo in fase il segnale digitale verso la SIPO (registro Serial In Parallel Out) siglata 74HC164, mentre la Nand (A2) insieme con la Nand (A4) , provvede in presenza del bit di start (+5V) ad abilitare la generazione del Clock da parte del cmos CD4060 , il quale partendo dalla frequenza generata da un quarzo di 2,4576 Mhz , rende disponibili appunto due frequenze, e cioè 9600 e 19200 Hz , rispettivamente per un baud rate di 4800 e 9600 bit/sec.

Queste due frequenze di clock risultano appunto pari al doppio della velocita di trasmissione e ricezione della nostra interfaccia

Ma in dettaglio cosa avviene all'avvento del bit di start ?

Innanzitutto come già accennato, il clock viene abilitato, (pin 12 del 4060) e pertanto da questo istante in poi il contatore Cmos di tipo CD4017 può ben cominciare a contare per un max di 9 impulsi, durante i quali tutti i bit successivi allo START verranno abilitati ad essere scritti sul registro seriale-> parallelo di tipo 74HC164 (ogni impulso delimita il tempo di durata un bit).

Dopo avere contato 9 impulsi di clock il 4017 porterà a +5V il suo pin 11, in modo tale che si generi l' autoinibizione del conteggio al termine del nono impulso contato, e pertanto anche al termine del caricamento sul registro seriale / parallelo di tutti gli 8 bit che compongono il dato.

Infatti, il livello di +5V viene riportato tramite il diodo 1N4148 direttamente al pin 13 di abilitazione del contatore stesso, il quale rimarra congelato in questo stato di conteggio, fino a quando un impulso di reset , non verrà generato dalle NAND B1 e B2, le quali, a loro volta , verranno però abilitate dallo stesso segnale uscente dal pin 11 responsabile in precedenza del congelamento del conteggio .

Ciò avverrà comunque con un piccolissimo ritardo dato dalla rete RC (100n + 1Mega) tra l'ingresso della NAND B1 e massa, la cui durata effettiva sarà comunque uguale o di poco superiore alla lunghezza del periodo del bit di stop.

 

Naturalmente il primo impulso di START non verrà memorizzato in quanto non significativo ai fini dell'informazione contenuta sul byte da decodificare.

continua ......

 

 

Aggiornato al : 27 / 01 / 1998

 

 

 

 

 

 

Questa Pagina è stata visitata Volte