Porta parallela
|
A questa voce o sezione va aggiunto il template sinottico {{Connettore}}
Per favore, aggiungi e riempi opportunamente il template e poi rimuovi questo avviso.
Per le altre pagine a cui aggiungere questo template, vedi la relativa categoria. |
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, nella versione bidirezionale, impiegata anche per altre periferiche tra le quali scanner, unità ZIP, hard disk, lettori di CD-ROM e webcam[2].
La porta è nata come unidirezionale (trasmissione dati dal computer alla periferica collegata) ma è stato sviluppato anche uno standard bidirezionale (IEEE 1284).
La porta parallela è ormai considerata obsoleta: si preferiscono altri standard di comunicazione come l'USB (seriale e quindi di minore ingombro, più veloce e multifunzione).
Indice |
[modifica] Introduzione
La LPT consente il collegamento di diverse periferiche con possibilità di trasferire 8 bit in parallelo nello standard TTL. Sul computer la porta è un connettore femmina detto "a vaschetta" o DB25 con 25 pin.
Sulle stampanti è presente un connettore diverso detto Centronics (dal nome del primo costruttore). La presenza di 8 fili di GND permette di creare una sufficiente schermatura (cavi intrecciati a coppie) dei segnali.
[modifica] Le porte parallele sui personal computer IBM
[modifica] Indirizzi delle porte parallele
Nei computer IBM gli indirizzi riservati alle prime tre porte parallele (anche se nella maggior parte dei casi è presente un'unica porta) sono i seguenti:
| Nome della porta | Interrupt # | Iniziale I/O | Finale I/O |
|---|---|---|---|
| LPT1 | IRQ 7 | 0x378 | 0x37f |
| LPT2 | IRQ 5 | 0x278 | 0x27f |
| LPT3 | IRQ 7 | 0x3bc | 0x3bf |
Per le porte eccedenti Linux lpt_driver sono consigliati gli indirizzi:
| Nome della porta | Interrupt # | Iniziale I/O | Finale I/O |
|---|---|---|---|
| LPT4 | IRQ ? | 0x27C | 0x27F |
| LPT5 | IRQ ? | 0x26C | 0x26F |
| LPT6 | IRQ ? | 0x268 | 0x26B |
[modifica] Registri delle porte parallele
Relazione tra pin dei connettori e bit dei registri per le porte parallele:
| Indirizzo | MSB | LSB | |||||||
|---|---|---|---|---|---|---|---|---|---|
| Bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| Base (Data port) | Pin: | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Base+1 (Status port) | Pin: | ~11 | 10 | 12 | 13 | 15 | |||
| Base+2 (Control port) | Pin: | ~17 | 16 | ~14 | ~1 |
Il simbolo ~ indica che il livello logico tra il pin della porta e il bit del registro viene invertito dall'hardware.
Ogni porta LPT dispone di almeno tre diversi registri:
- Data port: contiene il byte che deve essere trasmesso o che è stato ricevuto (ad esempio per LPT1: Base = 0x378)
- Status port: contiene informazioni relative allo stato della porta. Il registro è a sola lettura (LPT1: Base+1 = 0x379)
- Control port: registro di controllo della porta parallela. Questo registro è a sola scrittura (LPT1: Base+2 = 0x37a)
[modifica] Piedinatura delle porte parallele
La tabella 1 riassume la piedinatura e le funzioni dei vari segnali sul connettore (o sui connettori) della porta parallela del computer e su quello della stampante.
| Numero pin (DB25) |
Numero pin (Centronics) |
Nome del segnale |
Direzione | Registro-bit | Segnale invertito dall'hardware |
|---|---|---|---|---|---|
| 1 | 1 | nStrobe | Out | Control-0 | Si |
| 2 | 2 | Data0 | In/Out | Data-0 | |
| 3 | 3 | Data1 | In/Out | Data-1 | |
| 4 | 4 | Data2 | In/Out | Data-2 | |
| 5 | 5 | Data3 | In/Out | Data-3 | |
| 6 | 6 | Data4 | In/Out | Data-4 | |
| 7 | 7 | Data5 | In/Out | Data-5 | |
| 8 | 8 | Data6 | In/Out | Data-6 | |
| 9 | 9 | Data7 | In/Out | Data-7 | |
| 10 | 10 | nAck | In | Status-6 | |
| 11 | 11 | Busy | In | Status-7 | Si |
| 12 | 12 | Paper-Out | In | Status-5 | |
| 13 | 13 | Select | In | Status-4 | |
| 14 | 14 | nAuto/Linefeed | Out | Control-1 | Si |
| 15 | 32 | nError/nFault | In | Status-3 | |
| 16 | 31 | nInitialize | Out | Control-2 | |
| 17 | 36 | nSelect-Printer/nSelect-In | Out | Control-3 | Si |
| 18-25 | 19-30 | Ground | Gnd | - | - |
Tabella 1
Note alla Tabella 1:
- La "n" che precede il nome del segnale indica che è attivo basso. Ad esempio nError: se la stampante segnala un errore il segnale diventa basso (la tensione è tra 0 e 0,7 volt circa e il bit 3 dello Status Port verrà letto come 0 dal software) mentre se la stampante funziona correttamente il segnale è alto (la tensione è compresa tra 2,2 e 5 volt e il bit 3 dello Status Port verrà letto come 1 dal software).
- La colonna "Segnale invertito dall'hardware": se ad esempio il segnale Busy va a livello logico 1 il bit 7 (il bit più significativo dello Status Port) verrà letto come 0 dal software.
- Il bus dati (Data0, ..., Data7), in origine disponibile solo in modo uscita, è diventato bidirezionale per ampliare la gamma di periferiche collegabile (Standard IEEE 1284).
- Pin 1 è lo Strobe, attivo basso, nel caso di una stampante, segnala che sul bus dati è presente un dato corretto[3].
- Pin 10, Ack, è un ingresso attivo basso; indica al PC che il dato presente sul bus è stato letto e che la stampante è pronta per ricevere altri dati; consente l'abilitazione della richiesta d'interrupt alla CPU (IRQ7 per LPT1 e LPT2; IRQ5 per LPT3).
- Pin 11, Busy, ingresso, attivo alto; indica che la stampante è occupata e non può ricevere altri dati, il segnale va alto durante le operazioni di trasferimento e ritorna basso appena la stampante è nuovamente disponibile per ricevere altri dati.
- Pin 12, Paper-Out, ingresso, attivo alto; indica al PC che la stampante è senza carta.
- Pin 13, Select, ingresso, attivo alto; indica al PC che la stampante è collegata e pronta a funzionare.
- Pin 14, Auto/Linefeed, uscita, attivo bassa; indica alla stampante la modalità di avanzamento carta; quando è attivo l'avanzamento è generato da 0x0d (carriage return), quando è alto l'avanzamento sarà operato dalla stampante solo in seguito alla ricezione del carattere 0x0a (line feed o newline).
- Pin 15, Error/Fault, ingresso, attivo basso, comunica al PC che qualcosa non va nella stampante.
- Pin 16, Initialize, uscita, attivo basso, serve a interrompere un'eventuale stampa in corso svuotando il buffer della stampante e a riportarla allo stato in cui si trovava dopo l'accensione.
- Pin 17, Select-Printer, uscita, attivo basso, abilita la stampante a ricevere i dati.
[modifica] Protocollo di comunicazione Centronics
La trasmissione di un dato dal PC alla stampante deve rispettare il protocollo Centronics (o Handshake Centronics) che può essere riassunto nei seguenti passi:
- Il computer controlla se la stampante è pronta verificando che nello Status port: Error = 1, Select = 1, Paper-Out = 0, Busy = 0. Se queste condizioni non sono verificate segnala la condizione di errore o guasto; se invece i bit sono corretti va al passo successivo.
- Il PC trasferisce un nuovo dato sui pin Data0, ..., Data7.
- Dopo un tempo di almeno 0,5 μs pone Strobe = 0 (impulso negativo di 1 µs) 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 8 µs) per comunicare l'avvenuta acquisizione del dato e appena è pronta per ricevere un nuovo dato rimette Busy = 0.
- Il computer ripete la sequenza dal punto 1 fino al completamento delle operazioni di trasferimento dei dati.
Va evidenziato che:
- il trasferimento dei dati richiede molto meno tempo della loro effettiva stampa.
- se la stampante ha riempito il suo buffer manterrà attivo il Busy (= 1) fino a quando non avrà liberato lo spazio per ricevere altri dati.
[modifica] Altri usi della porta parallela
[modifica] Protezione hardware per il software
Per impedire la copia di software viene usato un dispositivo da collegare alla porta parallela chiamato in vari modi: chiave hardware, "dongle", "hardware token". Il dispositivo non interferisce (o non dovrebbe interferire) con altri usi della porta in quanto "replica" il connettore femmina per collegare altre periferiche e risultare quindi trasparente per i normali utilizzi della porta. È da tempo sostituito con versioni per USB.
[modifica] Acquisizione di dati
Anche quando la porta parallela era disponibile solo in forma unidirezionale (uscita) si erano realizzati sistemi per usarla per acquisire dati. Non si poteva ovviamente usare i bus dati (Data0, ..., Data7) ma si usavano i pin disponibili come ingressi e l'artificio era noto come "Nibble mode" in quanto si acquisivano in sequenza temporale quattro bit alla volta.
[modifica] Interfaccia di controllo di dispositivi
L'interfaccia parallela è in grado di acquisire e di produrre segnali elettrici di controllo, è quindi utilizzabile per usi particolari come comandare relè, circuiti di controllo, programmare memorie, ecc.
[modifica] Schema di realizzazione per comando esterno d'uso generale
- Lo schema riportato può essere implementato su tutti i pin dati della porta per controllare quindi fino a otto dispositivi.
- Il transistor utilizzato Q1 è un BC548B ma l'uso di un transistor Darlington (ad esempio BC517 o bdx53c) permetterebbe di avere più flessibilità nella scelta di relè eventualmente più potenti.
- D1 è un diodo del tipo 1N4148 sufficiente se la corrente massima del relè non supera i 150 mA.
- Il riquadro con L1 e J1 è l'insieme di un relè a 12 Vcc ma se necessario si può usare anche un relè a 24 Vcc (tensione che va fornita da un alimentatore non rappresentato nello schema)
- Il resistore R2 è solo indicativo di un generico carico in corrente continua o alternata (non è rappresentata la sua alimentazione che dovrebbe essere in serie al carico)
- Il circuito rappresentato nello schema elettrico è puramente indicativo: eventuali protezioni (per esempio con l'uso dell'integrato 74ls244/74ls245 o di un buffer) e rispetto di normative di sicurezza non sono indicate.
[modifica] Qualche nota esplicativa sullo schema
La porta parallela non inverte i segnali: quando nel registro dati si scrive 7 la porta assume il valore binario 00000111 e quindi si attivano i tre relè eventualmente collegati ai pin Data0, Data1 e Data2, mentre gli altri restano spenti.
Per questo motivo è stato usato il transistore Q1 in configurazione non invertente a emettitore comune.
Quando il pin della porta va alto sulla base del transistore il resistore R1 da 4,7 kΩ limita la corrente sulla base a circa 1 mA e contemporaneamente non sovraccarica la porta. Questa corrente porta il transistor in saturazione e quindi attiva il relè (che però deve assorbire una corrente massima di 20 mA). Quando invece va a zero volt il transistor va in interdizione e il relè stacca il carico.
Il diodo ai capi del relè con il catodo verso +12 Vcc serve a scaricare la corrente di autoinduzione che viene a crearsi quando il transistor Q1, da saturo (acceso), va in interdizione (spento), in modo che non si creino sovratensioni che potrebbero danneggiarlo.
[modifica] Programmazione
Il seguente programma in C++ per GNU/Linux è un esempio di base per l'utilizzo della porta parallela:
#include <iostream> #include <cstdio> #define LPT 0x378 int main() { /* nel caso di funzionamento in modalità 386 (GNU/Linux) si rende necessario il comando */ iopl(3); /* l'impostazione dell'i/o permission level nel processore per indicare che le operazioni di i/o sono fisiche e non virtuali */ int numero_out=0; outb(LPT,0); cin>>numero_out; outb(LPT,numero_out); getchar(); outb(LPT,0); return 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 riga 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 più alto possibile è 255, (es. se si scrive il numero decimale 159 in uscita come numero binario si ottiene 10011111, per 52 si ha 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 in data 09-12-2007.
- ^ Creative CTWC e CTWCII (WebCam con connessione parallela)
- ^ Il segnale viene attivato con un ritardo rispetto al bus dati in modo da permettere alle linee dati di stabilizzarsi.
[modifica] Voci correlate
[modifica] Altri progetti
Commons contiene immagini o altri file su Porta parallela
[modifica] Collegamenti esterni
- (EN) Video "tutorial" sulla porta parallela
- (EN) La porta parallela in modo ingresso
- (EN) Acquisizione dati in "modo nibble"
- (EN) La porta parallela su www.beyondlogic.org
- (EN) Osservazioni sulla corrente disponibile sui pin della porta parallela
- (EN) Altre informazioni sulla porta parallela
- La porta parallela SPP
- La porta parallela EPP
|
|