INTERFACCIAMENTO PC CON LCD • Progetto di Marco Romani. • Interfacciamento attraverso porta seriale e parallela. LA PORTA SERIALE Introduzione • La porta seriale è un dispositivo di collegamento del computer ad altri computer o periferiche (come modem o macchine di controllo numerico). La comunicazione di questa porta è detta appunto SERIALE e significa che ogni parola da trasmettere (o ricevere) viene trasmessa (o ricevuta) un solo bit alla volta. La porta provvede automaticamente a scomporre le parole in bit e li trasmette (o riceve) uno alla volta. La porta seriale è una porta di comunicazione molto più lenta rispetto alla parallela, infatti essa permette di trasferire circa 150kbit al secondo. • Questa porta viene utilizzata principalmente per connettere modem, ma non è raro trovare alcuni personal dotati di un mouse collegato ad una porta seriale (mouse seriale). Le porte di comunicazione vengono gestite all'interno del S.O. con il nome di COM (COM1, COM2, ecc). La velocità di trasmissione, la struttura dei pacchetti di bit inviati ed il tipo di controllo effettuato, determinano il protocollo usato nella trasmissione dei dati. I diversi protocolli sono stabiliti internazionalmente. • Porta seriale • Recommended Standard 232 Revision C (RS-232C) • Universal Asynchronous Receiver Transimitter (uart) sono tutti sinonimi per indicare una interfaccia di tipo seriale verso il mondo esterno. • Il PC ragiona in termini di bit, è formato da un microprocessore ed altri integrati; due integrati fondamentali sono: l’8255 (porta parallela) e l’8250 (porta seriale). Il PPI 8255 è integrato nel microprocessore e quindi non è visibile esternamente, a questo integrato viene collegato il collettore della porta parallela a 25 pin. Le prime parallele erano unidirezionali ora sono bidirezionali, in uscita mandano otto bit ma ne riceve in ingresso solo quattro. • Quando due unità intelligenti si trovano a dover comunicare tra loro da una distanza superiore ad un paio di metri, l'uso dell'interfaccia parallela non è più consigliabile in quanto molto sensibile ai disturbi. Si ricorre quindi ad un altro tipo di comunicazione, quella seriale, dove i bit vengono trasmessi in sequenza su un'unica linea, ottenendo così una riduzione dei disturbi indotti, anche se a scapito della velocità. La trasmissione seriale é generalmente garantita da un dispositivo, detto appunto interfaccia seriale, che ha il compito di permettere il collegamento tra il canale esterno, su cui i dati viaggiano uno di seguito all'altro, e il bus dei dati del computer che invece trasferisce i dati in modo parallelo. • Questa interfaccia, oltre ad occuparsi della conversione di una sequenza seriale di bit in un insieme di bit trasferibile in modo parallelo, deve anche generare dei bit di controllo, rilevare eventuali errori di trasmissione, nonché dirigere la corretta sincronizzazione durante la trasmissione (protocollo di comunicazione). • In base al tipo di colloquio, le interfacce si dividono in asincrone UART (Universal Asyncronous Receiver Transmitter) e sincrone USART (Universal Syncronous Asyncronous Receiver Transmitter). DIFFERENZE TRA PORTA SERIALE E PORTA PARALLELA: Ma allora quali sono i vantaggi della trasmissione seriale rispetto a quella parallela? • 1. I cavi utilizzati per la trasmissione seriale possono essere molto più lunghi rispetto a quelli che si possono usare nella trasmissione parallela. La porta seriale trasmette un '1' come un segnale da -3 a -25 volt e uno '0' come un segnale da +3 a +25 volt mentre la porta parallela trasmette lo '0' con un segnale da 0 volt e l' '1' con un segnale da 5 volt. Quindi la seriale ha un'ampiezza di voltaggio (maximum swing) di 50v mentre la parallela di soli 5v. Di conseguenza i problemi di perdita di tensione si fanno sentire molto di più nella parallela che nella seriale. • 2. Non servono tanti fili di connessione come succede nella trasmissione parallela. Se si sta collegando una periferica al computer e questa si trova ad una certa distanza dal computer stesso allora un collegamento con 3 cavetti (Null Modem) è molto più economica di una con 19 o 25 cavetti (SPP). • 3. I dispositivi a raggi infrarossi di recente stanno diventando molto popolari. E' facile capire come nella trasmissione ad infrarossi sia praticamente impossibile trasmettere in modo parallelo: vi immaginate dover trasmettere 8 bit per volta attraverso la stanza utilizzando 8 e più raggi infrarossi? Per questo si utilizza la trasmissione seriale e viene mandato un solo bit per volta riducendo drasticamente i possibili errori e problemi di trasmissione. PROPRIETA’ HARDWARE: • I dispositivi che usano i cavi seriali per la comunicazione sono divisi in due categorie: DCE e DTE. Le DCE (Data Communications Equipment) sono le periferiche come il modem, il plotter o altro, mentre le DTE (Data Terminal Equipment) sono il computer o il terminale. Le specifiche elettroniche per la porta seriale sono contenute nelle EIA (Electronics Industry Association) RS232C standard. Qui vengono impostati e definiti vari parametri: • Standard elettrico: 1. Uno "Spazio" (0 logico) deve essere fra +3 e +25 Volt. 2. Un "Segno" (1 logico) deve essere fra -3 e -25 Volt. 3. La regione fra i +3 e i -3 Volt è indefinita. 4. Il voltaggio di un circuito aperto non supera mai i 25 Volt (riferiti a massa). 5. La corrente di un circuito non deve mai superare i 500mA • Standard meccanico: I connettori seriali possono essere montati in due diversi formati. Questi si differenziano per il numero di pin disponibili fisicamente sul connettore stesso (9 o 25 pin). In ogni caso sul PC sono sempre presenti seriali a 9 o 25 pin maschi per cui è necessario disporre di cavi con connessioni femmine per poter collegare il computer ad un dispositivo esterno. Pinout di connettori seriali D25 e D9: D-Type-25 Pin D-Type-9 Pin Abbreviazio ne Nome Intero Pin 2 Pin 3 TD Transmit Data Pin 3 Pin 2 RD Receive Data Pin 4 Pin 7 RTS Request To Send Pin 5 Pin 8 CTS Clear To Send Pin 6 Pin 6 DSR Data Set Ready Pin 7 Pin 5 SG Signal Ground Pin 8 Pin 1 CD Carrier Detect Pin 20 Pin 4 DTR Data Terminal Ready Pin 22 Pin 9 RI Ring Indicator • Nella figura qui sotto sono raffigurati i connettori dei computer di vecchia generazione: quello in alto è il connettore della porta parallela; quelli in basso sono i connettori seriali a 25 pin e a 9 pin. Funzioni dei Pin: Abb. Nome Intero TD Transmit Data Serial Data Output (TXD) RD Receive Data Serial Data Input (RXD) CTS Clear to Send Questa linea indica che il modem è pronto a ricevere e a trasmettere dati DCD Data Carrier Detect DSR Data Set Ready Quando il modem rileva il segnale di linea (carrier) sul modem dall'altra parte attiva questa linea Questa dice alla UART che il modem è pronto a stabilire il collegamento.. DTR Data Terminal Ready RTS Request To Send RI Ring Indicator Funzione Il contrario del precedente, dice al modem che la UART è pronte per collegarsi Questa linea informa il modem UART è pronta per scambiare dati. che la Diventa attiva quando il modem trova un "ringing signal" (il drin) sulla linea Null Modems • Un Null Modem è usato per collegare due DTE insieme. Di solito è usato per realizzare connessioni economiche per il trasferimento dati. Figura 1 : Diagramma di un collegamento Null Modem. • In Fig. 1 è riportato il più semplice collegamento Null Modem. Richiede solo 3 cavetti (TD, RD e SG) e naturalmente questo influisce molto sulla spesa specialmente se si devono effettuare lunghe connessioni. Essenzialmente questo metodo di connessione si basa sul principio di far credere al computer che sta comunicando con un modem e non con un altro computer. Così si possono collegare solo il TD all'RD remoto, l'RD al TD remoto e i due segnali di massa (SG - Signal Ground) insieme. LoopBack Plug Figure 2 : Diagramma di connessione del "Loopback Plug“ Per "LoopBack Plug" s’intende un piccolo connettore da attaccare esternamente alla seriale, per fare dei test quando si scrive ad esempio dei programmi di comunicazione. • Al suo interno sono collegati insieme TD e RD in modo che ogni qualvolta si trasmette un dato questo viene subito ricevuto dalla seriale stessa. In pratica si può così testare il programma su cui si sta' lavorando senza dover disporre di due computer: se si trasmette un dato questo e subito ricevuto dalla seriale identico. Questo piccolo connettore può quindi risultare molto utile. La UART (8250 e compatibili): • UART è l'acronimo di Universal Asynchronous Receiver Transmitter. La serie 8250 include i modelli 16450, 16550, 16650, & 16750 che sono le UART che più frequentemente si ritrovano nei PC attuali. È un ricevitore trasmettitore universale asincrono (a differenza delle USART che possono essere utilizzate anche in maniera sincrona). E’ un registro a scorrimento, cioè ho dei dati in parallelo in ingresso, e in uscita sono in serie. • I segnali d’ingresso andranno abilitati con delle porte “TTL” AND, in modo che se su un ingresso ho 1 sono abilitate, se ho 0 sono tutte disabilitate: • Ho un’informazione in parallelo, la trasformo in seriale attraverso un registro a scorrimento, poi la trasformo in parallelo con un altro registro a scorrimento. L’UART del Pc funziona in maniera asincrona quindi devo spedire degli altri segnali, oltre a quelli d’informazione, che “dialogano” con l’UART esterna per mettere in ordine le informazioni che trasmetto; nasce così il “Protocollo di Comunicazione” chiamato RS232C, che è un insieme di regole alle quali bisogna sottostare. I valori di tensioni nel caso del TTL sono: 0 logico: da 0V a 0.8V 1 logico: da 2.4V a 5V Nel caso del protocollo RS232C: 0 logico: da +3V a +12V 1 logico: da -3V a -12V Lo standard RS-232 ha definito delle convenzioni che uniformano la comunicazione seriale: • * BAUD RATE: Velocità di trasmissione in bit/s (50..115200 bit/s) • *WORD LENGTH: Numero di bit che compongono una parola (5,6,7,8 bit) • *STOP BITS: Numero di bit usati per separare due parole consecutive (1,2 bit) • *PARITY: bit opzionale utilizzato per fare una verifica sull'integrità della parola trasmessa (pari, dispari, nessuna) • L’insieme dei dati che trasmetto è a 8 bit; prima degli 8 bit inserisco il bit di start “Start bit”, dopo gli 8 bit inserisco il “Parity bit”, ed infine lo “Stop bit”. • I bit però possono essere 6, 7 o 8, il parità bit è uno soltanto, lo Stop bit può essere costituito da 1 bit, 1,5 bit o 2 bit, questo perché guardo il periodo di bit. • Il Parity bit è un bit di controllo (bit di parità), può essere attivato con parità pari o parità dispari: è un codice a rilevazione d’errore. Il numero dei bit ad 1 possono essere pari o dispari, se ho parità pari, e ho una stringa di bit con 1 dispari il Parity bit mi aggiunge un 1 per avere i bit 1 pari. In questo modo il ricevitore guarda il bit di parità se è a 0 o a 1, per riordinare il tutto e per vedere se il segnale arrivato è giusto, altrimenti lo richiede o dice che è sbagliato. Comunicazione tra due UART: • L’UART interna al PC la posso sistemare via Software, l’UART esterna la sistemo via Hardware cioè con degli interruttori “dip-switch”. L’8250 ha bisogno di essere programmata quindi non posso usarla come UART esterna; ci sono delle UART fatte apposta da mettere nei dispositivi remoti che non hanno il microprocessore per essere programmate come il CDP6402. • Il clock dei due registri, per quanto simile, non sarà uguale per questo abbiamo bisogno del protocollo di comunicazione. All’8250 bisogna comunicargli la frequenza di trasmissione, i due clock devono essere uguali; il clock lo posso regolare via software ad esempio a 4800 baud. • L’UART CDP6402 può trasmettere o ricevere, ma non contemporaneamente; è molto utile per elementi esterni perché posso regolargli tutto; il suo massimo bit rate è 9600 bit/s. I registri dell’UART: • THR:Contiene il carattere da trasmettere. Prima di scrivere un nuovo carattere testare il bit 5 di LSR • RDR: contiene il carattere ricevuto che viene mantenuto fino a quando ne giunge uno nuovo. Il bit 0 di LSR indica se è giunto un nuovo carattere. Il bit 1 di LSR indica che il carattere precedente non è stato letto. • BRD: la velocità di trasmissione è data da: BaudRate = 1,843,200/(divisore x 16) divisore = 1,843,200/(BaudRate x 16) i due registri BRD contengono il divisore a 16 bit. I valori validi perBaud Rate sono: 50, 110, 150, 300, 600, 1200, 1800, 2000, 2400, 3600, 4800, 7200, 9200, 9600, 38400, 115200. • IER: E' possibile far generare dal PIC un interrupt (IRQ*) quando si verificano le seguenti condizioni: 1. RDR pieno (è arrivato un carattere) (bit 0) 2.THR è vuoto (buffer trs vuoto) (bit 1) 3.errore sulla linea (bit 2) 4.è cambiato lo stato del modem (bit 3) 1 = interrupt abilitato *IRQ4 (INT 0Ch) per COM1, IRQ3 (INT 0Bh) per COM2. • IIR:questo registro permette di identificare quale dei quattro casi ha generato l'interrupt corrente (bit 1,2). Inoltre indica anche se c'è un INT pendente (bit 0 = 0). • BRD-LSB: condivide il registro xF8 con THR e RDR. Prima di scrivere BRD-LSB è necessario impostare il bit 7 (DLAB) di LSR. DLAB viene azzerato scrivendo in BRDMSB. • LCR: Permette di impostare i parametri del protocollo • MCR: Questo registro controlla i segnali Data Terminal Ready (DTR bit 0), e Request To Send (RTS bit 1). Inoltre il bit 3 se alto permette agli int generati dal UART di essere ascoltati dal PIC. Per una comunicazione Interrupt Driven MCR deve essere impostato a: 0000 1011 (0Bh) • LSR: Questo registro contiene informazioni relativi ai dati in transito (in/out). Il bit 0 = 1 se è arrivato un carattere. Viene azzerato leggendo in RDR i bit 1,2,3,4 indicano diverse condizione di errore Il bit 5 = 1 se THR è vuoto (THR-E). Viene azzerato scrivendo in THR • MSR: contiene lo stato dei segnali modem. I primi quattro bit sono 1 se i segnali collegati hanno cambiato il loro stato dall'ultima volta che sono stati letti dalla cpu. Configurazione dei Pin per la UART 8250: • Tutti i piedini delle UART sono TTL compatibili. Questo include il TD, RD, RI, DCD, DSR, CTS, DTR e RTS che sono tutti interfacciati con la seriale, tipicamente con un connettore a D. Per questa ragione si devono utilizzare i convertitori di livello della RS232 che convertono i segnali TTL in livelli logici interpretabili dalla RS232. • Per funzionare la UART necessita di un Clock. Si può notare che viene utilizzato un cristallo da 1.8432 MHz o 18.432 MHz presente nella porta seriale e collegato alla UART tramite i piedini XIN - XOUT e con pochi altri componenti che aiutano il cristallo ad iniziare l'oscillazione. Questo Clock è utilizzato per il Programmable Baud Rate Generator che è direttamente connesso con la temporizzazione dei circuiti di trasmissione ma non è direttamente connesso con la temporizzazione dei circuiti di ricezione. Forme d'onda della RS-232 • La comunicazione fra la RS-232 e il computer avviene attraverso una comunicazione asincrona. Questo significa che insieme al pacchetto dati non viene mandato anche il sincronismo di un clock comune, ma semplicemente si invia un bit di start che fa' partire la ricezione sulla sponda opposta del canale di trasmissione. Il diagramma qui sopra riporta la forma d'onda in uscita dalla seriale classico, chiamato "8N1". 8N1 sintetizza i parametri della comunicazione in questione, cioè 8 bit per carattere, Nessuna parità e 1 bit di stop. • La trasmissione comincia quando la 232 ricevente riceve un bit di start ('0' logico). A quel punto comincia a ricevere i bit di dati uno alla volta, partendo dal meno significativo (LSB - Less Significant Bit) e poi si ferma quando trova un bit di stop ('1' logico). Lo schema d'onda di qui sopra vale comunque solo per l'onda in uscita dalla UART. La RS-232 interpreta con differenti voltaggi gli '1' e '0' logici: Voltaggio Interpretazione fra -3 e -25 V '0' logico (space) fra +3 e +25 V '1' logico (mark) fra -3 e +3 V Indefinito • Il segnale quindi prima di arrivare alla RS-232 deve essere condizionato in modo da poter essere interpretato. A questo condizionamento ci pensa lo "RS-232 Level Converter" che da in uscita un segnale simile a quello riportato nel diagramma qui sotto: Il convertitore di livello (RS-232 Level Converter): • Più o meno tutti i dispositivi digitali lavorano con dei livelli TTL compatibili. Per questo motivo ogni volta che interfacciamo la nostra RS-232 con altri dispositivi è indispensabile convertire il segnale in uscita da questa in TTL compatibile (e viceversa). Come già detto a questo ci pensa il convertitore di livello. • Uno dei convertitori più usati è il MAX-232 che riesce a convertire i livelli logici TTL ( 5V) in quelli compatibili con l'interfaccia RS-232 (10V). Pinout del MAX-232, RS-232 Driver/Receiver. Circuito del MAX-232. I Registri della Porta Seriale • In tabella sono riportati gli indirizzi standard per la seriale. Questi dovrebbero funzionare per la maggior parte dei P.C., con un PC IBM P/S2, che ha un bus micro-channel, ci si deve aspettare un insieme differente degli indirizzi e degli IRQ. • Come per la Porta Parallela (LPT port), anche per la Porta Seriale (COM port) gli indirizzi base possono essere letti dall'area base del BIOS (accedendo al BIOS all'avvio). Name Address IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4 COM 4 2E8 3 Circuito elettrico interfacciamento LCD con porta seriale:: Il circuito d’interfacciamento dell’LCD, con la porta seriale, durante il collaudo: LA PORTA PARALLELA • • • • Introduzione: La porta parallela era utilizzata inizialmente per collegare al PC la stampante. La porta in questione è composta da 25 pin suddivisi nel seguente modo: 12 sono usati per inviare dati in uscita 5 sono usati per accogliere dati in ingresso 8 sono usati come massa Tipi di parallele: • SSP (Standard Parallel Port), questo tipo di parallele, il flusso dei dati è rigidamente monodirezionale, dal PC alla periferica. La velocità va da un minimo di 50Kbyte ad un massimo di 150Kbyte al secondo. • EEP (Enanched Parallel Port), sono compatibili con lo standard SSP ma sono bidirezionali, viaggiano ad una velocità dai 500Kbyte a 2Mbyte al secondo. • ECP (Extended Capabilities Port), simile alla EEP, ma è in grado di comprimere i dati prima di trasferirli, ottenendo velocità di trasmissione maggiori. Circuito elettrico interfacciamento LCD con la porta parallela: Circuito interfacciamento LCD con porta parallela durante il collaudo: Display LCD a 16 caratteri, due righe, e rispettivo pin out: