El
puerto paralelo estándar (SPP)
Comúnmente
denominado puerto de impresora original o puerto centronix este conector
permite entrar y salir de una computadora PC señales las cuales podemos
emplear para muchas cosas mas que simplemente imprimir sobre papel. Toda
computadora compatible con PC dispone de al menos un puerto paralelo el
cual es compatible con la norma original estándar o SPP.
Adicionalmente, algunos mas nuevos permiten el uso de datos
bidireccional e incluso de características especiales definidas por las
normas EPP y ECP, de los cuales haremos una breve reseña mas adelante
en esta misma nota.
Retomando el SPP
debemos indicar que, con placas de expansión se pueden disponer de
hasta 3 puertos que el sistema operativo denomina LPT. Se los numera
desde 1 hasta 3 quedando LPT1, LPT2 y LPT3. Como todo dispositivo, el
puerto paralelo dispone de una dirección de memoria base que puede ser
378, 278 o 3BC. Es por esta dirección por la que el usuario (a través
del programa) se comunica y emplea el puerto paralelo.
Físicamente, el
puerto paralelo se conecta por medio de un conector DB25 hembra que
habitualmente se ubica en el panel posterior del equipo.
Técnicamente el
puerto paralelo dispone de 8 líneas digitales de salida, las cuales
llamaremos D0 a D7, cuyos niveles posibles son 0v (para bajo) y 5v (para
alto), cumpliendo con el estándar de la familia lógica TTL. Estas líneas
están conectadas a los pines 2 al 9 para los bits 0 al 7
respectivamente. Estas ocho líneas conforman el comúnmente llamado bus
de datos del puerto. Pero aquí no termina todo. Hay dos buses mas que
permiten ingresar y salir desde y hacia la computadora llamados buses de
estado y de control.
El bus de estado se
empleaba originalmente para censar justamente el estado en el que se
encontraba la impresora para saber, entre otras cosas, si esta
encendida, si esta en línea, si dispone de espacio para recibir datos,
si hay papel, etc. Pero puede ser empleado para ingresar datos hacia la
computadora desde el mundo exterior haciendo, por ejemplo, que el
programa decida su rumbo y por ende las acciones a tomar en función a
los datos que por aquí ingresen. Este puerto, a diferencia del de
datos, dispone de sólo 5 líneas digitales de entrada partiendo desde
el bit 3 y hasta el bit 7. Por lo general a estas líneas se las
denomina S3 a S7 y la asignación de pines se la puede ver en la tabla
de mas abajo. La dirección de memoria asignada para comunicarse con
este bus es igual a la dirección base (la del bus de datos) mas 1. O
sea, si el puerto base es 378, este puerto es 379. Si el base es 278,
este es 279. Y, si el puerto base es 3BC, este será 3BD. Un dato a
resaltar es que el bit 7 de este puerto (conectado al terminal 11 del
conector) presenta un estado lógico inverso. Esto significa que, si en
el pin 11 se colocan 5v (nivel lógico alto) el bit al ser leído
presentará un cero. Y, por consiguiente, si el pin 11 es puesto a masa
(nivel lógico bajo) al leer el bit se verá un uno.
En tanto, el bus de
control, al igual que el de datos, dispone de líneas de salida desde la
computadora hacia el exterior. Las líneas también son digitales pero
en este caso son solo cuatro, las de menor pero que van del bit 0 al 3.
Estas cuatro líneas son generalmente llamadas como C0 a C4 y se pueden
controlar por medio de la dirección de memoria base (la del bus de
datos) mas 2. De esta forma si la dirección base es 378, este bus es
37A. Si la dirección base es 278, la dirección de este bus será 27A.
Y, si la dirección base es 3BC, la dirección de este bus será 3BE. En
este bus hay tres bits cuyos niveles lógicos se encuentran invertidos
(bit0, bit1 y bit 3) y sólo uno que presenta un un estado lógico
normal.
Resumiendo podemos
decir que un puerto paralelo estándar o SPP permite salir desde la
computadora hacia el exterior por medio de 12 líneas o bits y
posibilita entrar a la misma por medio de 5 líneas o bits.
En todos los casos
cada terminal puede proporcionar un máximo de 1mA de corriente.
Superado este miliamperio no se garantiza el nivel lógico TTL de la señal
presente e incluso de sobrecargarlo demasiado de puede dañar físicamente
el puerto. Una forma de utilizar en forma segura el puerto es conectando
a cada terminal de salida un resistor de 100 ohms en serie y luego un
buffer octal como el integrado 74LS245. Esto permite, por un lado,
aislar el puerto del dispositivo y, por el otro, efectuar una adecuada
carga de corriente al sistema.
La siguiente tabla
resume en pocos guarismos la información volcada arriba:
Bus |
|
Direcciones |
TTL |
Bit |
Pin |
E/S |
Datos |
|
378 |
278 |
3BC |
NOR |
0 |
2 |
S |
NOR |
1 |
3 |
S |
NOR |
2 |
4 |
S |
NOR |
3 |
5 |
S |
NOR |
4 |
6 |
S |
NOR |
5 |
7 |
S |
NOR |
6 |
8 |
S |
NOR |
7 |
9 |
S |
|
Estado |
|
379 |
279 |
3BD |
--- |
0 |
--- |
--- |
--- |
1 |
--- |
--- |
--- |
2 |
--- |
--- |
NOR |
3 |
15 |
E |
NOR |
4 |
13 |
E |
NOR |
5 |
12 |
E |
NOR |
6 |
10 |
E |
INV |
7 |
11 |
E |
|
Control |
|
37A |
27A |
3BE |
INV |
0 |
1 |
S |
INV |
1 |
14 |
S |
NOR |
2 |
16 |
S |
INV |
3 |
17 |
S |
--- |
4 |
--- |
--- |
--- |
5 |
--- |
--- |
--- |
6 |
--- |
--- |
--- |
7 |
--- |
--- |
En la tabla se
escribe INV para indicar que el nivel lógico invertido (o sea que un
bit 1 representa una tensión de 0v y un bit 0 representa una tensión
de 5v). NOR indica un nivel lógico normal, quedando un bit bajo en 0v y
uno alto en 5v. E significa entrada (por este pin entra tensión y por
ende datos hacia la computadora). S significa salida. --- indica que el
presente valor no está establecido o implementado.
Hasta aquí hablamos
del aspecto electrónico y mecánico del puerto. Ahora veremos el
aspecto relativo al software y la forma de escribir adecuadamente el código
de los algoritmos que controlaran las líneas del puerto.
El bus de datos del
puerto se comporta como un latch consultable. Esto quiere decir que
enviando un byte a la dirección de memoria los pines del conector
quedarán a 5v y 0v en función a los bits de dicho byte. Y esto quedará
así hasta que un nuevo dato sea enviado. Si en lugar de escribir leemos
la dirección obtendremos un byte cuyos bits serán ceros y unos en
función del estado lógico de las líneas. Ese dato obtenido será el
último inmediato enviado y no será alterado bajando o subiendo las líneas
de datos. En otras palabras, si se escribe FF en el bus de datos del
puerto y se colocan LED's entre cada pin y masa todos estarán
encendidos. Si leemos el bus de datos obtendremos un byte cuyo valor será
FF. Pero si manualmente ponemos a masa las líneas del bus de datos en
el conector y nuevamente leemos, el valor presente seguirá siendo FF.
Es mas, esta práctica en equipos antiguos puede dañar la electrónica
de salida del puerto.
Siguiendo con las
salidas, el bus de control sólo posee cuatro líneas (las
correspondientes a los bits mas bajos) las cuales se manejan de la misma
forma que el bus de datos. Hay dos salvedades que aclarar. La primera es
que no conviene poner en 1 los cuatro bits mas altos de este bus (los
que físicamente no están implementados). Esto se resuelve impidiendo
que el soft envíe cualquier dato superior a 15 al bus de control del
puerto. Y la segunda es que, como tres de las cuatro líneas presentan
niveles lógicos invertidos, para que todos los pines del conector estén
a 0v el dato presente en este puerto deberá ser 0B en hexadecimal (11
en decimal). Esto se deduce de lo siguiente: Los pines asignados a los
bits de control 0, 1 y 3 presentan 5v cuando en el bus los mismos bits
están en 0 y presentan 0v cuando están en 1. Por ende, para que en las
salidas los pines no presenten tensión deberán ponerse esos bits en 1.
Este bus, al igual que el de datos, es un latch consultable, corriendo
con las mismas normas explicadas arriba.
Concluyendo, el bus
de estado puede ser leído, y por consiguiente saberse el estado de las
líneas en sus pines, con solo hacer una consulta o lectura a la dirección
de memoria asignada. De esta forma, inmediatamente hecha la consulta, se
censa el estado de las líneas, se invierte el nivel lógico de la
correspondiente al bit 7 (pin 11) y se coloca el dato a disposición del
usuario. Este bus no es latcheado por lo que, para un correcto
funcionamiento, el dato a leer debe ser sostenido tanto como demore la
instrucción de consulta al puerto. Escribir en este bus no produce
efecto alguno. Cabe aclarar que las tensiones presentes en los pines
deben respetar el estándar de la familia TTL, o sea, 0v (masa) y 5v
(tensión). Dado que los tres primeros bits (los menos significativos)
no están implementados es conveniente no interpretarlos. Para ello lo
mejor es primero leer el dato y seguidamente hacerle un AND con el
decimal 248 (00011111 en binario o 1F en hexa). De esta forma el dato
resultante estará formado exclusivamente por los bits 3, 4, 5, 6 y 7.
Como ya adelantamos
el sistema operativo asigna a los puertos paralelos la sigla LPT, que
parte de la contracción de Line PrinTer. El primer
dispositivo recibe el número 1 (LPT1) y el último el 3 (LPT3). Pero no
siempre LPT1 es 378. En los ya obsoletos adaptadores de vídeo MGP ó Hércules
que incluían un puerto paralelo con dirección base 3BC el puerto era
visto por el DOS como LPT1, siguiéndole el 378 con el indicador LPT2 y
por último el LPT3 en la dirección base 378. En los equipos con puerto
paralelo on-board el puerto LPT1 generalmente es 378 y se puede
reasignar a 278 ó 3BC utilizando la utilidad de configuración (CMOS
Set-Up).
Hay que tener en
cuenta lo siguiente al momento de desarrollar alguna aplicación con
este puerto: Cuando se enciende la computadora y se arranca el sistema
el puerto paralelo no permanece con todos sus terminales en un estado
determinado sino que, aleatóriamente, los bits de los tres buses
adoptan niveles azarosos. En algunas computadoras (las pocas) durante el
POST (período de arranque del hardware donde se comprueba el correcto
funcionamiento general del sistema) el puerto paralelo es utilizado para
sacar datos relativos a los pasos de las pruebas del hardware
permitiendo corregir problemas incluso sin tener vídeo.
Lo anterior, si bien
no parece demasiado importante, es crucial en sistemas donde el dato
enviado puede generar conflictos o problemas. Un caso seria el ejemplo
de abajo:
Si al bit 0 del bus
de datos conectamos un relé (con toda la electrónica necesaria para
manejarlo) que accione un motor haciéndolo girar en un sentido y en el
bit 1 colocamos otro relé (con todos sus componentes) que haga al mismo
motor girar hacia el otro lado tendríamos la posibilidad de manejar por
soft hacia que lado queremos hacer girar el motor o si queremos dejarlo
quieto. Esto podría hacerse muy fácil con dos relés. El primero
asigna tensión al motor en una polaridad y el segundo en la polaridad
inversa al primero. Pero si encendemos los dos relés al mismo tiempo
quedarían aplicadas al motor polaridad en ambos sentidos,
cortocircuitando las vías de tensión y produciendo cualquier clase de
desastre.
Por lo comentado
arriba deberán tomarse las medidas necesarias tanto por soft como por
hard para que esta clase de problemas no ocurran.
Otro posible
conflicto puede ocurrir si una aplicación intenta imprimir sobre el
puerto.
Con el tiempo y la lógica
evolución de la tecnología surgió el estándar EPP, que significa Enhaced
Parallel Port o Puerto Paralelo Mejorado. Este utiliza la
misma disposición de buses, el mismo conector y la misma asignación de
pines que el SPP sólo que en este caso el bus de datos puede tanto
enviar información hacia fuera de la computadora como recibirla desde
allí.
Por último, y con el
surgimiento de la necesidad de alta velocidad y capacidad de
transferencia de datos por este puerto, surgió el ECP, que significa Extended
Computer Port ó Puerto Extendido de Computadora. Este es
igual al EPP pero adicionalmente el bus de datos es bidireccional
permanente y, además, posee acceso directo a memoria e interrupción
programable del procesador.
volver al
comienzo....
|