Circuiti applicativi

[ La porta parallela SPP: indice ] [ Pagina precedente ]

In questa pagina presento qualche piccolo circuito applicativo utile per fare le prime esperienze con la porta parallela. Ho già detto del rischio di danni al PC e quindi vi invito nuovamente a prestare la massima attenzione alla realizzazione del circuito e ad evitare di effettuare modifiche al circuito con il PC acceso.

Accensione di un led

Un paio di circuiti veramente semplici per accendere un led permettono di vedere come usare la parallela. È necessario disporre di una resistenza di circa 3,3k ed ovviamente di un led e, limitatamente al secondo circuito, di una batteria o un alimentatore da 5 volt (ma va bene anche una batteria da 4,5V).

Collegare un led

Il primo schema non necessita di particolari spiegazioni: quando il pin 2 viene posto alto, il led si accende, quando viene posto basso, si spegne. Il codice relativo è banale:

outportb (DATA, 0x01); // accendo il led collegato al pin 2 (D0)
... // altre righe di codice non legate all'uso della SPP
outportb (DATA, 0x00); // spengo tutti il led

Ho sottointeso la dichiarazione delle varabili utilizzate, peraltro già riportate nelle righe di codice già presentate. E' bene evidenziare che, una volta acceso il led, esso rimane tale fino allo spegnimento del PC o finché viene esplicitamente spento dal programma, indipendentemente dal fatto che il programma stesso sia o meno in esecuzione: lo stato del led è infatti memorizzato dall'hardware.

La connessione utilizzata in questo primo circuito (il led è acceso dalla corrente uscente dal pin della porta parallela) ha il vantaggio di non richiedere nessuna alimentazione esterna ma il difetto che su alcune porte parallele (in particolare vecchie o di PC portatili) potrebbe non funzionare a causa del fatto che la corrente di source è troppo piccola.

Il secondo circuito utilizza una sorgente di alimentazione esterna e dovrebbe funzionare con tutte le porte parallele. In questo caso è lo zero che accende il led. Per aumentare la luminosità del led è possibile diminuire il valore della resistenza anche a valori molto più piccoli, quale 330 ohm.

Ovviamente i due circuiti possono essere ampliati connettendo altri sette led agli otto pin di dato.

Simile il discorso per i pin connessi al registro di controllo. L'unica nota è riferita al fatto che, nel caso di uscite a collettore aperto potrebbe essere necessario per il primo circuito diminuire il valore della resistenza o addirittura toglierla (quest'ultima è un'operazione rischiosa e che personalmente sconsiglio in quanto non è una configurazione adatta alla generalità delle LPT).

Collegamento a grossi carichi

Il precedente circuito è utile solo se sono richieste correnti molto piccole (pochi mA al massimo) e una tensione di 5V massimo. In altri casi, quale l'accensione di una lampadina da 12V o di un relè, è necessario l'utilizzo di un transistor di adeguata potenza e di un'alimentazione esterna.

Connettere relay e lampadine

Lo schema mostra la connessione di un relè (osservate il diodo di ricircolo, che deve essere di tipo veloce) e di una lampadina. La Vcc è la tensione continua richiesta per il funzionamento della lampadina e della bobina del relè. Eventuali carichi in AC richiedono sempre la presenza di un relè o di un altro interruttore adeguato.

Ovviamente nel dimensionamento del transistor e della resistenza di base occorre tenere conto delle effettive tensioni e correnti in gioco (in particolare, nel caso di grossi teleruttori o lampade ad elevato assorbimento,  si rende necessario l'uso di transistor darlington) ma, con le dovute cautele, è possibile gestire lampade a bassa tensione da diverse decine di watt.

Attenzione! Nel caso di rottura del transistor o di errori di connessione è possibile che la tensione di batteria si presenti alle uscite della porta parallela mettendo a rischio non solo la porta parallela ma anche l'intero PC; nel caso di tensioni elevate, vi è rischio anche per l'incolumità delle persone e quindi sconsiglio questi circuiti a persone non adeguatamente qualificate. Un circuito più sicuro.

L'uso di interruttori

Nello schema seguente sono illustrati tre modi per connettere un interruttore alla porta parallela. In tutte e tre i casi l'interruttore chiuso viene letto come tensione di 0 volt, l'interruttore aperto come tensione di circa 5 volt.

Leggere lo stato di un interruttore

Lo schema utilizzato con S1 richiede la presenza di una batteria esterna da 5V. Per conoscere lo stato dell'interruttore è sufficiente leggere lo stato del bit Error nel registro di controllo (oppure di un altro bit dello stesso registro se connesso ad un altro pin). È possibile la connessione con uno qualunque dei bit gestiti attraverso il registro di controllo. In certi casi questo circuito funziona anche senza batteria e senza resistenza ma l'estrema semplicità si paga con errori di lettura occasionali, soprattutto in ambiente rumoroso.

Lo schema usato per S2 è simile al precedente, con la differenza che la tensione non viene prelevata da una batteria ma da uno dei pin della porta dati, posto preventivamente a uno logico. Lo svantaggio è quello di richiedere due pin della porta parallela, oltre la massa.

Attenzione! Lo schema utilizzato per S3 è il più semplice e funziona con i pin associati al registro di controllo; non richiede nessun componente oltre l'interruttore ma funziona esclusivamente a condizione che il pin a cui è connesso l'interruttore sia a collettore aperto e che la resistenza di pull-up sia montata internamente alla scheda. In questo caso, per leggere lo stato dell'interruttore occorre impostare a 1 il pin scrivendo nel registro di controllo e poi leggere il bit nello stesso registro. Qualora la porta non fosse a collettore aperto (come succede in molte parallele moderne) si rischia la distruzione della porta. Pertanto sconsiglio l'uso di questo metodo.

Lettura di otto bit

Il seguente schema permette di leggere otto bit anche da porte non bidirezionali o senza uscite open collector. Viene utilizzato un multiplexer 74157 comandato dall'uscita di strobe, leggendo quattro bit alla volta.

Leggere 8 bit con la SPP

Il difetto di tale metodo deriva dalla relativa lentezza (richiede due letture e due scritture della porta) e dal fatto che è ovviamente richiesta un integrato esterno e relativo circuito di alimentazione (quest'ultimo non disegnato nello schema). Il vantaggio è che funziona con qualunque tipo di porta senza modifiche. Il codice da eseguire è il seguente:

outportb(CONTROL, 0x01);            // Seleziono il nibble basso
dataLow = inportb(STATUS) & 0xF0;   // Leggo il nibble basso
dataLow = dataLow >> 4;             // Allineo i quattro bit
outportb(CONTROL, 0x00);            // Seleziono il nibble alto
dataHigh = inportb(STATUS) & 0xF0;  // Leggo il nibble alto
data = dataHigh | dataLow;          // Unisco i due nibble
data = data ^ 0x88;                 // Sistemo i due bit invertiti

Ovviamente se la porta è bidirezionale oppure se è possibile usare in ingresso i quattro bit associati al registro di controllo vi sono minori problemi, pagati con una minore compatibilità.

La soluzione più razionale nel caso in cui serva l'input di una quantità significativa di dati è però quella di adottare una porta EPP, sicuramente più standardizzata e veloce.

Collegare una stampante

Questo non è un circuito applicativo ma la schematizzazione dei segnali presenti sulla parallela durante il suo funzionamento più "naturale", cioè collegata ad una stampante secondo l'handshake centronics.

Una premessa: le temporizzazioni mostrate sono solo indicative in quanto non ho trovato standard a cui riferirmi e le varie pubblicazioni riportano dettagli differenti; forse tale standard neppure esiste e quello mostrato è solo una consuetudine più o meno rispettata. Il controllo è completamente effettuato dal software, in genere dalla routine del BIOS o del sistema operativo invocata per la stampa. È ovviamente possibile scrivere da sé il software per la gestione, magari da usare su un microcontrollore.

Le temporizzazioni Centronics

In rosso ho indicato i segnali che vanno dal PC alla stampante, in verde quelli che hanno percorso inverso. Non ho indicato i segnali non coinvolti nella comunicazione.

La linea Ack, proveniente dalla stampante in genere è ignorata dal PC (almeno in ambiente DOS e Windows).

Alcuni documenti riportano la linea Ack ritardata rispetto al Busy (il fronte di discesa di Ack coincidente con quello di Busy) ma non mi risulta che ciò sia corretto.

La porta parallela SPP: un tutorial


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima