For English version click here

Interconexi�n de puertos paralelos de la forma m�s f�cil: Circuitos simples y programas para mostrar c�mo usar las capacidades de salida de los puertos paralelos de un PC

Copyright Tomi Engdahl 1996-2009

�ndice

Introducci�n

Los puertos paralelos de un PC pueden ser un canal entrada/salida muy �til para conectar sus propios circuitos a un PC. Los puertos paralelos de un PC se pueden usar para llevar a cabo algunos experimentos de conexi�n de hardware muy interesantes. Son puertos muy f�ciles de usar una vez se entienden unos cuantos trucos b�sicos. Este documento intenta mostrar estos trucos de forma f�cil de entender.

ADVERTENCIA: Los puertos paralelos de un PC se pueden da�ar muy f�cilmente si se cometen errores en los circuitos a los que se conectan. Si el puerto paralelo se encuentra integrado en la placa madre (como es el caso de la mayor�a de los nuevos ordenadores), reparar el puerto paralelo da�ado puedo resultar caro (en muchos casos sale m�s barato directamente sustituir la placa madre que reparar el puerto). Su mejor opci�n es comprar una tarjeta de entrada/salida barata con un puerto paralelo extra y usar �ste para sus experimentos. Si da�a el puerto paralelo de la tarjeta, sustituir �sta es f�cil y barato.

NOTA: Los detalles de control de nivel del puerto de entrada/salida que se comentan en este art�culo, se ha demostrado que funcionan correctamente con puertos paralelos en la placa madre del PC y en tarjetas de expansi�n conectadas a bus ISA. Los ejemplos de programaci�n pueden no funcionar con tarjetas de entrada/salida basadas en bus PCI (pueden usar hardware y/o direcciones de entrada/salida diferentes, son sus drivers los que les hacen actuar como puertos paralelos frente a aplicaciones �normales�). Los ejemplos de programaci�n no funcionan con adaptadores USB a puerto paralelo (�stos usan hardware totalmente diferente, son tambi�n sus drivers los que los hacen parecer puertos paralelos normales frente a las aplicaciones �normales� del sistema operativo).

EXENCI�N DE RESPONSABILIDAD: Se ha tomado toda precauci�n razonable a la hora de producir esta informaci�n. A�n as�, el autor no acepta ninguna responsabilidad por el efecto que esta informaci�n pueda tener en su equipo ni por ninguno de los resultados del uso de esta informaci�n. Es la responsabilidad del usuario final determinar la validez de uso para cualquier objetivo particular. Los circuitos y el software mostrados aqu� son para uso no comercial sin necesidad del permiso del autor.

C�mo conectar circuitos a un puerto paralelo

El puerto paralelo de un PC es un conector hembra en forma de �D� de 25 clavijas que se puede encontrar en la parte trasera del ordenador. Normalmente se usa para el ordenador a una impresionar, pero hay muchos otros tipos de hardware que se pueden conectar a trav�s de este puerto.

No todas las 25 se necesitan siempre. Normalmente se puede pasar con 8 clavijas de salida (l�neas de datos) y una base de se�al. He presentado estas clavijas en la tabla de debajo. Estas clavijas de salida sirven para varios objetivos.

clavija funci�n
 2       D0
 3       D1
 4       D2
 5       D3
 6       D4
 7       D5
 8       D6
 9       D7

Las clavijas 18,19,20,21,22,23,24 y 25 son todas clavijas suelo.

Estas clavijas de datos son clavijas de salida de nivel TTL. Eso significa que idealmente sacan 0V cuando est�n en un nivel l�gico bajo (0) y +5V cuando se est�n en un nivel l�gico alto (1). En la realidad, los voltajes pueden ser ligeramente diferentes de los ideales cuando el circuito se encuentra cargado. La capacidad de salida de corriente de los puertos paralelos est� limitada a s�lo algunos miliamperes.

Aqu� se muestra una idea simple sobre c�mo se puede conectar carga a clavijas de datos de los puertos paralelos de un PC.

        Dn Salida ------+
                        |+
  Fuente               Load (hasta 2.6 mA @ 2.4 v)
                        |-
            Suelo ------+

�sta no es la �nica forma de conectar cosas a un puerto paralelo.

Las clavijas de datos de los puertos paralelos son salidas TTL, que se pueden tanto enterrar como actuar como fuente de corriente. En implementaciones ordinarias de puertos paralelos las salidas de datos son salidas t�tem TTL 74LS374 de circuito integrado que pueden servir 2.6mA y enterrar 24mA.

Las salidas TTL normales consisten b�sicamente de dos transistores �amontonados� en serie entre +5V y tierra, con la salida viniendo de la conexi�n entre ellos. Eso se llama una �salida t�tem�. En cualquier momento dado, uno de estos dos transistores est� conduciendo y el otro no. Para conseguir una salida �alta�, el transistor de +5 a la salida conduce (H), lo que sirve corriente positiva de la salida a tierra (esto significa que un dispositivo externo que se conecte entre la salida y el suelo recibir� electricidad). Para conseguir una salida baja, consiste �nicamente el transistor bajo (L), �enterrando� la corriente en tierra; un dispositivo externo entre +5 volts y la salida puede tener energ�a.

    +5      
        /    	     |
    ---H encendido  V      
        \            -->   
         |________  salida TTL encendida=1=alto, "sirviendo" corriente
         | fuera  \
        /         / |
    ---L apagado  \ V
        \_________/
        Tierra      


       +5_________
        /         \
    ---H apagado  / |
        \         \ V
         |________/  salida TTL apagada=0=bajo, "enterrando" corriente
         |  <-- fuera
        /
    ---L encendido |
        \   V
        Tierra      
  

Las salidas est�n dise�adas para que sirvan como m�nimo 2.4V a una carga de 2.6mA. La cifra 2.6mA es v�lida para los circuitos ordinarios LS-TTL, las implementaciones LSI usadas en muchos ordenadores pueden dar menos o m�s. Por ejemplo, el chip de puerto paralelo UM82C11-C bastante popular hace unos a�os, s�lo puede servir 2mA.

Conexi�n simple para enterrar carga de corriente:

        Dn salida ------+
                        |+
  Sirviendo           Carga (hasta 2.6 mA a 2.4 v)
                        |-
        Tierra ---------+

Al tomar corriente del puerto paralelo de un PC, mantenga la carga baja, no m�s de unos pocos miliamperes. Intentar tomar mucho corriente (por ejemplo, acortando las clavijas al suelo) puedo fre�r el puerto paralelo. En mi caso, no he roto (a�n) ning�n puerto paralelo con este m�todo, pero he tenido casos en los que un exceso de carga ha calentado mucho el puerto IC. Proceda con cuidado.

Si tiene una fuente de +5 volts externa, tiene otra opci�n de conexi�n: usar las clavijas de salida de datos para enterrar hasta 24mA de su fuente de +5 volts. Esto se puede hacer con un circuito de este tipo:

                    +------------------------------- (+5 v)
                     |+
   Enterrando       Carga (hasta 24 mA a 4.2v)
                     |-	     Fuente de energ�a
        Dn Salida ------+

        Tierra -------------------------------------- (Tierra)

La carga consigue potencia y de esta forma se obtiene +5V externos y el puerto de datos de la impresora se encuentra a 0. Este circuito le da la capacidad de conducir m�s corriente que la opci�n de �enterrar�. Tiene que ir con cuidado con este circuito, porque en este circuito puede fre�r el puerto paralelo muy f�cilmente si hace algo mal. Mi recomendaci�n es proceder con atenci�n con este tipo de circuito y asegurarse que la fuente de energ�a externa se apaga cuando se apaga el ordenador (a los puertos de impresora puede no gustarles recibir una aportaci�n de energ�a de +5V a trav�s del puerto de carga de la impresora cuando �stos no est�n encendidos). La fuente externa de +5V m�s conveniente probablemente sea otro puerto de su ordenador (USB, joystick, teclado/rat�n, etc�)

Yo he usado mayoritariamente circuitos del tipo �enterrando� y este art�culo est� centrado en �stos.

Circuitos simples conductores de LED

Usted puede hacer circuitos simples para conducir un peque�o LED a trav�s del puerto paralelo de un PC. Los �nicos componentes necesarios son un LED y una resistencia de 470 Ohm. Simplemente tiene que conectar el diodo y la resistencia en serie. La resistencia es necesaria para limitar la corriente que se toma del puerto paralelo a un valor que pueda encender LED aceptablemente normales manteniendo al mismo tiempo un valor seguro (sin sobrecargar el chip del puerto paralelo). En un caso pr�ctico, la salida de corriente ser� de unos poco miliamperes para el LED, lo que har� que un LED t�pico se ilumine ligeramente, pero no sacar� toda su luminosidad.

LED and resistor

A continuaci�n, puede conectar el circuito al puerto paralelo de forma que uno de los extremos del circuito vaya a una clavija de datos (la que utilizar� para controlar el LED) y otra vaya a cualquiera de las clavijas tierra. Aseg�rese que conecta el LED en el circuito de forma que la parte positiva (la m�s larga) vaya a la clavija de datos. Si pone el LED al rev�s, �ste no se encender� nunca. Puede conectar un circuito a cada una de las clavijas de datos del puerto paralelo. De esta forma, obtiene 8 LEDs controlables por software.

LEDs wired to parallel port

El control por software es f�cil. Cuando env�a un 1 a trav�s de la clavija de datos, el LED est� conectado y se encender�. Cuando env�e un 0 en esta misma clavija, el LED dejar� de encenderse.

Aqu� pueden ver dos fotograf�as del circuito de este tipo que yo he construido:

LEDs wired to parallel port circuit photo 1
LEDs wired to parallel port circuit photo 2

En estos circuitos he conectado el cable tierra a s�lo una clavija de tierra (tambi�n funciona bien, puede usar cualquiera de las clavijas de tierra).

Especificaciones t�cnicas de las clavijas de los puertos paralelos

Las especificaciones de IBM seg�n http://www.epanorama.net/counter.php?url=http://www.linux.com/howtos/IO-Port-Programming-6.shtml dicen lo siguiente: Las clavijas de salida de datos (clavijas 2-9) entierran 24mA, sirven 15mA y su nivel alto de salida es como m�nimo 2.4V. El estado bajo para ambos es m�ximo 0.5V. Las clavijas 1, 14, 16 y 17 (los controles de salida) tienen drivers de colector abiertos llevados a 5V a trav�s de resistencias de 4.7kiloohm (entierran 20mA, sirven 0.55mA, nivel alto de salida de 5.0V menos pullup). Los puertos paralelos que no sean de IBM probablemente se desv�en de este est�ndar.

Advertencia: Proceda con cuidado al conectar a tierra. Puede estropear puertos paralelos al conectarles dispositivos cando el ordenador se encuentra encendido. No es una buena idea acortar las clavijas a tierra o +5V, esto puede da�ar los puertos. Probablemente sea una buena idea usar puertos paralelos no integrados en la placa madre para hacer cosas de este tipo. (Normalmente puede conseguir un segundo puerto paralelo para su ordenador con una tarjeta est�ndar �multi-I/O� barata).

Programas de control para DOS (y Win9x)

El programa siguiente es un ejemplo de c�mo controlar las clavijas de datos de un puerto paralelo LPT1 a trav�s de su software. Este ejemplo controla directamente los registros del puerto paralelo, de forma que no funciona en algunos sistemas operativos multitarea. Funciona perfectamente en MSDOS. Puede mirar el c�digo Borland Pascal 7.0 (tambi�n deber� compilarlo con versiones anteriores) y despu�s descargar el programa compilado LPTOUT.EXE. Esto ha funcionado perfectamente para m� en sistemas DOS y sistemas Windows 95/98. En algunos tests recientes, este programa funciona de forma intermitente en algunos sistemas Windows 2000.

Program lpt1_output;

Uses Dos;

Var
   addr:word;
   data:byte;
   e:integer;

Begin
   addr:=MemW[$0040:$0008];
   Val(ParamStr(1),data,e);
   Port[addr]:=data;
End.

C�mo usar el programa

LPTOUT.EXE es un programa muy f�cil de usar. El programa toma un par�metro, que es valor de datos enviado al puerto paralelo. Este valor tiene que ser entero en formato decimal (por ejemplo 255). Tambi�n se pueden usar n�meros hexadecimales, pero tienen que ir precedidos por el s�mbolo $ (por ejemplo $FF). El programa no tiene ning�n tipo de comprobador de errores para mantenerlo simple. Si el n�mero que da no se encuentra en el formato correcto, el programa enviar� alg�n valor extra�o al puerto.

NOTA: He descubierto que este programa no funciona correctamente en algunos sistemas Windows 2000. Lo he comprobado, pero no s� qu� causa este problema espec�fico (a parte del hecho que no deber�a intentar acceder directamente a hardware en sistemas basados en Windows NT). No he probado este programa en Windows XP.

Ejemplo de c�mo usar el programa

LPTOUT 0
Establece todas las clavijas de datos a nivel bajo.

LPTOUT 255
Establece todas las clavijas de datos a nivel alto.

LPTOUT 1
Establece la clavija de datos D0 a nivel alto y todas las otras a nivel bajo.

C�mo calcular sus propios valores a enviar al programa

Tiene que pensar en el valor que da al programa c�mo si fuera un n�mero binario. Cada bit del n�mero binario controla un bit de salida. La siguiente tabla describe la relaci�n de bits, clavijas de salida del puerto paralelo y valor de estos bits.

Clavija     2   3   4   5   6   7   8   9
Bit         D0  D1  D2  D3  D4  D5  D6  D7
Valor       1   2   4   8   16  32  64  128
Por ejemplo, si quiere establecer las clavijas 2 y 3 a l�gico 1 (LED encendido) tiene que sacar el valor 1+2=3. Si quiere encender las clavijas 3, 5, y 6 tiene que sacar el valor 2+8+16=26. De esta forma puede calcular el valor de cualquier combinaci�n de bits que quiera sacar.

Modificando el c�digo fuente

Puede cambiar f�cilmente el n�mero del puerto paralelo en el c�digo fuente simplemente cambiando la direcci�n de memoria donde el programa lee la direcci�n del puerto paralelo. Para m�s informaci�n, eche un vistazo a la tabla siguiente.

Format of BIOS Data Segment at segment 40h:
Offset  Size    Description
 08h    WORD    Base I/O address of 1st parallel I/O port, zero if none
 0Ah    WORD    Base I/O address of 2nd parallel I/O port, zero if none
 0Ch    WORD    Base I/O address of 3rd parallel I/O port, zero if none
 0Eh    WORD    [non-PS] Base I/O address of 4th parallel I/O port, zero if none

Por ejemplo sustituya la l�nea addr:=MemW[$0040:$0008]; en el c�digo fuente por addr:=MemW[$0040:$000A]; si quiere la salida por el LPT2.

En vez de intentar leer la direcci�n del bloque de informaci�n de DOS, siempre puede usar la direcci�n entrada/salida fijada en el c�digo fuente. El puerto LPT1 se encuentra normalmente a la direcci�n entrada/salida 378h o 3BCh.

Para encontrar la direcci�n del puerto puede usar por ejemplo el m�todo: En sistemas Windows modernos (Yo lo prob� en Windows 2000) puede la direcci�n entrada/salida del puerto paralelo en el administrador de dispositivos. Primero abra el administrador de dispositivos (inicio � configuraci�n � panel de control � sistema � hardware � administrador de dispositivos). Una vez all�, selecciones el puerto que le interesa en la secci�n Puertos (COM y LPT). Con el bot�n derecho del bot�n se le abrir� un men� en el que debe seleccionar Propiedades. Una vez all�, selecciones Recursos y se le abrir� una ventana como �sta:

Windows device control IO address view

Los detalles en esta imagen son del puerto paralelo integrado en la placa madre de mi PC.

Programaci�n de puertos paralelos en DOS

Los ejemplos siguientes son ejemplos de c�digo peque�o sobre c�mo programar para puertos entrada/salida usando diferentes lenguajes. En los ejemplos he usado la direcci�n entrada/salida 378h, que es una de las direcciones donde puede encontrarse el puerto paralelo.

Las configuraciones t�picas de direcciones para puertos paralelos de entrada/salida en PCs con bus ISA son:

�stas son las direcciones t�picas entrada/salida en los sistemas basados en bus ISA. En los sistemas basados en bus PCI, el puerto LPT1 de la placa madre normalmente se encuentra en la direcci�n entrada/salida 378h o 3BCh. Si el sistema tiene puertos LPT extra en una tarjeta multi-IO en un bus PCI, estos puertos LPT funcionan diferente de los puertos paralelos �normales� descritos en este documento y no se pueden aplicar los mismos m�todos de control (se encuentran en direcciones entrada/salida diferentes y podr�an llevar un sistema de control de registro diferente que podr�a ser espec�fico de la tarjeta, el driver que viene con la tarjeta es el que lo hace parece como un puerto LPT normal frente a las aplicaciones que usan las rutinas de impresi�n est�ndar del sistema operativo).

Los ejemplos siguientes son para el sistema DOS (pueden, o no, funcionar en otros sistemas). Los ejemplos de c�digo est�n dise�ados para ser usados con un puerto LPT1 en direcci�n de entrada/salida 378h.

Ensamblador

MOV DX,0378H
MOV AL,n
OUT DX,AL 
Donde n son los datos que quiere sacar.

BASIC

OUT &H378, N
Donde n es el n�mero que quiere sacar.

C

 
outp(0x378,n);
or
outportb(0x378,n);
Donde n son los datos que quiere sacar. El comando de control del puerto de entrada/salida es diferente seg�n el compilador, puesto que no forma parte de las librer�as estandarizadas de C.

Aqu� hay un ejemplo de c�digo fuente para el compilador Borland C++ 3.1:

#include <stdio.h>
#include <dos.h>
#include <conio.h>

/********************************************/
/*Este programa establece la salidas del puerto paralelo*/
/********************************************/

void main (void)
{
clrscr();             /* limpiar pantalla */
outportb(0x378,0xff); /* sacar los datos al puerto paralelo */
getch();              /* esperar pulsi�n sobre una tecla para salir */
}

Usando DOS debug para acceder al puerto paralelo

El programa Debug de DOS es un simple ensamblador 8088 que viene con el sistema operativo DOS (tambi�n se puede encontrar en las utilidades DOS de lo sistemas Windows m�s modernos). El programa Debug permite depurar aplicaciones DOS simples de 16-bit (no sirve para programas Windows modernos de 32-bit). Debug es un programa que tiene integradas varias herramientas de depuraci�n para leer y escribir puertos de entrada/salida.

o- escribe un byte de datos al puerto entrada/salida especificado
SYNTAX o port value
port � especifica la direcci�n del puerto. La direcci�n del puerto puede ser un valor de 8 o 16 bit.
value � especifica el valor a escribir en el puerto de entrada/salida. Es un valor de 8 bit. 
i- lee un byte de datos del puerto entrada/salida especificado.
SYNTAX i port
port � especifica la direcci�n del puerto. La direcci�n del puerto puede ser un valor de 8 o 16 bit.

Ejemplos:

Si escribe

o 3bc ff

El programa debug sacar� el valor ff (hex) al puerto 3bc (hex). 

Si escribe
 
i 3bc
 
El programa debug mostrar� 1 byte de datos del puerto paralelo.

Control de puertos paralelos en programas Windows

Escribir programas para hablar con los puertos paralelos era bastante f�cil en los viejos d�as de DOS y tambi�n en los de Win95/98. Podemos usar tranquilamente Inporb y Outporb o las funciones or_inp(), or_outp en nuestros programas sin ning�n problema si estamos ejecutando el programa en DOS o Win95/98, pero entrando la nueva era de sistemas operativos clones del NT como WIN NT4, WIN2000 y WINXP, toda esta simplicidad se pierde.

En Windows 3.x y Windows 95 es posible el control directo de puertos paralelos a trav�s de aplicaciones de 16-bit y librer�as DLL. As� que puede usar el ejemplo en C anterior en Windows 3.x y Windows 95 si hace que su programa sea una aplicaci�n de 16-bit. Si quiere controlar puertos paralelos con Visual Basic o Delphi puede echar un vistazo a las librer�as Parallel Port Central en http://www.epanorama.net/counter.php?url=http://www.lvr.com/parport.htm.

El control directo de puertos a trav�s de aplicaciones no es posible en Windows NT, de forma que para controlar los puertos paralelos directamente hay que escribir alg�n tipo de driver para su dispositivo. Puede encontrar este tipo de drivers en Parallel Port Central y Inpout32.dll for WIN NT/2000/XP.

Driverlinx PortIO en http://www.epanorama.net/counter.php?url=http://www.driverlinx.com/DownLoad/DlPortIO.htm es un driver al que vale la pena echarle un vistazo si quiere acceder a puertos entrada/salida en Windows 95/NT (tambi�n funciona bien con Windows 2000). Este software gratuito viene con ejemplos de programas (disponibles tanto en ejecutables como en c�digo fuente) sobre c�mo acceder a puertos entrada/salida desde programas en Visual Basic y Microsoft Visual C.

La p�gina control entrada/salida usando Visual Basic que se encuentra en http://www.epanorama.net/counter.php?url=http://www.southwest.com.au/~jfuller/vb/vbout.htmdescribe cu�n f�cil es hacer una simple aplicaci�n en Visual Basic que controle los puertos paralelos de un PC.

Si est� buscando un software ya hecho, puede echar un vistazo la p�gina Web del kit Kemo M125 en http://www.epanorama.net/counter.php?url=http://www.kemo-electronic.com/en/module/m125/.El m�dulo de rel� Kemo est� dise�ado para hasta 8 tipos de electrodom�sticos, l�mparas o motores diferentes siguiendo un mismo programa (hasta 40V y carga hasta 0,4A DC o 0,3A AC). El m�dulo es operado por el puerto de impresi�n LPT1 de la misma forma que en mis ejemplos de circuito de control de puertos paralelos (en este m�dulo hay un rel� de estado s�lido conectado para cada una de las ocho clavijas de salida de datos del puerto paralelo). La p�gina de informaci�n del kit Kemo M125 tiene software de control disponible para descargar. Estos software permiten el control manual de las salidas y tambi�n temporizar operaciones. El software para Windows funciona en Win9x, Win2k y WinXP. Tambi�n hay ejemplos de programaci�n en C con el c�digo fuente disponible.

Puede encontrar la descripci�n de un kit de placa de rel� de puerto paralelo en http://www.epanorama.net/counter.php?url=http://electronickits.com/kit/complete/elec/ck1601.htm Viene con software de control para Windows y DOS que se puede descargar de su p�gina Web. Este software funciona con Windows 9x/2000/ME/XP. Puede encontrar informaci�n sobre utilidades en DOS en http://www.epanorama.net/counter.php?url=http://www.qkits.com/serv/qkits/diy/pages/QK74.asp.

La p�gina de monitores de puertos paralelos en http://www.epanorama.net/counter.php?url=http://neil.fraser.name/software/lpt/ tiene programas que le van a permitir establecer y monitorizar el estado de clavijas de puerto paralelo. Este software est� disponible en algunas versiones diferentes que funcionan en sistemas Windows 98 / ME / NT / 2000 / XP y DOS / Windows 3.1 / 95 / 98 / ME. Este software est� escrito usando los lenguajes de programaci�n Visual Basic y Euphoria y se encuentra disponible en forma de c�digo fuente.

M�s all� del dise�o en serie de software de puertos paralelos y de software de conexi�n de PC VBPortTest en http://www.epanorama.net/counter.php?url=http://www.beyond-designs.com/PC_ports.htm es una herramienta �til. VBPortTest parallel port utility est� dise�ado para ayudar al testeo y la depuraci�n de interfaces de puerto paralelo. Permite acceso a los tres registros (datos, estado y control) asociados con el puerto paralelo est�ndar de un PC (SPP). El usuario puede leer y escribir registros de datos y de control. El programa lee continuamente el registro de estado (el registro de estado es de s�lo lectura). Los bits de registro individuales se muestran en LEDs con el valor hex para el registro de datos entero. En modo escritura, el usuario puede cambiar bits individuales haciendo clic en el correspondiente LED. Los valores hexadecimales se pueden introducir por teclado. Son posibles los modos bit, byte y strobe byte. En l�nea se puede encontrar ayuda en forma de materiales de referencia de puertos paralelos que incluyen descripciones de se�al y �Centronics handshake timing waveform�. VBPortTest se encuentra disponible para descarga como freeware. Es compatible con Windows 98, ME y XP.

Si quiere programar puertos paralelos en Windows con C/C++ una de las formas de hacerlo es usando el compilador Borland C gratis inpout32.dll. Para m�s informaci�n puede revisar http://hytherion.com/beattidp/comput/pport.htm y http://csjava.occ.cccd.edu/~gilberts/bcc55.html. El segundo enlace es una gu�a paso a paso muy completa sobre c�mo hacer las cosas.

Interfaz API est�ndar Windows

El API est�ndar Windows para programar puertos paralelos est� pensado para enviar caracteres a la impresora. No est� pensado para controlar el encendido o apagado de clavijas simples.

Usando el puerto paralelo para salida digital se puede hacer funcionar con la API normal de Windows con un simple hack. El truco principal es conectar las clavijas 11 (Ocupada) y 12 (Error de papel) a tierra. De otra forma, el driver de hardware pensar� que la impresora con la que est� hablando est� ocupada o experimentando un error y no sacar� los datos.

S�lo tiene que enviar un car�cter al puerto paralelo y Windows enviar� el valor de este car�cter a las clavijas de datos del puerto de la impresora y, adem�s, generar� un pulso par la l�nea strobe. El puerto mantendr� el �ltimo valor escrito hasta que se escriba otro valor o hasta que el ordenador se apague o hasta que se env�en datos nuevos al puerto. Si saca m�s de un byte al mismo tiempo, el driver enviar� los datos al puerto en secuencia y apagar� y encender� la l�nea Strobe una vez para cada byte. El intervalo de tiempo depende un poco de cada ordenador.

Esto significa que en un entorno Windows podemos sacar datos por el puerto paralelo. Puede enviar datos hasta a trav�s de la l�nea de comandos con el comando �copy� de esta forma:

copy somefile.bin LPT1

Esto enviar� el contenido del archivo somefile.bin por el puerto paralelo. El valor del �ltimo byte del archivo quedar� como el estado del puerto paralelo despu�s de la ejecuci�n del comando.

A parte de la necesidad del hack de hardware, hay otras limitaciones en el m�todo de la API de Windows. La API de Windows no tiene soporte nativo para las operaciones de entrada ni para leer el �ltimo valor enviado. Aunque el hardware del puerto paralelo lo permite, el driver del software no.

Control de puertos paralelos en Linux

Linux permite acceso a cualquier puerto usando la ioperm syscall. Aqu� tienen unas l�neas de c�digo para escribir 255 en el puerto de la impresora:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>

#define base 0x378 /* direcci�n base del puerto de la impresora */
#define value 255  /* valor num�rico a enviar al puerto de la impresora */

main(int argc, char **argv)
{
   if (ioperm(base,1,1))
    fprintf(stderr, "No se pudo obtener el puerto en la base %x\n",), exit(1);

   outb(value, base);
}

Guarde el c�digo fuente en el archivo lpt_test.c y comp�lelo con el comando:
gcc -O lpt_test.c -o lpt_test

El usuario debe tener privilegios para tener acceso a los puertos para que el programa pueda ejecutarse, de forma que tiene que ser �root� para poder ejecutar este tipo de programas sin problemas de acceso. Si quiere hacer un programa que pueda ejecutar cualquiera primero tiene que establecer la propiedad del archivo a �root� (por ejemplo, compil�ndolo siendo �root�) y despu�s dar derechos de ejecuci�n a los usuarios y establecer que el programa se ejecute siempre con los derechos del propietario (�root�) dentro de los derechos del usuario que lo ejecuta. Puede establecer que el programa se ejecute con los derechos del propietario con el comando siguiente:

chmod +s lpt_test

Notas sobre el c�digo fuente: Algunas personas han reportado que por alg�n motivo este c�digo no funciona en sus sistemas. Si tiene problemas para hacerlo funcionar, pruebe haciendo los siguiente cambios al c�digo: sustituya las l�neas "#include <unistd.h%gt;" and "#include <asm/io.h>" with line "#include <sys/io.h>" y despu�s sustituya la l�nea "#define base 0x378" por "#define base 0x0378".

Si quiere un programa m�s �til, descargue el c�digo fuente de mi programa lptout.c para el control de puertos paralelos. Este programa funciona de forma que puede dar los datos a enviar al puerto paralelo como argumento de la l�nea de comandos (suporta tanto n�meros decimales como hexadecimales) al programa y �ste sacar� el valor al puerto paralelo. Puede compilar el c�digo fuente al comando lptout usando la siguiente l�nea para hacer la compilaci�n:

gcc -O lptout.c -o lptout

Cuando haya compilado el programa puede ejecutarlo f�cilmente. Por ejemplo, ejecutar ./lptout 0xFF pondr� todas las clavijas de datos a 1 y ejecutar./lptout 0x00pondr� todas las clavijas de datos a 0.

En algunos sistemas las direcciones de los puertos entrada/salida pueden ser diferentes de las usadas en mi programada de ejemplo. En ese caso, tiene que modificar la direcci�n en la l�nea #define base. Hay diferentes formas de conocer la direcci�n de un puerto. Primero puede probar de encontrar esta informaci�n en las herramientas gr�ficas de configuraci�n. Estas herramientas y su uso son muy diferentes en las distintas distribuciones Linux. Tambi�n puede probar con algunas herramientas de la l�nea de comandos:

Tambi�n he escrito un programa de control m�s rico en opciones. Portcontrol es un programa de control de puertos de entrada/salida para Linux de uso general. Le permite escribir y leer de los puertos de entrada/salida suportados. Este software permite escribir el valor especificado al puerto, leer el valor dado a la direcci�n de entrada/salida dada e imprimirlo en la pantalla en diferentes formatos y manipulaci�n bit-level de los datos de puerto. El software portcontrol se encuentra disponible como paquete portcontrol.tarque incluye el c�digo fuente, instrucciones para compilar/instalar e instrucciones de uso. Para m�s detalles puede revisar el README y el c�digo fuente de portcontrol.c source code.

GUI simple para Linux

He escrito un programa GUI de ejemplo bastante simple para controlar puertos paralelos en un sistema Linux. My GUI simple de control de puertos paralelos est� escrito de una forma que le permite controlar las clavijas de los puertos paralelos. Para comprobar c�mo se ve, eche un vistazo a la captura de pantalla. .

Esta GUI de control simple est� escrita de forma que funciona correctamente en los dos sistemas de escritorio GNOME y KDE. El programa est� escrito como un script de bash que utiliza programas zenity y/o kdialog para crear �l mismo los men�s GUI. El programa necesita que tenga instalado el programa portcontrol en la carpeta /usr/local/sbin/portcontrol en su sistema Linux y que le haya otorgado los privilegios de ejecuci�n necesarios.

Este programa est� pensado como un simple ejemplo que usted puede modificar para adaptarlo a su uso. Solamente tiene que descargar menu.sh y empezar a probar usted mismo.

Recomendaciones de programaci�n

Si quiere aprender m�s sobre programaci�n de puertos entrada/salida, le recomiendo que lea Linux I/O port programming mini-HOWTO.Aqu� les extraigo algunas de las recomendaciones de este documento:

Tenga en cuenta que esta forma de acceder a los puertos de entrada/salida s�lo funcionar� en sistemas i386. Para poder usar ioperm, tiene que incluir las cabeceras necesarias en su software:

#include  /* for libc5 */ 
#include  /* for glibc */ 
La funci�n prototipo es la siguiente:
int ioperm(unsigned long from, unsigned long num, int turn_on); 
Ioperm configura los bits de permiso de acceso al puerto para bytes num empezando por la direcci�n de puerto del valor turn_on. El uso de ioperm requiere privilegios de �root�. �nicamente los primeros 0x3ff puertos de entrada/salida pueden ser especificados de esta forma. Para m�s puertos, hay que usar la funci�n iopl. Los permisos no se heredan en fork, pero en exec s�. Esto es �til para dar permiso de acceso a puertos a tareas no privilegiadas. Esta llamada es v�lida sobretodo para la arquitectura i386. En muchas otras arquitecturas no existe o siempre da error. Cuando hay �xito se retorna un 0. Cuando hay un error, se retorna un -1 y errno se establece en concordancia.

Ioperm es espec�fico de Linux y no deber�a usarse en programas que pretendan ser portables. Libc5 lo trata como una llamada de sistema y tiene un prototipo en <unistd.h>. Glibc1 no tiene un prototipo. Glibc2 tiene un prototipo en <sys/io.h> y en <sys/perm.h> (evitar este �ltimo, puesto que s�lo se encuentra disponible en i386).

El acceso entrada/salida puede ser diferente en diferentes plataformas Linux (por ejemplo, alpha isa una librer�a, libio, para emular inb/outb en programas de usuario).

La descripci�n de m�s arriba se centra en el lenguaje de programaci�n C. Tambi�n deber�a funcionar en C++. En ensamblador tiene que llamar ioperm() o iopl() como en C, pero despu�s de esto puede usar las instrucciones lectura/escritura del puerto de entrada/salida directamente.

En otros lenguajes, a menos que pueda insertar c�digo ensamblador o C en l�nea dentro del programa o use una de las llamadas de sistema mencionadas m�s arriba, lo m�s f�cil seguramente sea escribir un archivo fuente simple en C con funciones para los accesos o retrasos de los puertos entrada/salida que necesite, compile y lo enlace en el resto de su programa. Tambi�n puede usar /dev/port c�mo se ha descrito m�s arriba.

Librer�a de programaci�n de clavijas de puertos paralelos en Linux

Si quiere una aproximaci�n de m�s alto nivel al control de puertos paralelos que el bajo nivel que supone el escribir directamente en los registros de control, tambi�n tiene herramientas a su disposici�n. Parapin es una librer�a de programaci�n de clavijas de puertos paralelos muy f�cil de usar. Puede encontrar este software en http://www.epanorama.net/counter.php?url=http://parapin.sourceforge.net/. Parapin hace que escribir c�digo C bajo Linux que controle las clavijas individuales del puerto paralelo de un PC sea muy f�cil. Este tipo de control es muy �til para los proyectos de electr�nica que usan los puertos paralelos de un PC que usan los puertos paralelos de un PC como interfaz gen�rica de entrada/salida.

Parapin va hasta grandes extremos para asolar el programador de la interfaz de programaci�n de puertos paralelos relativamente complexa suministrada por el hardware del PC, haciendo m�s f�cil usar el puerto paralelo para entrada/salida digital.

Parapin suministra una interfaz simple que permite a los programas usar las clavijas del puerto paralelo del PC como entradas o salidas digitales. Parapin simplifica la escritura de c�digo C en Linux que controle las clavijas individuales de los puertos paralelos de un PC. Puede establecer valores TTL l�gicos altos o bajos en clavijas de salida u obtener el estado de las clavijas de entrada. Este tipo de control es muy �til en proyectos de electr�nica que usan los puertos paralelos de un PC como interfaz de entrada/salida digital gen�rica.

Parapin tiene dos personalidades: puede ser usado como librer�a C de espacio de usuario p enlazado como parte de un m�dulo kernel de Linux. Tambi�n hay un driver de dispositivo que le da acceso a los permisos para controlar los accesos al puerto. Parapin se escribi� con la cabeza puesta en la eficiencia, de forma que Parapin se puede usar para aplicaciones que requieran de una r�pida respuesta.

La versi�n de espacio de usuario de Parapin se encuentra compilada y enlazada como cualquier otra librer�a de C. Si instal� Parapin en su sistema usando �make install�, la librer�a libparapin.a) probablemente se instal� en /usr/local/lib. El archivo de cabecera con los prototipos de funciones y otras definiciones de la librer�a, parapin.h probablemente se encuentre en /usr/local/incluye. Para usar esta librer�a, primero aseg�rese de #include parapin.h en su c�digo fuente en C. Al enlazarlo, a�ada �lparapin junto con el resto de librer�as que est� usando. La inicializaci�n de las librer�as de C se lleva a cabo con la funci�n

        int pin_init_user(int lp_base);
el �nico argumento de la cual, lp_base, espec�fica la direcci�n base entrada/salida del puerto paralelo que est� siendo controlado. Tanto en la versi�n de espacio de usuario como en la versi�n kernel, las clavijas se configuran usando las siguientes tres funciones:
        void pin_input_mode(int pins);
        void pin_output_mode(int pins);
        void pin_mode(int pins, int mode);
El argumento �pins� (clavijas) de cada una de las tres funciones acepta las constantes LP_PINnn. Una vez Parapin ha sido inicializado (Secci�n 5) y las clavijas se han configurado como clavijas de salida (Secci�n 6), puede establecer valores en estas clavijas usando las siguientes funciones:
        void set_pin(int pins);
        void clear_pin(int pins);
        void change_pin(int pins, int state);

El valor establecido por el �extremo m�s lejano� puede ser buscado usando la siguiente funci�n. Por favor, n�tese que el estado de la clavija s�lo se puede consultar en las clavijas de entrada (por hardware o establecidas como de entrada).
        int pin_is_set(int pins);

Si quiere usar la versi�n kernel de parapin desde un programa de espacio de usuario sin escribir su propio driver hardware-espec�fico, puede cargar el m�dulo parapindriver despu�s de cargar kparapin. Este dispositivo expone la funcionalidad de kparapin a trav�s de una interfaz car�cter-dispositivo normal (excepto para uso interrumpido). Las principales ventajas son que la funcionalidad de puertos paralelos de parapin puede ser controlada a trav�s de permisos filesystem /dev y toda interacci�n se hace a trav�s de llamadas de sistema orientadas a dispositivo est�ndar como open(), close(), i ioctl(). Al construir un programa de espacio de usuario que va a hacer uso de la interfaz parapindriver para kparapin, tiene que incluir parapindriver.h. Este archivo de cabecera define los comandos ioctl espec�ficos de cada dispositivo usados para comunicar con el driver del dispositivo. Tambi�n incluye parapin.h, de forma que su programa pueda hacer uso de las constantes �LP_*�. Las llamadas de sistema parapindriver toman argumentos usando estas constantes y las pasan sin cambiarlas a las rutinas kparapin.

Una vez que parapindriver se ha cargado correctamente y la entrada /dev correspondiente se encuentra en su sitio, la inicializaci�n y terminaci�n de un puerto paralelo son tareas sencillas. Para inicializar el sistema parapin, s�lo tiene que llamar open(2) en la entrada /dev como har�a con cualquier otro archivo de dispositivo: int device; device = open("/dev/", 0); if (device < 0) { fprintf(stderr, "device open failed\n"); exit(-1); } El nombre del dispositivo es normalmente parport0, parport1, parport2, etc... (como se encuentra en el sistema Linux Fedora Core 4). Para cerrar el sistema parapin lo �nico que tiene que hacer es llamar close(2):

       close(device);
Cuando est� usando la interfaz de driver parapindriver, toda funcionalidad relacionada con las clavijas del puerto paralelos se invoca con la llamada ioctl(2). Los comandos ioctl para parapindriver se encuentran definidos en el archivo de cabecera parapindriver.h. Los dos usados para establecer clavijas como de entrada o de salida son �PPDRV_IOC_PINMODE_OUT� y �PPDRV_IOC_PINMODE_IN�, respectivamente. Ejemplos:
        ioctl(device, PPDRV_IOC_PINMODE_OUT, LP_PIN01 | LP_PIN02);
        ioctl(device, PPDRV_IOC_PINMODE_IN, LP_PIN11);
Establecer el estado de una clavija a trav�s del driver del dispositivo sigue las mismas normas que las descritas m�s arriba. Los comandos ioctl usados son �PPDRV_IOC_PINSET� y �PPDRV_IOC_PINCLEAR�.
        ioctl(device, PPDRV_IOC_PINSET, LP_PIN01 | LP_PIN02);
        ioctl(device, PPDRV_IOC_PINCLEAR, LP_PIN01);
Para consultar el estado de una clavija a trav�s del driver de dispositivo hay que seguir las mismas normas que ya se han descrito m�s arriba. El comando ioctl usado es �PPDRV_IOC_PINGET�. N�tese que el estado de las clavijas s�lo se puede consultar de las clavijas de entrada (por hardware o establecidas como de entrada).
        int value;
        value = ioctl(device, PPDRV_IOC_PINGET, DATA);
Los argumentos para estas llamadas ioctl usan exactamente las mismas constantes que las usadas para las versiones espacio de usuario y kernel del mismo parapin. Los valores de retorno de estas llamadas ioctl son los mismos que los definidos para las correspondientes funciones kparapin (m�s valor -ENOTTY indica que se ha transmitido un valor de comando inv�lido).

Las clavijas de puerto paralelo son accedidas con constantes de la formas LP_PIN m�s el n�mero de la clavija de puerto paralelo. Por ejemplo, LP_PIN02 se refiere a la clavija de puerto paralelo 2 que es la clavija de salida de datos D0. Recomendaci�n de programaci�n: normalmente, es m�s conveniente usar enunciados #define para dar a las clavijas nombres l�gicos que tengan significado en el contexto de su aplicaci�n. Ejemplo:

        #include "parapin.h"

        #define VCC LP_PIN02
        #define CS  LP_PIN03
        #define CLK LP_PIN04
        #define D0  LP_PIN10 /* clavija de entrada */
        ...
        clear_pin(CS);  /* obtener Chip Select bajo, decirle de obtener */
        ...
        set_pin(CLK);   /* cronom�tralo */
        clear_pin(CLK);

Parapin tambi�n soporta interrupciones a trav�s del puerto paralelo. Actualmente, parapin s�lo soporta un puerto paralelo al mismo tiempo. Muchas de las nuevas distribuciones Linux incluyen el driver de dispositivo parport kernel ya integrado en el sistema y listo para usar.

Puede encontrar la documentaci�n de Parapin en http://www.epanorama.net/counter.php?url=http://parapin.sourceforge.net/doc/parapin.html. La mayor�a de las descripciones de parapin que se encuentran en este art�culo son una forma editada de la documentaci�n encontrada en esta direcci�n.

Otros software Linux de control de puertos paralelos

Parashelles un programa que le permite controlar el puerto paralelo (entrada y salida) usando argumentos simples de la l�nea de comandos. Gracias a su simple interfaz, todo lo que tiene que saber es la direcci�n del puerto paralelo (por ejemplo, 0x378, 0x3bc, etc.) y un poco sobre binario. Este software se puede encontrar en http://www.epanorama.net/counter.php?url=http://parashell.sourceforge.net/ Ejemplo de uso:

/usr/local/bin/parashell 0x378 VALOR
D�nde valor es el valor num�rico que quiere enviar a las clavijas de datos del puerto paralelo. Parasheel es un programa muy f�cil de usar en shell scripts. Parasheel tambi�n se puede usar para leer estados de clavijas escritos:
/usr/local/bin/pin 0x378
NOTA: Necesita privilegios de �root� para ejecutar correctamente programas parashell.

MatPLC es otro programa que puede merecer que le eche un vistazo. MatPLC es un programa del tipo PLC para Linux (PLC = Programmable Logic Controller = Controlador L�gico Programable), licenciado bajo la GNU GPL. Este software tambi�n puede controlar los puertos paralelos de un PC. La p�gina de inicio de MatPLC se puede encontrar en http://www.epanorama.net/counter.php?url=http://mat.sourceforge.net/.

Controlando puertos paralelos a trav�s de la Web

Es posible construir un sistema que le permita controlar las clavijas del puerto paralelo a trav�s de la red. Para hacer esto, necesita las siguientes partes en su sistema Linux:

Normalmente, el control v�a Web de dispositivo de entrada/salida funciona de la forma siguiente:

Normalmente la Web basada en la construcci�n de la interfaz se puede dividir en dos partes bien diferenciadas: la parte de la interfaz Web (obtener el formulario usado con la informaci�n de control al ordenador) y el control del hardware en si mismo

La primera parte incluir�a el servidor Web, el control de las p�ginas Web y los scripts necesarios para recuperar los controles del usuario. Hay una gran selecci�n de lenguajes de scripting que se pueden usar. Los m�s atractivos para este uso podr�an ser Perl, PHP y UNIX shell script (bash). Todos estos se pueden usar para leer los controles del usuario. La segunda parte normalmente requiere ser escrita en el lenguaje C, porque la mayor�a de lenguajes de scripting carecen de las opciones necesarias para el control directo de hardware. Para esto el lenguaje C es generalmente la mejor opci�n. La idea es que el control de hardware de nivel bajo se hace con un programa C simple y despu�s el script (en la parte 1) env�a los controles a este programa C de alguna forma (en el caso m�s simple, ejecuta este programa C con los argumentos de l�nea de comandos correctos cada vez que el hardware necesita ser controlado).

Ejemplo simple de control CGI-BIN

En este ejemplo la idea es que usted hace una p�gina Web que tiene los botones de control con los controles que usted quiere hacer. Los botones de control se establecen de forma que al presionarlos, el navegador del usuario env�a el contenido del formulario a un script CGI-BIN. Esta llamada provoca que el servidor Web ejecute el script CGI-BIN especificado. El script CGI-BIN est� escrito para llevar a cabo el control necesario, normalmente llamando al programa de control de puertos paralelos con los par�metros correctos.

Esta es la idea b�sica sobre c�mo hacerlo.

Aqu� hay un ejemplo simple de una aplicaci�n de control Web. Haga lo siguiente para hacerla funcionar:

1. Aseg�rese que su sistema est� ejecutando un servidor Web Apache. La mayor�a de las distribuciones Linux modernas ya vienen con este software de servidor Web. Aseg�rese que tiene instalado Apache. Los pasos siguientes requieren que usted est� corriendo un sistema Linux con un servidor Apache correctamente configurado (la configuraci�n por defecto de Red Hat 7.2 es v�lida). Considero que las p�ginas relacionadas al material que estamos tratando se encuentran en el directorio /var/www/ (este es el caso t�pico en los sistemas Linux Red Hat, en otras distribuciones esta ruta puede ser diferente, cambie los ejemplos como sea necesario si este es su caso). Aseg�rese que su servidor Web se est� ejecutando. Si no lo est�, lo puede iniciar con el siguiente comando (en la mayor�a de sistemas necesitar� ser �root� para hacer esto):

/sbin/service httpd start
Aseg�rese que puede acceder a su ordenador Linux con su navegador Web (corriendo en el mismo ordenador) cuando Apache est� corriendo el ordenador Linux.

2. Compile el c�digo fuente lptout.c al programa binario lptout, copie el programa a su directorio /usr/sbin/ y establezca los derechos necesarios para que siempre se ejecute como �root�. Puede hacer esto identific�ndose como �root� y ejecutando los comandos siguientes:

gcc -O lptout.c -o lptout.c
cp lptout /usr/sbin/lptout
chmod +s /usr/sbin/lptout
Esto deber�a ser todo. Ahora todo el mundo deber�a ser capaz de ejecutar el comando. Compruebe esto identific�ndose como alg�n otro usuario y ejecutando el comando:
/usr/sbin/lptout 0xff
Esto deber�a encender todas las clavijas de datos del puerto paralelo LPT1 y establecerlas a alto (3.5V). Ejecutando el comando:
/usr/sbin/lptout 0xff
Deber�a establecer todas las clavijas de salida a bajo (0.1V). Aseg�rese que todo esto funciona sin problemas. Compruebe que los puertos realmente sean controlados por este programa con un mult�metro o el circuito LED descrito en el principio de este documento.

3. Instale los scripts CGI para el control de los puertos paralelos. Los scripts requeridos son lpton.cgi y lptoff.cgi.. Haga clic en los nombres de los archivos para ver su c�digo fuente, haga uso de �ver c�digo fuente� si lo necesita, guarde estos archivos en su sistema con los nombres lpton.cgi y lptoff.cgi. A continuaci�n, copie estos archivos al directorio CGI-BIN de su servidor Web y d�los los permisos de ejecuci�n necesarios. Identif�quese como root y ejecute los comandos siguientes en el directorio donde haya guardado lpton.cgi y lptoff.cgi:

cp lpton.cgi /var/www/cgi-bin/lpton.cgi
cp lptoff.cgi /var/www/cgi-bin/lptoff.cgi
chmod go+rx /var/www/cgi-bin/lpton.cgi
chmod go+rx /var/www/cgi-bin/lptoff.cgi

4. Instale la p�gina Web de control necesaria. En este ejemplo, la p�gina Web necesaria se encuentra en la direcci�n Web http://www.epanorama.net/counter.php?url=http://elnombredesuservidor/lpt/index.html donde "elnombredesuservidor" significa el nombre o direcci�n IP del ordenador Linux en el que est� ejecutando la aplicaci�n. Necesita el c�digo fuente de la p�gina Web index.html (haga clic sobre el nombre del archivo para ver el c�digo fuente, use �ver c�digo fuente� si es necesario, guarde el archivo a su ordenador con el nombre index.html). Para crear el directorio Web para el control del puerto paralelo haga lo siguiente una vez identificado como �root�:

cd /var/www/html/
mkdir lpt
chmod go+rx lpt
Ahora vaya al directorio donde tiene el archivo index.html y c�pielo al directorio creado con los siguientes comando (siguiendo identificado como �root�)
cp index.html /var/www/html/lpt/index.html
chmod go+r /var/www/html/lpt/index.html

5. Compruebe que puede acceder a la p�gina de control en su servidor Linux. Dirija su navegador Web a la direcci�n http://www.epanorama.net/counter.php?url=http://elnombredesuservidor/lpt/index.html donde �elnombredesuservidor� significa el nombre o la direcci�n IP de su ordenador Linux. Deber�a ver una p�gina de control parecida a la siguiente: Web browser view of controlling page

6. Pruebe a hacer clic en los botones de control y compruebe que las clavijas de salida del puerto paralelo cambian de estado como indican los botones.

Puede encontrar todos los archivos necesarios para este proyecto Web simple en un archivo tar llamado weblpt.tar. Simplemente desc�rguelo en su sistema Linux y descompr�malo a un directorio adecuado con el comando

tar xvf weblpt.tar
Ahora tiene todos los archivos necesarios. Simplemente siga los pasos requeridos con cada uno de ellos y deber�a tener su aplicaci�n Web de control funcionando correctamente.

NOTA: Esto es un ejemplo simple de control de puertos paralelos por la Web. Este ejemplo probablemente no sea la forma m�s conveniente o eficiente de hacer el control, pero ha funcionado para mi. Al hacer electr�nica que ser� controlada a trav�s de la Web, siempre hay que tener en cuenta la seguridad de la informaci�n relacionada, eso significa que hay que asegurarse que s�lo las personas que deber�an pueden hacer el control y que nadie puede piratear f�cilmente el sistema. Este m�todo tiene riesgos potenciales de seguridad porque el programa lptout siempre se ejecuta con privilegios de �root� (si alguien consigue hacerlo colgarse de alguna manera, puede causar problemas potenciales de seguridad). Para hacer todos los pasos mencionados en este documento necesita estar identificado como �root� en el sistema. Cuando uno est� identificado como �root� puede hacer mucho da�o a su sistema si comete errores est�pidos.

Control de puertos paralelos usando PHP

Aqu� hay otro ejemplo de c�digo fuente para el control de puertos paralelos. Este se me envi� por Andrew Nickson para que lo incluyera en esta p�gina Web. Se trata de un script php que permite la escritura de data en cualquier puerto paralelo. Requiere tener un servir Web Apache y una versi�n decente de PHP instalada en Apache. Muchas distribuciones de Linux ya incluyen estas herramientas si las selecciona al instalar su sistema (si no, tendr� que instalarlas usted mismo).

Picture of controlling web page

Hay dos archivos, uno es el mismo script php y el otro los datos del formulario usados para obtener los datos de entrada del usuario. Para que este script funcione necesita tener en su ordenador el mismo programa lptout del que se ha hablado en los otros ejemplos instalado en /usr/sbin/ con los derechos necesarios para que el servidor Web lo pueda ejecutar.

Aqu� puede ver el c�digo fuente de lptout.php / parallel.php:

<?php
/* Program: lptout.php
 * Desc:    Toma los datos del formulario y los env�a al programa de control del puerto paralelo (lptout).
 *			Los valores deben ser introducidos en hex (0 - ff)
 *          Requiere que lptout se encuentre en /usr/sbin/
 *          
 *	Por Andrew Nickson (www.re-mastered.co.uk)
 */

?>

<?php

  switch (@$_GET['do'])                               
  {

    case "update":
	{
		echo ("<center><br>Data sent to parallel port (0x$fvalue)</br></center>");

		exec ("/usr/sbin/lptout 0x$fvalue");
		include("parallel.inc");
	}
	break;             

    default:                                             
        include("parallel.inc");
  }
?>

Aqu� puede ver el c�digo fuente del archivo parallel.inc file usado por el c�digo fuente anterior. Este c�digo fuente imprime el formulario que se muestra al usuario para el control del puerto paralelo.

<?php
/* Program: Parallel.inc
 * Desc:    Contiene los datos del formulario para el control del puerto paralelo
 *          Esto llamar� a parallel.php.
 *         
 *	Por Andrew Nickson 2005 (www.re-mastered.co.uk)
 */
?>

<html>
<head><title>Controlador del Puerto Paralelo</title></head>
<body topmargin="0" leftmargin="0" marginheight="0"
      marginwidth="0">
         <center><form action="parallel.php?do=update" method="POST"> 
         <table border="0">
          <tr><td align=right><b>Value (HEX)</b></td>
             <td><input type="text" name="fvalue" 
                      size="5" maxsize="3">
             </td></tr>
                <br><input type="submit" name="Update" 
                           value="Actualizar">
               </td></tr>
         </table>
</body></html>

Puede descargar estos c�digos fuente como un s�lo paquete comprimido de nombre lptoutphp.zip.

Control Web usando PHP y AJAX

La interfaz Web del software portcontrol es una interfaz Web moderna simple para el control de puertos paralelos. Este software est� basado en software PHP corriendo en un servidor Linux y una aplicaci�n cliente JavaScript corriendo en el navegador del usuario. De esta forma es posible obtener el estado de las clavijas de datos del puerto paralelo en la pantalla pr�cticamente a tiempo real y de forma bonita y flexible y f�cil de controlar.

Por el lado del servidor encontramos un software de portcontrol constituido por unas pocas l�neas de PHP. Portcontrol es un programa simple de control de puertos de entrada/salida para Linux de uso general. Este programa permite escribir y leer los puertos de entrada/salida suportados. Este programa permite escribir el valor especificado al puerto, leer un valor a una direcci�n entrada/salida dada e imprimirlo a la pantalla en diferentes formatos y la manipulaci�n de los datos del puerto a nivel de bit.

Port control web interface

El archivo control.php es el que se encarga de la magia del control del puerto. Una vez cargado, el usuario obtiene una p�gina Web y c�digo JavaScript user end. Este c�digo JavaScript pregunta peri�dicamente (una vez cada 5 segundos) el estado del puerto paralelo al servidor (llamada AJAX) y si �ste ha cambiado actualiza la pantalla. Tambi�n gestiona los botones de control. Cada clic sobre un bot�n de control hace que el software de control llame al servidor para llevar a cabo la funci�n deseada (llamada AJAX). Cuando el control se ha llevado a cabo, el servidor devuelve el estado actual del puerto (es impreso en la pantalla). Cuando el software de control est� escrito de esta forma, funciona bastante bien y se siente pr�cticamente como si fuera una aplicaci�n que est� controlando los puertos paralelos directamente (a diferencia de la t�pica aplicaci�n Web que requiere recargar la p�gina cada vez que hace algo).

A parte del propio script de control PHP, tambi�n he escrito otra versi�n del archivo control.php. Este archivo controlfile.php funciona pr�cticamente de la misma forma, pero en vez de controlar el puerto paralelo, escribe y lee el estado de un archivo (status.txt en el mismo directorio que se encuentra el script). Puede usarlo para testear f�cilmente el sistema de control basado en AJAX/PHP desde cualquier parte (no requiere que el ordenador tenga un puerto paralelo real). La aplicaci�n AJAX de testeo de control de puertos basada en un archivo se puede descargar de aqu�.

El software de control de puertos con interfaz Web se encuentra disponible como paquete portcontrol.tar que incluye c�digo fuente, instrucciones de compilaci�n/instalaci�n e instrucciones de uso. Para m�s detalles eche un vistazo al README.

Para usar el software tambi�n necesita descargar SAJAX Simple Ajax Toolkit by ModernMethod de http://www.epanorama.net/counter.php?url=http://www.modernmethod.com/sajax/.

Control Web usando PHP y AJAX en sistemas Windows

A causa de varias peticiones he portado a Windows mi sistema Web de control de puertos usando PHP y AJAX. La versi�n Windows se basa en los siguiente componentes:

To use the package you need to do the following:

Primero tiene que descargar la versi�n 3.2 de PortableWebAp de http://www.epanorama.net/counter.php?url=http://portablewebap.com/. Se trata de un paquete software gratuito, aunque requiere que se registre para poder descargarlo. PortableWebAp es una plataforma portable para aplicaciones Web. Con ella se pueden correr aplicaciones Web desde un CDROM, DVD, l�piz USB y desde cualquier directorio de cualquier disco duro. No requiere instalaci�n. Escog� este paquete por la simplicidad de la instalaci�n: simplemente descomprima el archivo .zip en el directorio desde el que quiere ejecutarlo. No requiere de instalaci�n ni configuraci�n. El tama�o es de unos 5Mb. El servidor Web para Windows m�s f�cil de configurar que jam�s he visto! Puede instalarlo, por ejemplo, en el directorio C:\PortableWebAp3.2

A continuaci�n, necesita descargar el inpout32 driver de http://www.epanorama.net/counter.php?url=http://www.logix4u.net/inpout32.htm. Descargue el archivo .zip que contiene el driver. Descompr�malo a un directorio v�lido. Copie inpout32.dll a un directorio del sistema donde el sistema pueda encontrarlo. En mi sistema Windows 2000 este directorio es C:\WINNT\system32 directory (este directorio puede ser diferente si usa una versi�n diferente de Windows).

El tercer componente que necesita es mi paquete con mi script PHP y el prontcontrol.exe. Descargue el paquete WinPortControlAjax.zipAQU�. �nicamente descargue el archivo .zip. Cree un directorio llamado portcontrol dentro del directorio C:\PortableWebAp3.2\Program\www\localhost. Ahora descomprima el paquete en este directorio C:\PortableWebAp3.2\Program\www\localhost\portcontrol

Ahora ya tiene todas las partes necesarias para establecer el sistema. La parte siguiente es el testeo:

Inicie PortableWebAp ejecutando el archivo portablewebap.exe en el directorio C:\PortableWebAp3.2. Esto iniciar� el servidor Web y tambi�n su navegador. Si su ordenador tiene un cortafuegos, �ste puede preguntarle si quiere que este programa pueda ejecutarse como servicio/servidor en su ordenador (permita esto). El navegador al iniciarse se dirige a la URL http://www.epanorama.net/counter.php?url=http://localhost:800/ . Escriba la direcci�n http://www.epanorama.net/counter.php?url=http://localhost:800/portcontrol/control.php en su navegador para acceder a la aplicaci�n de control de puertos. Ahora deber�a tener en la pantalla una aplicaci�n parecida a la que hemos visto antes en Linux.

Web based port control on Windows

Esto tambi�n funciona en Windows. Hay una desventaja en la forma que se implementa este sistema Windows. Puede ser que vea un flash intermitente en la pantalla del ordenador que corre el servidor. Esto es causado porque portcontrol.exe se inicia cada pocos segundos (iniciado por control.php cuando el navegador AJAX le pide una actualizaci�n del estado). Cada vez que se inicia portcontrol.exe, su consola Windows aparece (ve la consola Windows porque portcontrol.exe es una aplicaci�n de consola Windows) y se cierra una fracci�n de segundo m�s tarde.

Ideas de modificaciones para la interfaz Web

Se me ha preguntado muchas veces c�mo preguntar otras clavijas en el puerto paralelo que no sean las clavijas de datos. Aqu� hay algunas instrucciones que explican c�mo modificar el c�digo fuente de la interfaz Web para hacer precisamente esto.

El programa portcontrol que se encarga del control de puertos en nuestra interfaz ya suporta el control de muchas otras cosas aparte de las clavijas de datos del puerto paralelo. El ejemplo de c�digo en PHP control.php no suporta estas opciones. Si quiere usar estas opciones, tendr� que modificar el c�digo fuente de control.php y cambiar la definici�n del puerto en �ste. Si quiere controlar tanto clavijas de datos como otras clavijas, seguramente sea una buena idea hacer una copia de control.php con otro nombre y hacer las modificaciones en �l.

Para hacer modificaciones abra el c�digo php de control de puertos y modifique las l�neas siguientes:

En sistemas Windows:

return " Time: " . date("M dS, Y, H:i:s  ") . "Estado: " . shell_exec("portcontrol.exe LPT1DATA read print bin");
shell_exec("portcontrol.exe LPT1DATA read setbit " . $x . " write");
shell_exec("portcontrol.exe LPT1DATA read resetbit " . $x . " write");
En sistemas Linux:
return " Time: " . date("M dS, Y, H:i:s  ") . "Estado: " . shell_exec("/usr/local/sbin/portcontrol LPT1DATA read print bin");
shell_exec("/usr/local/sbin/portcontrol LPT1DATA read setbit " . $x . " write");
shell_exec("/usr/local/sbin/portcontrol LPT1DATA read resetbit " . $x . " write");

Cambiando LPT1DATA por uno de los identificadores de puertos suportados, el control se llevar� a cabo en �se puerto:

 *  Identificadores de puerto suportados
 *  LPT1DATA
 *  LPT1STATUS
 *  LPT1HANDSHAKE
 *  JOYSTICK
 *  NONE
Para controlar clavijas de puerto paralelo los puertos a usar son LPT1STATUS y LPT1HANDSHAKE.

Controlando algunos sistemas electr�nicos reales

La idea de la interfaz mostrada m�s arriba se puede expander para controlar algunos dispositivos electr�nicos externos simplemente a�adiendo un circuito b�fer al puerto paralelo. La programaci�n se llevar�a a cabo de la misma forma que hemos visto en mis ejemplos.

Construyendo sus propios circuitos de control de rel�

El circuito siguiente es la interfaz m�s simple que puede usar para controlar rel� desde el puerto paralelo:

                               Vcc
                                |
                                +------+
                                |    __|__
                             Espiral  /^\  D�odo 1N4002
                             de rel� /---\
                                |      |
                                +------+
                                |
                             | / 
                   4.7K    B |/  C
Clavija de control >-\/\/\/--|    Transistor NPN: BC547A o 2N2222A
de datos del puerto paralelo |\  E
                             | V
                               |
Clavija tierra  >--------------+
del puerto paralelo            |
                            Suelo
El circuito puede ocuparse de rel�s que tomen corrientes de hasta 100mA y operen a 24V o menos. El circuito necesita una fuente de energ�a externa que tenga la salida de voltaje adecuada para el control del rel� (5..24V en funci�n del rel�). El transistor se encarga del cambio de corriente y el d�odo previene que picos de la espiral de rel� da�en a su ordenador (si no pone el d�odo, el transistor y su ordenador se pueden da�ar).

Como los espirales (solenoides y espirales de rel�) tienen una cantidad de inductancia muy grande, cuando se liberan (cuando se corta la corriente) generan un poco de voltaje muy grande. La mayor�a de los dise�os tienen un d�odo o un circuito de palanca para impedir que esta subida de voltaje golpee al resto del circuito. Si el d�odo es malo, el voltaje puede, con el tiempo, destruir su transistor de �entierro� o hasta su tarjeta de entrada/salida. El modo de fallo del transistor puede ser un cortocircuito y consecuentemente, tendr�a el solenoide acortado a tierra indefinidamente.

El circuito tambi�n se puede usar para controlar otras cargas peque�as como LEDs potentes, l�mparas y peque�os motores DC. Recuerde que los dispositivos que planee controlar directamente con el transistor deben tomar menos de 100mA de corriente.

ADVERTENCIA: Compruebe y vuelva a comprobar el circuito antes de conectarlo a su PC. Usar componentes estropeados o inadecuados puede provocar que su puerto paralelo se estropee. Errores en la construcci�n del circuito pueden resultar en la p�rdida del puerto paralelo y obligarle a comprar una tarjeta multi-IO nueva. El d�odo 1N4002 en paralelo con el rel� es un componente esencial de protecci�n y nunca deber�a ser dejado fuera del circuito o su puerto paralelo se puede ver da�ado a causa del gran pico de voltaje que provoca la alta inductancia del rel� (el d�odo se encarga de evitar este pico).

Nuevo dise�o m�s seguro

El ejemplo de circuito detallado m�s arriba es correcto y funciona bien. Si por alguna raz�n B y C tienen que ser juntados y est� pidiendo m�s de +5V por el lado del rel�, el circuito puede enviar un voltaje as� de alto y con ello da�ar el puerto paralelo. El circuito siguiente usa dos d�odos 1N4148 para proteger el puerto paralelo de se�ales m�s altas de +5V y tambi�n contra la polarizaci�n equivocada de las se�ales (la electricidad en el circuito est� por error en la polaridad incorrecta).


                               Vcc
                                |
                                +------+
                                |    __|__
                            Espiral   /^\  D�odo 1N4002
                            de rel�  /---\
                                |      |
                                +------+
                                |
            D�odo            | /
            1N4148  4.7K   B |/  C
Clavija de  >-|>|-+--\/\/\/--|      Transistor NPN: BC547A o 2N2222A
datos de puerto   |          |\  E
paralelo          +-|<|-+      | V
              1N4148    |      |
Tierra de   >-----------+------+
puerto paralelo                |
                            Tierra

Idea para a�adir a�n m�s seguridad: Sustituya el d�odo 1N4148 conectado a tierra con un d�odo zener de 5.1V. Este d�odo proteger� de picos de sobrevoltaje y de voltaje negativo al mismo tiempo.

Ejemplo de circuito mal dise�ado

No s� POR QU� veo principiantes que a�n no PIENSAN muy bien la electr�nica, pero a�n as� insisten en poner el rel� �DESPU�S� del transistor, como si eso fuera algo importante. Pues NO lo es, de hecho, es una MALA PR�CTICA si quiere que el puerto paralelo funcione bien! Este tipo de circuitos mal dise�ados se publican a menudo en los grupos de noticias de electr�nica de usenet. EL circuito siguiente es un ejemplo de este tipo de circuitos mal dise�ados (no pruebe a construirlo):

                               Vcc
                                |
                             | /
                   4.7K    B |/  C
Puerto paralelo---\/\/\/\/---|       Transistor NPN: BC547A o 2N2222A
                             |\  E
                             | V
                             |
                               +------+
                               |    __|__
                           Espiral   /^\  Diode 1N4002
                           de rel�  /---\
                               |      |
                               +------+
                               |
                             Tierra


NOTA: �ste es un mal dise�o. No pruebe a construirlo.
El problema de este circuito es que el voltaje que va por el rel� siempre se encuentra limitado a 4.5V, aunque use una fuente Vcc mayor. El circuito act�a como un seguidor de emisor, lo que causa que el voltaje en el emisor siempre se encuentre en el valor base de voltaje � base al emisor de voltaje (0.6..0.7V). Esto significa que con el m�ximo de 5.1V de voltaje controlado, obtendr� un m�ximo de 4.5V sin importar cual sea el voltaje aportado (cuando sea mayor de 5V y por debajo, el transistor rompe el voltaje).

Otro problema es que en algunos casos este circuito puede empezar a oscilar si la resistencia base se encuentra justo en el extremo.

Circuito b�sico con aislamiento �ptico

Uno de los ejemplos m�s simples de circuito de salida aislado �pticamente es el siguiente circuito basado en 4N33:

4N33 based parallel port optoisolator

El dispositivo de par �ptico 4N33 tiene un transistor de salida Darlington que es capaz de conducir hasta 30mA de forma segura. El voltaje m�ximo en el lado de salida es de 30V. Uno conecta el lado de entrada + a la clavija de salida del puerto paralelo que quiere usar para el control. A continuaci�n, conecta el lado de entrada � a la clavija tierra del puerto paralelo. El lado de salida se conecta al circuito para ser controlado con la polaridad correcta. En este circuito de ejemplo us� una resistencia de 1Kohm para limitar el control de corriente (el circuito tambi�n deber�a funcionar bien con una resistencia de 470Ohm). Como la corriente que se sirve al par �ptico es muy baja (s�lo unos mA), la corriente de salida del par �ptico disponible garantida es baja. Puede esperar obtener algo parecido a una capacidad de conducci�n de 10mA en la salida (puede que m�s si tiene la suerte de tener un acoplador con alto CTR y un puerto paralelo con una alta corriente de salida). El circuito tambi�n se puede construir usando un par �ptico 4N32 que es muy similar al 4N33.

Datos del componente 4N33:

Los datos del componente se han sacado de la tabla de datos obtenible en http://www.epanorama.net/counter.php?url=http://www.vishay.com/docs/83736/83736.pdf. Estos acopladores �pticos se pueden usar para sustituir rel�s de ca�a o de mercurio con las consiguientes ventajas de larga vida, intercambio de alta velocidad y eliminaci�n de los campos magn�ticos.

Circuito de acoplador �ptico amplificado con transistor

Si quiere tener una muy buena protecci�n de su puerto paralelo y m�s capacidad de conducci�n puede considerar el aislamiento �ptico usando un circuito de este tipo:

                                                V+  (12V)
                                                 |
                                    +------------+
                                    |            +------+
Puerto                              |            |      |
Paralelo                            |    D1     ---     |
                                    |   1N4001  / \    Espiral de rel�
          R1    1  ----------- 5    |          /---\    |
 D(x) ----1k------| Opto-     |-----+            |      |
                  | aislante  |                  +------+
 GND -------------|           |-+                |
                2  ----------- 4|                |
                   CNY 17 o    |   R2        | /
                   4N25         |   4.7K    B |/  C   T1
                                +--\/\/\/\/---|      BC547A o 2N2222A
                                              |\  E
                                              | V
                                                |
                                          Tierra del circuito externo

Asignaci�n de clavijas t�pica en un opto-aislante (CNY 17 y 4N25):

       -----------------------------
 1--|----          |------------|--6
    |   |          |            |
    | \---/ \      |    ------  |
    |  \ /  \     | | / C   |  |
    |  --- \  \|   | |/     |  |
    |   |   \ --   --|       ---|--5
    |   |    \|    B |\         |
 2--|----    --      | V E      |
    |                   --------|--4
 3--|--NC                       |
    -----------------------------

El opto-aislante est� all� para proteger el puerto. N�tese que no hay conexiones entre las partes el�ctricas del puerto. El circuito est� abastecido por una fuente de energ�a externa que no est� conectada al PC si no hay necesidad de que sea as�. Esta disposici�n previene que alguna corriente en los circuitos externos pueda da�ar el puerto paralelo

La entrada del opto-aislante es un d�odo emisor de luz. R1 se usar para limitar la corriente cuando la salida del puerto est� activada. La resistencia de 1Kohm limita la corriente a alrededor de 3mA, lo que es m�s que suficiente para la conducci�n del transistor de salida.

El lado de salida del opto-aislante es como un transistor, con el colector arriba de todo del circuito y el emisor abajo. Cuando se activa la salida (con la luz de entrada del LED interno del opto-aislante), la corriente fluye a trav�s de la resistencia dentro del transistor, encendi�ndolo. Esto permite que la corriente fluya dentro del rel�. La corriente de salida del opto-aislante con la entrada de corriente explicada arriba deber�a ser dentro del rango de 1-3mA. (depende del tipo exacto de opto-aislante y de la variaci�n de componentes). Esta corriente pasa a trav�s de R2 en direcci�n a la base transistor.

Apagando la entrada en el puerto paralelo provoca que la salida del opto-aislante se apague, de forma que ni pasa ninguna corriente a trav�s de �ste y hacia el transistor, de forma que �ste �ltimo tambi�n se apaga. Cuando el transistor est� apagado, no pasa corriente por el rel� y est� tambi�n se apaga. El d�odo nos ofrece una salida para la energ�a guardada en el espiral, previniendo as�, que este devuelva parte de la corriente al circuito de forma indeseada.

El transistor en el circuito se puede usar para controlar las cargas de salida hasta un m�ximo de alrededor de 100mA (depende un poco de los componentes y del voltaje de la operaci�n usada). La fuente de energ�a externa puede estar dentro del rango de 5V a 24V. Cuando use un rel� que toma menos de estos 100mA de corriente y funcione con la fuente de energ�a que use, todo deber�a ir bien. La carga de salida que usted puede controlar con el circuito con un rel� �nicamente depende de los ratings de contacto de los rel�s de salida (m�ximo corriente y m�ximo voltaje).

Este circuito tambi�n se puede usar directamente para controlar peque�as cargas (menos de 100mA de corriente). Simplemente coloque la carga que quiera controlar en el sitio del rel�.

Datos de componente de algunos de los componentes usados:

Circuito de control aislado �pticamente de alta energ�a

Aqu� hay una versi�n de alta energ�a del circuito descrito m�s arriba:

                                                V+  (12V)
                                                 |
                                    +------------+-----+------+
                                    |                  |      |
Puerto                              |                  |      |
paralelo                            |          D1     ---     |
                                    |         1N4001  / \ Espiral de rel�
          R1     1 ----------- 5    |                /---\    |
 D(x) ----1k------| Opto-     |-----+                  |      |
                  | aislante  |                  +-----+------+
 GND -------------|           |-+                |            |
                 2 ----------- 4|                |            |
                   CNY 17 o    |   R2        | /             |
                   4N25         |   4.7K    B |/  C T1        |
                                +--\/\/\/\/---|     BC547A    |
                                |             |\  E           |
                                |             | V          | /
                                /               |        B |/C  T2
                                \  R3           +----------|    power
                                / 10 kohm                  |\E  transistor
                                \                          | v
                                |                            |
                                +----------------------------+
                                                             |
                                                Tierra del circuito externo
En este circuito Q1 se usa para controla la base de corriente de Q1, quien controla la corriente en s� misma. Puede selecci�n pr�cticamente cualquier transistor para este circuito mientras cumpla sus necesidades de corriente y voltaje. Algunas alternativas a modo de ejemplo son TIP41C (6A 100V) o 2N3055 (100V 15A). En funci�n de su factor heredado de amplificaci�n al transistor Q1, puede que no sea posible usar toda la capacidad de corriente de su dispositivo de salida T2 antes que haya demasiadas perdidas (calor) en este transistor.

Este circuito es b�sicamente una modificaci�n muy simple del circuito aislante �ptico original con un transistor. La diferencia en este circuito es que en este caso T2 controla la carga de corriente y Q1 act�a como un amplificador para el control de corriente base de T2. Los aislantes �pticos R1, R2, Q1, D1 funcionan exactamente de la misma forma que en el circuito de un transistor descrito anteriormente en este documento. R3 act�a como una resistencia extra que garantiza que T2 no conduce cuando no se le da se�al al aislante �ptico (impide que T1 y T2 conduzcan a causa de un peque�o escape de corriente de la salida del aislante �ptico).

Control de la red de suministro de energ�a con puertos paralelos

Es posible controla el voltaje de la red de suministro a trav�s del puerto paralelo con un circuito adecuado. Cuando se controla el voltaje de la red de suministro hay que proceder con mucha atenci�n y saber qu� se est� haciendo para hacerlo todo de forma segura. El voltaje de la red de suministro puede matar si se toca directamente y un mal control de la red de suministro puede acabar quemando su casa.

La primera idea para controlar le red de suministro de energ�a es usar uno de los circuitos de m�s arriba para control un rel� que despu�s controla la red de suministro de energ�a. Esto funciona con muchas aplicaciones siempre que el rel� est� rateado para aplicaciones de intercambio de la red de suministro de energ�a y para el actual rateo de sus aplicaciones. Un circuito correctamente dise�ado deber�a tener adem�s del rel� (m�s un circuito de interfaz de puerto paralelo) un fusible de tama�o adecuado que cortar� la electricidad a trav�s del rel� si se produce un cortocircuito o una sobrecarga en el equipamiento controlado. El fusible aqu� se usar para proteger el rel� frente a una sobrecarga. El rel� funcionar� bien en aplicaciones que requieran que el dispositivo se apague y se enciende pocas veces. Si va a encender y apagar el dispositivo a menudo, un rel� normal se estropear� r�pidamente y adem�s, en algunas aplicaciones transmitir� ruido causado por los picos que producen los contactos del rel� al abrirse y cerrarse. Estos picos pueden provocar ruido de radiofrecuencia.

Otro componente v�lido para el control el voltaje de la red de suministro es un rel� de estado s�lido. El circuito de m�s abajo muestra c�mo controlar un rel� de estado s�lido a trav�s del puerto paralelo de un PC. El rel� de estado s�lido controla el voltaje de la red de suministro.

Mains power controlling with solid state relay

El rel� para esta aplicaci�n deber�a de ser rateado para el voltaje de la red de suministro que est� usando y para la corriente de su equipamiento (marcado con una L en la imagen). El rel� de estado s�lido dise�ado para el control de redes de suministro nos provee con el aislamiento requerido entre la entrada de control y el lado de la red de suministro. El rel� de estado s�lido deber�a ser usado de acuerdo con las notas de aplicaci�n del fabricante y con los c�digos locales de su equipamiento. Es importante que mantenga asilados en todo momento los lados de la red de suministro y de bajo voltaje (hasta en caso de da�o del equipamiento). Tambi�n deber�a poner un fusible del tama�o adecuado en serie con el rel� de estado s�lido para proteger el rel� frente a una sobrecarga. Un fusible del tama�o adecuado no proteger� el rel� frente a un sobrecalentamiento si la carga intenta tomar demasiada corriente a trav�s del rel�. Este fusible puede que no sea capaz de proteger su rel� frente a da�os por cortocircuito (si cortocircuita la carga normalmente pierde ambos el rel� de estado s�lido y el fusible).

Muchos rel�s de estado s�lido pueden ser controlados directamente por un puerto paralelo sin necesidad de componentes extra. Tiene que seleccionar un rel� de estado s�lido que sea controlado por voltaje y que el rango de voltaje pueda tomar el voltaje de las salidas del puerto de impresora (5V o un poco menos). Para una operaci�n segura deber�a seleccionar un rel� que pueda operar a menos de 3V de voltaje de entrada y que no tome mucho control de corriente (un SSR que tome pocos miliamperes es mejor porque la capacidad de salida de corriente de los puertos paralelos se encuentra normalmente limitada a estos valores). Para garantizar que la operaci�n es fiable con la conexi�n directa, aseg�rese de medir que el voltaje de control entrando al SSR se encuentra dentro del rango de operaci�n especificado cuando el rel� se encuentra controlado por un puerto paralelo (puede mesurarlo sin conectar la red de suministro al resto del circuito, es m�s seguro de esta forma). Controlar un rel� de estado s�lido con voltaje de control m�s bajo puede llevar a una operaci�n poco fiable del rel� de estado s�lido y puede hasta causar que el rel� de estado s�lido falle cuando est� altamente cargado!

Tambi�n se puede construir la parte de control de voltaje de la red de suministro a partir de componentes discretos. Aqu� tiene dos ejemplos de circuitos:

110V AC controlling

220V AC controlling

Estas figuras s�lo deben servir a modo de ejemplo. No recomiendo que construyan estos circuitos. Hoy en d�a, los rel�s de estado s�lido se encuentran disponibles a precios muy razonables y con ellos es m�s f�cil construir circuitos de control seguros.

Una cosa muy importante a destacar de los circuitos de control de red de suministro es que deber�an ser construidos con mucho cuidado y de forma correcta. El voltaje de la red de suministro puede matar si entra en contacto con �l. Un circuito mal construido se puede sobrecalentar y provocar un incendio. Cualquier circuito de control de red de suministro deber�a ser construido de forma que disponga de protecci�n frente a subidas de corriente y frente a sobrecargas del circuito (normalmente hay suficiente con un fusible en la entrada). Este circuito tiene que ser construido en una caja segura y mec�nicamente estable. Una caja de aislamiento de pl�stico (cajas electr�nicas hechas de pl�stico que no se incendian f�cilmente) es una opci�n. Otra opci�n es construir el circuito en una caja met�lica con toma de tierra. La forma exacta de construir circuitos de control de redes de suministro de energ�a se escapa al �mbito de este art�culo. Deber�a conocer todos los detalles antes de intentar construir un circuito de este tipo que se conecte a la red de suministro de energ�a.

Driver compacto de 8 canales de salida

Puede construir un circuito con muchas salidas combinando muchos circuitos basados en un transistor individual. Si quiere tener una construcci�n compacta de hasta 8 salidas le recomiendo que use el IC ULN2803 fabricado por Allegro y varios otros fabricantes. Aqu� les pongo la distribuci�n de clavijas de este IC ULN2803:

ULN2803 pinout

El ULN2803 es un driver Darlington NPN de 8-bit 50V 500mA y entrada TTL. Destacando por ratings de carga de corriente continua 500 mA para cada uno de los drivers, el ULN2803A array de alta corriente Darlington es especialmente adecuado para la interconexi�n entre circuitos de bajo nivel l�gico y m�ltiples cargas perif�ricas de electricidad. Las cargas normales incluyen rel�s, solenoides, motores de pasos, martillos de impresi�n magn�tica, LEDs multiplexados y displays incandescentes y calentadores. Los drivers no requieren de una fuente de energ�a; la clavija VDD �com�n� es el c�todo com�n de los ocho d�odos de protecci�n integrados. La tabla de datos para este IC se puede encontrar en http://www.epanorama.net/counter.php?url=http://www.allegromicro.com/sf/2801/ y http://www.epanorama.net/counter.php?url=http://impressolibre.sourceforge.net/miniplotter/ULN2803-D.PDF

El ULN2803 est� conectado entre cada una de las ocho l�neas del puerto de la impresora y el dispositivo que controla. El dispositivo de salida puede ser tan simple como un LED, un peque�o motor o un rel�. Las entradas en el lado izquierdo del IC est�n preparadas para ser conectadas directamente a las l�neas de salida del puerto paralelo de un PC. Las salidas son salidas de colector abierto (la salida es llevada a tierra a trav�s de un transistor cuando la l�nea correspondiente pasa a estado alto), as� que son perfectamente v�lidos para controlar varias cargas abastecidas por una fuente de energ�a externa. El voltaje controlable m�ximo es 50V y la corriente m�xima por canal es de 500mA. Las salidas pueden ser puestas en paralelo para conseguir una mayor capacidad de carga de corriente. Los lados de entrada y salida del IC tienen la misma tierra y deben ser conectadas tambi�n a la clavija de tierra del IC ULN2803.

La l�nea �com�n� es conectada a un circuito de protecci�n de sobrevoltaje adecuado para prevenir cualquier da�o al IC a causa de �back emf� cuando cargas como motores o rel�s se enciendan o apaguen. Tambi�n puede usar por ejemplo un zener de 30V conectado al componente de protecci�n de la l�nea (limita el abastecimiento de electricidad al rel� a un m�ximo de menos de 30V). O puede conectar un zener de 12V al abastecimiento de electricidad al rel� (limita picos de voltaje del abastecimiento de electricidad a 12V, no usar una fuente de energ�a de m�s de 30V).

Aqu� hay un ejemplo de un circuito de control que conduce hecho LEDs usando el IC ULN2803:

Driving LEDs with ULN2803

Este circuito tambi�n se puede usar para conducir otros tipos de cargas, por ejemplo, rel�s, peque�as bombillas, etc. S�lo tiene que sustituir los LEDs junto con la combinaci�n de resistencias por la carga que quiera (siempre que la carga se encuentre dentro de las posibilidades de capacidad de salida del drive ULN2803). Para este circuito puede usar por ejemplo un d�odo zener de 15V.

Se pueden encontrar otros ejemplos de circuitos implementados con ULN2803 en http://www.epanorama.net/counter.php?url=http://www.southwest.com.au/~jfuller/electronics/integrated.htm y http://www.epanorama.net/counter.php?url=http://www.southwest.com.au/~jfuller/sio5works.htm.

Enlaces a circuitos de salida de puertos paralelos

Enlaces a diagramas de circuitos

Kits / m�dulos de productos probablemente �tiles

Los kits electr�nicos siguientes se consideran �tiles para los lectores que no quieran construir sus sistemas electr�nicos de interfaz desde cero. Estos m�dulos / kits deber�an ser todos controlables de la misma forma que mis ejemplos de m�s arriba. He testeado personalmente el Kemo M125. La informaci�n de los productos est� basada en mirar a los diagramas de circuitos y/o operaci�n de su software de control.

Software de control listo para usar

Aqu� hay una colecci�n de enlaces a software de control de puertos paralelos listo para usar. Hay una gran variedad de software disponible para diferentes sistemas operativos y diferentes usos. Escoja el que sea m�s adecuado a su situaci�n.

Usando salidas de control

Adem�s de las clavijas de datos, el puerto paralelo tiene 4 clavijas de salida m�s. �stas son las clavijas de apret�n de manos STROBE (clavija 1), AF (clavija 14), RESET (clavija 16) y SELECT (clavija 17). Estas salidas dan se�ales de nivel TTL, pero el�ctricamente est�n construidas de forma diferente y controladas por un registro de control diferente.

Las salidas de control normalmente est�n construidas como salida de colector abierto con resistencia interna pull-up.

        +5
         |
       4.7 kohm
         |     
         |________  Salida TTL
         |   fuera  
        /         
    ---L apagada      
        \
         |
        Tierra

Este tipo de salidas no puede servir casi nada (aproximadamente 1mA, +5 a trav�s de las resistencias de 4.7K), y s�lo pueden enterrar unos 7mA. Este tipo de salida puede controlar entradas TTL perfectamente y posiblemente pueda correr un acoplador �ptico o un rel� de estado s�lido en modo enterrar (depende del dispositivo).

La programaci�n de los registros de control de puerto paralelo se hace escribiendo los valores adecuados al registro de control del enlace de apret�n de manos (direcci�n entrada/salida del puerto paralelo m�s dos). Puede encontrar m�s detalles sobre esto en el resumen del registro de puertos paralelos al final de este documento.

Nota: En algunos PCs puede haber implementaciones ligeramente diferentes. Por ejemplo, hace unos a�os era muy popular el chip UM82C11-C como salidas de control est�ndar TTL con menor (1.5mA) capacidad de corriente que los tradicionales circuitos de colector abierto con resistencias pull-up.

Leyendo las clavijas de entrada en clavijas de entrada del puerto paralelo

El puerto paralelo de un PC tiene 5 clavijas de entrada. Estas entradas pueden aceptar se�ales de nivel TTL (0-0.7V = l�gica 0, 2.4-5V = l�gica 1). Puede conectarles directamente una se�al de salida de nivel TTL (recuerde que hay que conectar la toma de tierra de la fuente de la se�al a la toma de tierra del puerto paralelo). Puede conectar varios interruptores simples a las entradas conectando el interruptor entre la toma de tierra del puerto paralelo y la clavija de entrada y despu�s a�adiendo una resistencia pull-up de 10Kohm de la clavija a +5V. Cuando el interruptor es activado, la clavija pasa a estado l�gico 0. Normalmente es una buena idea aislar el PC de la fuente de se�al y, en este caso, tambi�n puede valer la pena usar un rel� o un acoplador �ptico (el rel�/acoplador �ptico es conectado en el sitio del interruptor, de otra forma, funciona igual que un interruptor).

CONSEJO: Puede evitar el uso de una fuente de energ�a externa usando una de las clavijas de salida del puerto paralelo como una. As� que establezca una de las clavijas de salida del puerto paralelo a estado l�gico 1 y con�ctela a una resistencia pull-up de 10Kohm en vez de a una fuente dedicada de +5V extra. Para otras ideas sobre c�mo obtener los +5V de energ�a requeridos, eche un vistazo a C�mo dirigir energ�a del ordenador a sus circuitos y Fuente de energ�a de 5V simple para circuitos digitales.

Las clavijas de entrada pueden leerse de la direcci�n base de entrada/salida del puerto LPT + 1.

Las clavijas de entrada pueden leerse de la direcci�n base de entrada/salida del puerto LPT + 1.

Aqu� tienen unas l�neas de c�digo para leer del puerto LPT:

Ensamblador

MOV DX,0379H
IN AL,DX
Obtiene el resultado del registro AL

BASIC

N = INP(&H379);
Donde N es el valor num�rico que lee

C

in = inportb(0x379);
or
in = inp(0x379);
Donde N son los datos que quiere sacar. El comando de control del puerto de entrada/salida varia de un compilador a otro, puesto que no forma parte de las librer�as de C estandarizadas.

Aqu� les pongo un ejemplo de un programa de lectura para Linux que lee el estados de las clavijas de entrada del puerto paralelo:


#include 
#include 
#include 
#include 

#define base 0x379           /* direcci�n entrada/salida a leer */

main(int argc, char **argv)
{
  int value;

  if (ioperm(base,1,1))
    fprintf(stderr, "No se puedo acceder al puerto en %x\n", base), exit(1);

  value = inb(base);
  printf("El valor de lectura del puerto 0x%x es %i \n",base,value);
}

 
/* compilar con la l�nea de comandos
  gcc -O lpt_read.c -o lpt_read */

El usuario debe tener los privilegios de acceso a los puertos necesarios para que el programa se ejecute, de forma que tiene que ser �root� para poder ejecutar un programa de este tipo y no tener problemas de accesos. Si quiere hacer un programa que se pueda ejecutar por cualquiera, entonces primero tendr� que establecer la propiedad del archivo al �root� (por ejemplo, compil�ndolo como �root�) y dar permisos a todos los usuarios para ejecutarlo y establecer el programa de forma que siempre se ejecute siempre con los derechos del propietario en vez de los del que lo ejecuta. Puede establecer que el programa se ejecute con los derechos del propietario con el siguiente comando:
chmod +s lpt_read

Circuitos de entrada

Hay varias formas de detectar interruptores externos a trav�s del puerto paralelo de una impresora. Las clavijas de entrada del puerto paralelo toman se�ale de entrada de nivel TTL (0V a 5V). Puede conectar interruptores a esta entrada con el circuito siguiente.

                      4.7K
         Entrada -------+-^^^^^--- (+5 v)     
                        |
                   interruptor
		         |
         Tierra --------+---------- (gnd)

Este circuito utiliza resistencias (4.7K) de las entradas de estado a +5V y usa interruptores para llevarlas al suelo. Si quiere usar las cinco entradas, construya cinco circuitos para cada clavija. Una desventaja de esto es que usa una fuente de energ�a externa de +5V. Si tiene clavijas de salida de datos libres puede usarlas como fuente de +5V para este circuito (una salida de datos es suficiente para abastecer varios circuitos de este tipo).

Las entradas TTL al puerto paralelo tienden a flotar alto, as� que puede ser que no necesite las resistencias, pero es arriesgarse (el sistema puede no funcionar de forma fiable).

        Entrada  ------+
                       |
                  Interruptor
	               |
        Tierra   ------+

Circuito de ejemplo para un circuito de entrada de 5 canales por puerto paralelo con interruptores. Este circuito usa resistencias pull-up de 3Kohm y resistencias 330 extra �de seguridad� entre el puerto paralelo y el resto del circuito.

Five switches to parallel port circuit

Puede modificar estas ideas de circuitos para otras aplicaciones. Por ejemplo, puede sustituir el interruptor en el circuito por rel� de contacto de salida o por un lado de salida de acoplador �ptico. De esta forma, puede obtener los se�ales de forma clara en su PC y mantener el PC aislado de su circuito de control.

Los circuitos siguientes se pueden usar para aislar componentes externos al conectar con el puerto paralelo. Conecte el lado de salida del acoplador �ptico (en el lado derecho) al circuito de entrada del puerto paralelo al sitio del interruptor del circuito de m�s arriba. Si desea el control de ambos el interruptor y la se�al externa, conecte la salida del acoplador �ptico al interruptor en paralelo. Por favor, aseg�rese de colocar el acoplador �ptico fuera � conecte el lado que hay que conectar a tierra a la toma de tierra (si lo coloca al rev�s el acoplador �ptico no funcionar�).

4N33 optoisolator

                                    fuera +  
                R1    1  ----------- 5    |    
 Dentro+  ----1k------| Opto-     |-----+    
                      | aislante  |          
 Dentro- -------------|           |-+        
                      2  ----------- 4|        
                   CNY 17 o     | 
                   4N25         | 
                               fuera -
                              (conectar a tierra)

El voltaje de entrada que puede servir a la entrada del acoplador �ptico puede ir de unos pocos volts hasta 30 volts. El voltaje m�nimo al que el circuito empieza a activar la se�al del puerto de la impresora varia en funci�n del acoplador �ptico (generalmente, a partir de unos pocos volts, lo que es seguro es que una entrada de menos de 1V no funcionar�). Tenga cuidado de servir la se�al de entrada a la entrada del acoplador �ptico a la polaridad adecuada (una polaridad de la se�al err�nea puede estropear el acoplador �ptico).

Enlaces de ejemplo de circuitos de entrada de puerto paralelo

Software de lectura listo para usar

La p�gina de monitorizaci�n de puertos paralelos en http://www.epanorama.net/counter.php?url=http://neil.fraser.name/software/lpt/ tiene programas que le permite establecer y monitorizar los estados de las clavijas del puerto paralelo. Este software se encuentra disponible en diferentes versiones para sistemas Windows 98 / ME / NT / 2000 / XP y DOS / Windows 3.1 / 95 / 98 / ME. El software est� escrito en los lenguajes de programaci�n Visual Basic y Euphoria y est� disponible en forma de c�digo fuente.

La p�gina Zoomkat's "El Cheapo" Parallel Port Contact/Switch Monitor en http://www.epanorama.net/counter.php?url=http://www.geocities.com/zoomkat/status.htm describe como hacer un monitor de contacto/interruptor de puerto paralelo controlado v�a Web. El esquema muestra como conectar las clavijas de datos y de estado del puerto paralelo. La p�gina le ofrece un archivo batch y un archivo qbasic que se encuentra en la carpeta CGI-bin de apache adem�s de una copia de qbasic.exe.

M�s clavijas de entrada

Si no est� contento con s�lo cinco clavijas de entrada del puerto paralelo, hay algunos trucos para a�adir m�s.

Si est� tratando con interruptores desnudos, lo m�s sencillo es conectar hasta 4 interruptores entre las clavijas de control (clavijas 1, 14, 16 y 17) y la toma de tierra, programe las salidas de control en alto (teniendo en cuenta las inversiones) y use el registro de feedback de control para leer el estado (teniendo en cuenta las inversiones). Resumiendo, programe las salidas en alto y lea el feedback.

        Cn Salida ------+
                        |
                 Interruptor
		                |
        Tierra ---------+

Tambi�n podr�a usar las 8 l�neas de datos del puerto paralelo para entrada si tiene un puerto de impresora bidireccional. En teor�a, si todo est� configurado correctamente, lo �nico que tendr�a que hacer es conectar los interruptores a las l�neas de datos como m�s arriba, pero a la pr�ctica, esto no es una buena idea. Para conectar de forma segura los interruptores a las l�neas de datos, necesita asegurarse que antes las l�neas de salida han sido �tristated� o un acortamiento del interruptor a tierra podr�a da�ar el IC del puerto paralelo. Esto puede ser un problema despu�s de encender/reiniciar donde no se puede estar seguro del modo de operaci�n del puerto de la impresora (normalmente, las clavijas de datos se encuentran por defecto en modo salida).

Una soluci�n pr�ctica es usar resistencias limitadoras de corriente en serie por si acaso y despu�s colocar tambi�n unas resistencias pull-up.

                         1K            4.7K
         Dn salida --------^^^^^-----+----^^^^^------ (+5v)
                                     |
                                  Interruptor
                                     |
         Tierra ---------------------+--------------- (Gnd)

Resumen t�cnico del registro de software de puertos paralelos

La siguiente descripci�n de puertos es aplicable a los puertos paralelos est�ndar (SPP).

Offset
Nombre
Leer/Escribir
No. Bit
Propiedades
Base + 0
Puerto de datos
Escribir
Bit 7
Datos 7
Bit 6
Datos 6
Bit 5
Datos 5
Bit 4
Datos 4
Bit 3
Datos 3
Bit 2
Datos 2
Bit 1
Datos 1
Bit 0
Datos 0
El registro de datos es simplemente usado para sacar datos por las l�neas de datos (clavijas 2-9) del puerto paralelo. Si su puerto es bidireccional, puede recibir datos en esta direcci�n.

Offset
Nombre
Leer/Escribir
No. Bit
Propiedades
Base + 1
Puerto de estado
S�lo lectura
Bit 7
Ocupado
Bit 6
En reconocimiento
Bit 5
Sin papel
Bit 4
Select In
Bit 3
Error
Bit 2
IRQ (No)
Bit 1
Reservado
Bit 0
Reservado
El puerto de estado (direcci�n base +1) es un puerto de s�lo lectura. Cualquier dato escrito a este puerto ser� ignorado. N�tese, por favor, que el Bit 7 (Ocupado) se encuentra activo en entrada baja.

Offset
Nombre
Leer/Escribir
No. Bit
Propiedades
Base + 2
Puerto de control
Leer/escribir
Bit 7
No usado
Bit 6
No usado
Bit 5
Permite puerto bidireccional
Bit 4
Permite IRQ v�a l�nea ACK
Bit 3
Seleccionar Impresora
Bit 2
Inicializar impresora (Reset)
Bit 1
Servir a l�nea autom�ticamente
Bit 0
Strobe

El puerto de control (direcci�n base +2) est� pensado como un puerto �nicamente de escritura. Cando se conecta una impresora al puerto paralelo, se usan cuatro controles. �stos son Strobe, Servir a l�nea, Inicializar y Seleccionar impresora. Todos excepto el inicializar son invertidos.

Tambi�n puede usar las clavijas de salida en este puerto como clavijas de entrada. El puerto de control tiene que estar establecido a xxxx0100 para poder leer datos, eso significa que todas las clavijas tienen que estar a +5V en el puerto, para que se pueden llevar a la toma de tierra (l�gico 0) con su hardware externo. Una resistencia de 4.7K a +5V se puede usar para sacar la clavija en alto, cuando no est� en bajo. Los datos se leen de la misma direcci�n en la que normalmente escribe los datos.

 
<= entrada    DB25     Cent     Nombre de     Reg
=> salida    clavija  clavija     Se�al       Bit     Notas de funci�n
-------------   ------   --------  ---------    -----    -----------------
=>             1       1         -Strobe      C0-      Establecer pulso bajo >0.5 us para enviar
=>             2       2         Data 0       D0       Establecer a los datos menos importantes
=>             3       3         Data 1       D1       ...
=>             4       4         Data 2       D2       ...
=>             5       5         Data 3       D3       ...
=>             6       6         Data 4       D4       ...
=>             7       7         Data 5       D5       ...
=>             8       8         Data 6       D6       ...
=>             9       9         Data 7       D7       Establecer a los datos m�s importantes

<=            10      10         -Ack         S6+  IRQ Pulso bajo ~ 5 uS, despu�s de aceptar
<=            11      11         +Busy        S7-      Alto para ocupado/fuera de l�nea/error
<=            12      12         +PaperEnd    S5+      Alto para sin papel
<=            13      13         +SelectIn    S4+      Alto para impresora seleccionada
=>            14      14         -AutoFd      C1-      Establecer bajo para servir una l�nea autom�ticamente
<=            15      32         -Error       S3+      Bajo para error/fuera de l�nea/sin papel
=>            16      31         -Init        C2+      Establecer pulso bajo >50uS para inciar
=>            17      36         -Select      C3-      Establecer bajo en seleccionar impresora
==            18-25   19-30,     Tierra
                        33,17,16

Puerto             R/W  IOAddr  Bits   Funci�n
----               ---  -----   ----   ---------------------
Salida de datos     W   Base+0  D0-D7  8 salidas LS TTL
Entrada de estado   R   Base+1  S3-S7  5 entradas LS TTL
Salida de control   W   Base+2  C0-C3  4 salidas TTL de colector abierto
    "               W   Base+2  C4     interno, permitir IRQ
    "               W   Base+2  C5     interno, �Tristate� datos [PS/2]
Feedback de datos   R   Base+0  D0-D7  normalmente corresponde a Salida de Datos *
Feedback de control R   Base+2  C0-C3  Normalmente corresponde a salida de control *
    "               R   Base+2  C4     interno, permitir lectura de IRQ

* NOTA: Puede ser diferente del estado de salida escrito en algunos casos en que el circuito externa tira de la clavija activamente a un estado diferente del puerto paralelo para conducirlo. Por ejemplo, si las salida est� escrita como l�gica alta y la clavija es acortada a la toma de tierra (por ejemplo, cuando la clavija est� siendo usada como clavija de entrada), la lectura del feedback nos dice que est� en estado bajo.

N�tese que en la operaci�n de puertos paralelos bidireccionales diferentes fabricantes implementan sus puertos bidireccionales de formas diferentes.

NNotas sobre la operaci�n de puertos paralelos durante el arranque del ordenador

La operaci�n del puerto paralelo cuando el ordenador se est� encendiendo puede variar ligeramente en funci�n de cada ordenador. No he o�do nunca que exista una operaci�n exacta estandarizada para la operaci�n de puertos paralelos al iniciar el ordenador.

En el caso m�s simple, las clavijas de datos del puerto paralelo pueden ser al azar al principio y seguidamente colocarse todas al estado l�gico 0. As� es como las cosas funcionaban normalmente en los ordenadores antiguos. Algunos de los ordenadores con sistemas Windows m�s modernos parece que dejan todas las clavijas del puerto paralelo a estado l�gico 1 (+3�5V). En algunos ordenadores, el estado de las clavijas puede cambiar unas cuantas veces durante el proceso de inicializaci�n, lo que significa que si conecta unos LEDs a las clavijas del puerto paralelo, los ver� encendi�ndose y apag�ndose intermitentemente. Por ejemplo, muchos ordenadores port�tiles acostumbran a enviar los datos del tiempo de encendido a trav�s del puerto paralelo. Durante el proceso de inicializaci�n el c�digo enviado al puerto paralelo puede cambiar varias veces. Normalmente no se puede fiar del estado de las clavijas del puerto paralelo hasta que ha podido escribir un estado definido en ellas.

Al controlar sistemas electr�nicos a trav�s del puerto paralelo del PC, lo mejor es seguir la secuencia siguiente:

De esta forma el dispositivo no recibir� ninguna se�al de control que usted no dise�� para que recibiera, sin importar qu� pase durante el encendido del ordenador.

Notas sobre las diferentes versiones de puertos paralelos

Los primeros puertos paralelos compatibles con PCs eran unidireccionales, permitiendo �nicamente la transferencia de 8-bits de datos desde el servidor al perif�rico. Estos primeros puertos de impresora estandarizados (SPP) implementaban 8 l�neas de datos y usaban nueve l�neas de apret�n de manos, 4 de salida del servidor y 5 de entrada al servidor. Los tres registros de tipo SPP para el control y monitorizaci�n de las l�neas de apret�n de manos y de datos; �stas son el puerto de datos, el puerto de estado y el puerto de control. Los puertos paralelos de tipo SPP son usados mayoritariamente por impresoras, plotters, llaves, etc. Generalmente, todos los puertos paralelos modernos pueden operar en modo SPP. La distancia de cable m�xima entre el ordenador y el perif�rico se ve�a limitada a �nicamente 6 pies.

M�s tarde llego el puerto paralelo bidireccional de tipo PS/2 (BPP); este puerto bidireccional simplemente a�adi� la posibilidad de leer datos de 8-bit del perif�rico al servidor. Este tipo de puerto paralelo tambi�n implementaba los 3 registros usados por el puerto SPP para el control y monitorizaci�n de las l�neas de datos y de apret�n de manos; �stas son el puerto de datos, el puerto de estado y el puerto de control. Adem�s de las operaciones normales, hay un bit extra en el puerto de control que puede establecer todas las clavijas de datos a modo entrada o salida.

El est�ndar IEEE 1284, �M�todo de se�alizaci�n est�ndar para interfaces perif�ricas bidireccionales paralelas para ordenadores personales� buscaba corregir los mayores inconvenientes de la estructura original de los puertos paralelos. IEEE 1284 establece est�ndares para cables, conectores e interfaz el�ctrica que garantizan la interoperabilidad entre todos los perif�ricos paralelos. La configuraci�n especificada asegura que se mantiene la integridad de los datos, incluso a las mayores densidades de datos y a una distancia de hasta 30 pies. Ahora hay dos tipos nuevos de puertos paralelos con m�s opciones: el puerto paralelo mejorado (EPP) y el puerto de capacidades aumentadas (ECP). EPP y ECP son est�ndares definidos por las especificaciones IEEE 1284 y Microsoft. Tanto los puertos ECP como los EPP pueden ser operados en los modos bidireccional y SPP; no obstante, la operaci�n en sus modos especiales requiere de perif�ricos compatibles y de los drivers de software adecuados. Normalmente, EPP se usa para perif�ricos no-impresora, CD ROM, discos casete, discos duros, adaptadores de red, etc, � mientras que ECP est� pensado para la nueva generaci�n de impresoras y esc�ner. Actualmente, se han desarrollado nuevos productos que suportan una mezcla de ambo protocolos. Con el EPP, el driver de software puede mezclar operaciones de lectura y escritura sin sobrecalentar o requerir un apret�n de manos de protocolo. Con el puerto ECP, los cambios en la direcci�n de los datos deben ser negociados.

La interfaz entrada/salida en los puertos ECP y EPP es ligeramente diferente de los controles de los puertos entrada/salida normales. Se pueden entender como s�per puertos SPP. El puerto paralelo EPP implementa dos registros adem�s de los est�ndar de datos, estado y control. Las salidas son salidas tristeables que permiten que el puerto EPP sea usado como bus de datos para m�ltiples dispositivos EPP. Toda la transferencia de datos ocurre dentro de un ciclo entrada/salida ISA. Un puerto paralelo ECP nos ofrece dos modos especiales, llamados ciclos de datos y de comandos. En el modo FIFO de datos del puerto paralelo, los datos escritos o DMAed a un FIFO de 16-bytes son autom�ticamente transferidos al perif�rico usando el protocolo est�ndar de puertos paralelos. El modo ECP de puerto paralelo permite la transferencia bidireccional autom�tica de datos dentro del apret�n de manos v�a el protocolo ECP. Cuando se propuso el protocolo ECP, tambi�n se propuso una implementaci�n de registro est�ndar a trav�s de la especificaci�n ECP de Microsoft. El protocolo ECP est� pensado para ser conducido por DMA en vez de por operaciones de entrada/salida expl�citas. El protocolo ECP se ve muchas veces en puertos paralelos de la placa madre y en las mejores tarjetas de puerto paralelo que se conectan al bus ISA, pero son mucho menos comunes en tarjetas de puerto paralelo en bus PCI (porque el bus PCI no suporta transferencias DMA de tipo bus ISA).

Muchos puertos paralelos modernos suportan los modos SPP1, BPP, ECO y EPP o, al menos, la mayor�a de ellos. En algunos sistemas y tarjetas de interfaz a veces hay opciones para seleccionar el modo de operaci�n (as� que evite cualquier problema potencial).

Las operaciones de control entrada/salida m�s simples he descrito en este documento que no hay beneficio alguno por usar otro modo de operaci�n que no sea el SPP. Normalmente el control de puertos paralelos deber�a funcionar con rutinas simples entrada/salida directamente para pr�cticamente todos los puertos. En algunos casos raros, si tiene problemas, pruebe a establecer el puerto a modo SPP, deber�a estar garantizado que los ejemplos de control de entrada/salida que le he dado funcionen en este modo.

Notas sobre tarjetas de puerto paralelo en bus PCI

No he jugado mucho con tarjetas de puerto paralelo que se conectan al bus PCI, pero he visto casos donde el puerto paralelo que se conecta al bus PCI no funciona correctamente con software legacy, refiri�ndome al software que se encarga de controlar directamente el puerto paralelo a nivel de bus entrada/salida. Parece que los puertos paralelos PCI son diferente hardware que los puertos paralelos normales, por lo menos, se colocan en una direcci�n entrada/salida diferente. El driver del puerto paralelo (viene incluido con la tarjeta o con Windows) hace que la tarjeta del puerto paralelo parezca un puerto paralelo normal frente a las aplicaciones de alto nivel, aunque la operaci�n interna sea diferente que la de los puertos tradiciones. Me han dicho que los sistemas en que hab�a ambos bus ISA y PCI, el rango de la direcci�n entrada/salida normalmente usado para los puertos paralelos estaba limitado de forma que s�lo fuera accesible por el bus ISA, lo que significa que los puertos en el bus PCI ten�an que estar en otra direcci�n entrada/salida (m�s alta). Hoy en d�a que el bus ISA ha pr�cticamente desaparecido de los ordenadores de escritorio, las cosas podr�an ser diferentes. Como he visto en http://www.epanorama.net/counter.php?url=http://www.lpt.com/Products/DualPciParallelAdapter/dualpciparalleladapter.htm una tarjeta de puerto paralelo que dice que se configura autom�ticamente a un direcci�n entrada/salida disponible (3BC, 378 o 278), evitando la necesidad de reconfigurar los perif�ricos legacy del puerto paralelo (por ejemplo, discos Zip.). Este tipo de tarjeta puede funcionar con los ejemplos de m�s arriba. Otras tarjetas parece que pueden funcionar en otras direcciones.

Por ejemplo, la p�gina http://www.epanorama.net/counter.php?url=http://www.tharo.com/nettroub/pci_parallel_adapter.htm parece que muestra algunos detalles del adaptador PCI CyberParallel. El adaptador PCI CyberParallel parece que en el ejemplo se encuentra en las direcciones de entrada/salida 1088-108F y 1080-1083 (direcciones en hex). De acuerdo con otros detalles, podr�a ser que esta tarjeta funcionara por ella misma de forma parecida a un puerto de impresora normal, pero la direcci�n de entrada/salida es diferente. Encuentre la direcci�n de entrada/salida de la tarjeta y despu�s pruebe mis ejemplos de control de puertos paralelos con esta direcci�n.

La p�gina Web http://www.epanorama.net/counter.php?url=http://www.dta.it/support/manuals/html/dcl/group__addr.html titulada Parallel port address on ISA o PCI bus nos muestra una lista de las direcciones entrada/salida para los distintos tipos de puerto paralelo (se listan tanto direcciones de puertos ISA como PCI):

#define  LPT0   0x3BC 
  Puerto EPP est�ndar paralelo en la direcci�n 3BCH. 

#define  LPT1   0x378 
  Puerto EPP est�ndar paralelo en la direcci�n 378H. 
 
#define  LPT2   0x278 
  Puerto EPP est�ndar paralelo en la direcci�n 278H. 
 
#define  LPT3   0x27C 
  Puerto EPP est�ndar paralelo en la direcci�n 27CH. 
 
#define  LPT4   0x26C 
  Puerto EPP est�ndar paralelo en la direcci�n 26CH. 
 
#define  LPT5   0x268 
  Puerto EPP est�ndar paralelo en la direcci�n 268H. 
 
#define  PCI0   0x9800 
  Puerto EPP est�ndar paralelo en la direcci�n 9800H. 
 
#define  PCI1   0xA000 
  Puerto EPP est�ndar paralelo en la direcci�n A000H. 
 
#define  PCI2   0xA400 
  Puerto EPP est�ndar paralelo en la direcci�n A400H. 
 
#define  PCI3   0xA800 
  Puerto EPP est�ndar paralelo en la direcci�n A800H. 

#define  PCI4   0xB000 
  Puerto EPP est�ndar paralelo en la direcci�n B000H. 
 
#define  PCI5   0xB400 
  Puerto EPP est�ndar paralelo en la direcci�n B400H.

No he comprobado estas direcciones entrada/salida por mi mismo.

En sistemas Windows modernos (Yo lo prob� en Windows 2000) puede la direcci�n entrada/salida del puerto paralelo en el administrador de dispositivos. Primero abra el administrador de dispositivos (inicio � configuraci�n � panel de control � sistema � hardware � administrador de dispositivos). Una vez all�, selecciones el puerto que le interesa en la secci�n Puertos (COM y LPT). Con el bot�n derecho del bot�n se le abrir� un men� en el que debe seleccionar Propiedades. Una vez all�, selecciones Recursos y se le abrir� una ventana como �sta:

Windows device control IO address view

Los detalles en esta imagen son del puerto paralelo integrado en la placa madre de mi PC.

Con suerte, esta informaci�n le servir� a alguien como punto de partida para sus experimentos. Si alguien tiene m�s detalles, estar� encantado de a�adirlos.

Notas sobre adaptadores de puertos paralelos por USB

Los adaptadores de puerto paralelo por USB permiten a los usuarios conectar dispositivos de interfaz de puerto paralelo como impresoras a su ordenado a trav�s del puerto USB. A medida que los USB se vuelve m�s populares, los nuevos ordenadores port�tiles se fabrican ya sin puertos paralelos ni/o puertos en serial. Los PCs m�s antiguos ten�an puertos paralelos y no puertos USB, los ordenadores de hoy tienen ambos y los ordenadores de ma�ana tendr�n puertos USB, pero no puertos paralelos.

Los puertos paralelos a trav�s de este tipo de adaptador se ven exactamente igual para programas de alto nivel en sistemas Windows. La implementaci�n a bajo nivel pero, es totalmente diferente, de forma que las operaciones de control de entrada/salida de bajo nivel descritas en este documento no sirven para adaptadores USB de puerto paralelo. Ya se puede olvidar de usar los puertos paralelos por USB para su propio control de hardware. En algunos casos el adaptador USB de impresora paralelo puede ser �til. Con �ste, se puede conectar la impresora a su puerto USB y de esta forma conservar el puerto paralelo de su sistema libre para sus propios circuitos.

Los puertos paralelos por USB normalmente est�n pensados para controlar impresoras y nada m�s. Cuando se usa un HP Officejet o cualquier otro producto multifunci�n, el adaptador del puerto paralelo s�lo se encarga de la funci�n impresora. No funcionar� con la funci�n de fax o de escaneo del producto multifunci�n, mientras que por las clavijas de salida que hemos comentado en este art�culo s�.

Si su ordenador ya es de los que no tienen ning�n puerto paralelo y todo lo que puede usar son USB, seguramente deber�a considerar hacer la entrada/salida que necesita con una tarjeta de entrada/salida industrial que se conecta al puerto USB. Este tipo de tarjetas se acostumbran a distribuir con su propio software de control y sus propias librer�as de programaci�n a usar para controlarlos.

Otros documentos que vale la pena consultar


Tomi Engdahl <[email protected]>