LPT interfaccia
SCHEDA SPERIMENTALE I/O CON LPT
© by Vittorio Crapella - i2viu
Si rammenta che non é consigliato lavorare direttamente pin to pin fra LPT e circuiti esterni ma conviene interporre una separazione con delle porte logiche ..meglio sarebbe usare dei fotoaccoppiatori così da avere una separazione galvanica.... questo per evitare che errori esterni di collegamenti o tensioni possano finire sulla LPT e danneggiare il circuito interno della scheda madre del PC, soprattutto sui più moderni dove la LPT é integrata sulla scheda madre e non separata come sui vecchi 286/486.... si potrebbe se fosse possibile lavorare con una scheda di queste cosi, male che vada la LPT su scheda si può cambiare con spese minime.
Attenzione anche alle scariche elettrostatiche. LEGGI DISCALIMER
PORTA PARALLELA DEL PC
Attraverso il connettore DB25 della parallela LPT del Computer (286/486 e ...)
é possibile gestire livelli di tensione 0-5V sia come INPUT che come OUTPUT.
CONNETTORE DB25 A 25 POLI PER PORTA PARALLELA
----------------------------------------------
Per convenzione viene montato sul p.c. un connettore femmina.
Visto dall'esterno del p.c. ha la seguente numerazione:
Disposizione dei bit dei segnali per una parallela di
indirizzo PORTA (vedi fondo pagina):
PORTA+0 è la porta DATI ed é solo output.
BIT PIN CENTRONICS
0 - D0 2
1 - D1 3
2 - D2 4
3 - D3 5
4 - D4 6
5 - D5 7
6 - D6 8
7 - D7 9
PORTA+1 è la porta STATUS ed é in input
3 - ERROR 15
4 - SLCT OUT 13
5 - PO 12
6 - ACK 10
7 - BUSY (negato) 11
PORTA+2 e' la porta CONTROL ed é in output ma si possono anche leggere come input.
0 - STROBE (negato) 1
1 - AUTOFD (negato) 14
2 - RESET 16
3 - SLCTIN (negato) 17
lo stato di questa porta all'accensione è:
1 1 1 0 1 1 0 0 (ottenuta leggendo la porta)
Attenzione essendo il bit 4 un IRQ_EN conviene non scriverci 1 i pin da 18 a 25 della CENTRONICS sono GND (massa)
CI SONO PARALLELE CHE HANNO GLI INPUT PULL-UP CON DELLE RESISTENZE INTERNE
ALMENO PER LA PORTA+1, MENTRE ALTRE SONO APERTI E PERTANTO SE TESTATI NON
CONNESSI A PERIFERICHE SONO FLUTTUANTI E NON GARANTISCONO LIVELLO NE 0 NE 1
Per gestire la PARALLELA in BASIC si può usare le istruzioni:
INP (ADR) dove adr è l'indirizzo e vale 889 per LPT1 e testa
i bit dai pin 15-13-12-10-11 (tot. 5 bit)
INP (ADR) dove adr è l'indirizzo e vale 890 per LPT1 e testa
i bit dai pin 1-14-16-17 (tot. 4 bit)
Per testare un BYTE (8bit) si può fare:
A=INP(889)
B=INP(890)
VALINPUT=(B-128)-(A-232)
Per l'uscita si usa :
OUT ADR,NR dove adr è indirizzo e vale 888 per LPT1 e gestisce i bit d'uscita sui
pin 2-3-4-5-6-7-8-9 (NR è il valore numerico da buttar fuori)
Pare che certi BASIC possono accettare anche POKE ADR,VALORE NUMERICO
NR è dato dalla somma del valore che ogni bit possiede se è messo a livello 1 (uno):
ESEMPIO
PIN 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2
2 ELEVATO ALLA 7 6 5 4 3 2 1 0
BIT A " 1 " 0 1 0 1 0 0 0 1
NR = 64 +16 +2 = 81
se faccio OUT 888,81 setto i pin 8-6-2 a livello 1 e gli altri a 0
IN ASSEMBLER SIA PER INPUT CHE PER OUT DEVO PRIMA CARICARE NEL REGISTRO
dx IL VALORE ADR secondo la LPT usata e poi:
con IN al,dx carico nel registro Al il valore di input corrispondente all'indirizzo contenuto in dx
esempio :
mov dx,889
in al, dx
cosí facendo carico in al 8 bit di cui però soltanto i 5 bit più
significativi sono quelli riferiti ai pin 11-10-12-13-15
byte al
peso bit 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0
pin cor. 11 10 12 13 15 x x x
mov dx, 890
in al,dx
così facendo carico in al 8 bit di cui però solo i 4 meno significativi
sono riferiti ai pin 17-16-14-1
byte al
peso bit 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0
pin cor. x x x x 17 16 14 1
Ricordarsi che i bit facenti capo ai pin 1-14-17-11 sono negati rispetto
agli altri dei pin 11-10-12-13-15
per prendere un byte dall'input facente capo ai pin 11-10-12-13-15-16-14-1
in cui pin11=bit7 e pin 1=bit0 si farà:
mov dx,889 preparo dx per input
in al,dx carico al con 8 bit di cui solo 5 utili
and al,0f8h elimino i bit che non servono
mov variabile,al (variabile dove tenere momentaneamente al)
mov dx,890 punto ad altro input
in al,dx prendo 8 bit di cui 4 utili-solo tre servono
and al,07 elimino i bit che non servono
or al,variabile unisco i 5bit di prima con i tre ultimi e in al ho 8 bit che fanno capo ai pin
11-10-12-13-15-16-14-1
PER L'OUT sarà:
mov dx,888 (888=LPT1 )
out dx,al
così facendo prendo gli 8 bit del registro Al e li "butto" sui pin
9-8-7-6-5-4-3-2 pin 9 = bit7 pin 2 = bit0
Gli indirizzi PORTA sono:
ESADECIMALE DECIMALE
OUT IN1 IN2 OUT IN1 IN2
LPT1 378h 379h 37Ah 888 889 890
LPT2 278h 279h 27Ah 632 633 634
LPT3 3BCh 3BDh 4BEh 956 957 958
Lo schema elettronico della scheda I/O (32Kb)
Foto interfaccia
IL PC SIMULA UN PLC
Si e` pensato di fare uso della parallela come INPUT/OUTPUT per tentare di simulare un PLC. All'interno il programma crea un loop multiplexato in cui testa gli otto ingressi della LPT mentre esegue le routines atte a gestire le otto uscite. Le otto uscite possono essere testate come input dal 9 al 16, pertanto gli ingressi in totale sono 16. Per il momento sono state previste 19 procedure in grado di settare le uscite a livello 0 o a livello +5V, eseguendo delle routines tipo MONOSTABILE, ASTABILE, FLIP/FLOP TIPO D, FLIP/FLOP TIPO S-R, SUONERIA piu` tutte le porte OR, NOR, AND, NAND con max. 11 ing. + XOR e XNOR I tempi di ritardo (astabili/monostabili) possono essere impostanti da 1 a 65535 mS, tali tempi sono sufficientemente precisi anche se sono influenzati dal numero delle procedure in atto (non dipendono dal clock del computer avendo una routine che si auto adegua in funzione di questo).
TESTATO FINO AI PENTIUM 133
CON I PC DELL'ULTIMA GENERAZIONE TROPPO VELOCI NON FUNZIONA
Al lancio del programma I2VIU.EXE
si può digitare dopo il nome, spazio 1 o 2 o 3 per configurare la LPT1 o LPT2 o LPT3, se non specifico un numero si configura con la prima LPT che trova partendo dalla LPT1.
Il programma é stato sviluppato in assembler per ambiente DOS e si presenta con un menù di scelta per le varie funzioni con comandi di facile interpretazione, si usa ESC per tornare all'operazione precedente.
L'AUTORE NON SI ASSUME NESSUNA RESPONSABILITA' ESPLICITA O IMPLICITA RIGUARDANTE INCIDENTI O CONSEGUENTI POSSIBILI DANNI DERIVANTI DALL'USO DEL PROGRAMMA.
LINK PER SAPERNE DI PIÙ: