Porta parallela
Da Wikipedia, l'enciclopedia libera.
La porta parallela (detta anche LPT, dall'inglese Line Printer, termine derivato da Line Printer Terminal[1]) è un'interfaccia usata inizialmente per collegare un computer a una stampante o a un plotter e in seguito impiegata anche per altre periferiche tra le quali scanner, unità ZIP, hard disk, lettori di CD-ROM e webcam[2].
I comandi dati via lpt (da porta parallela) sono segnali tra un computer e una periferica hardware.
Con la porta parallela del pc si ha la possibilità, oltre che di comandare la stampante, di pilotare anche periferiche alternative quali macchine per il caffè, le luci di casa o altro.
Indice |
[modifica] Introduzione
La LPT consente il collegamento di diverse periferiche che trasferiscono 8 bit in parallelo con standard TTL (Transistor-transistor logic). La porta ha un connettore a vaschetta con 25 pin.
L'interfaccia parallela è in grado di leggere e di riprodurre segnali elettrici di controllo, è quindi utilizzabile per comandare relè, circuiti di controllo, programmazione di memorie ROM (Read only memory) o per la verifica di un interruttore se aperto o chiuso. La porta può generare un IRQ7 (Interrupt request) quando cambia di stato uno dei suoi Pin (ACK).
[modifica] Registri interni alla porta
Ogni porta LPT dispone di tre diversi registri compreso quello base:
- PRINTER DATA OUTPUT (PDO): contiene il byte che deve essere trasmesso. Il byte puo' essere solo trasferito sui pin ma mai letto dai pin nel registro. Indirizzo: 0x378.
- PRINTER STATUS REGISTER (PSR): contiene informazioni relative allo stato della porta. Queste informazioni sono strettamente legate al collegamento della porta con una stampante. Il registro è della porta parallela ed è a sola lettura. Indirizzo: 0x379.
- PRINTER CONTROL REGISTER (PCR): registro di controllo della porta parallela. Questo registro è a sola scrittura, tranne il bit di STROBE che dovrebbe essere bidirezionale. Indirizzo: 0x37A.
[modifica] Dettaglio Porta
I pin da D0 a D7 sono gli 8 bit di ingresso o uscita del segnale in binario (D0 è il meno significativo e D7 è il più significativo); nello stato alto possono assorbire una corrente massima di 2.6 mA, nello stato basso invece possono smaltire una corrente di 24 mA massimo. I pin dal 18 al 25 sono i rispettivi piedini di massa delle uscite dal D0 al D7. Per comandare quello che vogliamo ci bastano questi piedini, se poi si vuol fare una cosa più dettagliata e raffinata, si può sfruttare il piedino 10 che dà alla CPU del computer un segnale di interrupt.
- Pin 1 è lo strobe, attivo basso, nel caso di una stampante, comanda la scrittura del carattere nel buffer.
- Pin 10, ACK, ingresso, attivo basso; indica che l’ultimo carattere è stato ricevuto e correttamente stampato ed è pronta per il successivo; consente l’abilitazione della richiesta d’interrupt alla CPU tramite il Pin 10 del connettore alla linea IRQ7.
- Pin 11, BUSY, ingresso, attivo alto; indica che la stampante è occupata nella stampa di un carattere, il segnale va alto durante le operazioni di trasferimento.
- Pin 12, PAPER END, ingresso, attivo alto; indica al PC che la stampante è senza carta.
- Pin 13, SELECT STATUS, ingresso, attivo alto; indica al PC che la stampante è collegata e pronta a funzionare.
- Pin 14, AUTO FEED XT, uscita, attivo bassa; indica alla stampante la modalità di avanzamento carta; quando è attivo l’avanzamento è generato da 0x0DH, quando è alto l’avanzamento sarà operato dalla stampante solo in seguito alla ricezione del carattere 0x0AH.
- Pin 15, ERROR, ingresso, attivo basso, comunica al PC che qualcosa non va nella stampante.
- Pin 16, INIT, uscita, attivo basso, serve a reinizializzare svuota il buffer della stampante e reinizializzarla.
- Pin 17, SELECT PRINTER, uscita, attivo basso, abilita la stampante a ricevere i dati.
[modifica] Protocollo Di Trasmissione-CENTRONICS
La trasmissione di un dato dal PC alla stampante o altri dispositivi elettronici di controllo deve rispettare un protocollo Centronics che deve seguire una temporizzazione dei segnali. Il computer controlla se la stampante è pronta verificando che ERROR=1; SELECT STATUS=1; PAPER END=0; BUSY=0; se viene rispettata questa condizione il PC invia un nuovo dato e dopo un tempo di almeno 0,5uS pone STROBE=0 (impulso negativo di 1uS) per indicare che è pronto un nuovo dato. La stampante risponde ponendo BUSY=1 per comunicare che sta acquisendo il dato; terminata l'operazione di acquisizione pone ACK=0 (impulso negativo di 8uS) per comunicare l'avvenuta acquisizione del dato. Tale comunicazione avviene sul fronte di discesa di ACK.
[modifica] Schema di realizzazione per comando esterno d'uso generale
Lo schema riportato qui sotto non è altro che una la parte della basetta di controllo. Il transistor utilizzato Q1 è un BC548B (ma è ottimo anche uno equivalente); D1 è un diodo del tipo 1N4148: possono andar bene anche diodi di potenza maggiore, ma sarebbero sprecati.
Il riquadro con L1 e J1 è l'insieme di un relè a 12V. È consigliabile, se sono necessari tempi molto lunghi in cui il relè è attivo, usare un relè bistabile per motivi di consumo e di stress elettrico dei componenti. Il tutto è comandato via computer.
R2 è solo un indicativo di carico.
[modifica] Spiegazioni dello Schema
La porta parallela è del tipo attivo alto, quando in output "metto" il numero 7 la porta assume il valore 00000111 e non 11111000 come sulle specifiche delle attive basse. Per questo motivo è stato usato il transistor (BJT) in configurazione attivo alto. In ingresso sulla base del transistor si ha il segnale di un pin della porta passando per la resistenza R1 da 4.7kohm in modo da limitarne, quando è stato alto sul pin, la corrente in ingresso. Il diodo ai capi del relè con il catodo verso +12Vcc serve a scaricare la corrente di autoinduzione che viene a crearsi quando il transistor, da saturo (acceso), va in interdizione (spento), i modo da non danneggiare il BJT stesso. In uscita dai pin della porta LPT si ha un valore che oscilla dai 5V ai 4.8V e viene detto stato alto, in questo caso la base manda conduzione il transistor che fa scorrere la corrente attraverso il relè verso massa eccitandolo. Mentre quando l' uscita dai/dal pin è attorno agli 0V si ha lo stato basso che fa spegnere il transistor bloccando la corrente verso massa.
Per alimentare il relè sono utili anche 24V nel caso che questo lo necessiti, comunque il transistor sopporta benissimo il potenziale ma attenzione se deve stare attivo a lungo, come detto in precedenza, è di norma utilizzare un relè bistabile in maniera da non stressare il BJT e comunque basta un solo impulso di 300ms per farlo cambiare di stato. Per pilotare tensioni di 220V e potenze attorno a 1-2KW, bosogna usare relè di "potenza" che possiede una tensione di eserzio di 24V o superiore con un conseguente aumento di corrente utilizzata passante per il transistor e quindi il ridimensionamento di quest' ultimo. Il motivo di relè così grandi è dettato dal fatto che, quando scorrono una tensione e corrente più o meno elevati in un circuito, all' atto dell' apertura viene a creasi una forza di attrazione tra i contatti interni tale da necessitare l'utilizzo di magneti più potenti per il distacco di quest' ultimi.
[modifica] Programmazione
Il seguente programma in C++ per GNU/Linux è un esempio base di utilizzo della porta parallela:
#include <iostream.h> #include <stdio.h> #define LPT 0x378 main() { int numero_out=0; outb(LPT,0); cin>>numero_out; outb(LPT,numero_out); getchar(); outb(LPT,0); }
La riga 00 definisce che ad LPT viene assegnato l'indirizzo esadecimale della porta parallela, 0x378. Nella 03 definiamo una variabile int (intero), in questo caso numero_out a cui, nella righa 05, verrà assegnato un valore immesso da tastiera. Nella 04 viene richiamata una funzione, outb(ex_port,int_out), che è già definita nella libreria standard stdio.h, in questo caso serve ad azzerare i valori "parassiti" presenti nella porta nel caso ce ne siano. La riga 06 manda in output sulla porta il numero che noi abbiamo scelto, ma attenzione i bit disponibili sono 8 quindi il numero puì alto possibilie è 255, (es. se scrivo il numero 159 in uscita come numero binario ho 10011111, per 52 ho 00110100 e così via).
Per finire nella 08 viene resettata la porta a 0 dopo aver premuto invio come richiesto in riga 07.
[modifica] Note
- ^ (EN) LPT - Definitions from Dictionary.com. URL consultato il 09-12-2007.
- ^ Creative CTWC e CTWCII