Technorati Profile Add to Technorati Favorites ELECTRONICA DESARROLLO: 07_06

viernes, 15 de junio de 2007

Manejo de puerto paralelo con IO.DLL

Este blog fue diseñado para apoyar a la comunidad de desarrolladores de electrónica. Se publicarán artículos de proyectos desarrollados por el Administrador del blog, Ingeniero Electrónico, quien estará atento a sus inquietudes o sugerencias igualmente todos pueden compartir sus conocimientos e intercambiar opiniones o aportes dentro de un marco de respeto y tolerancia. Los artículos publicados aquí son elaborados con tal sencillez que son totalmente comprensibles y los proyectos indicados pueden ser llevados a cabo por cualquier estudiante o profesional del ramo de la electrónica.

--English-------Español



CONTROL DEL PUERTO PARALELO DE UN COMPUTADOR

Justificación: Se escogió este sencillo proyecto como el primero en Proyectos de Electrónica, por su gran utilidad que puede dársele en cualquier momento.

Objetivo: Elaborar un programa que envié datos (bytes) a través del puerto paralelo de nuestro pc. Dicho software debe trabajar bajo windows xp, windows 2003, windows 2000, windows ME y windows 9x.

Utilidad: Enviar datos al puerto paralelo es de gran utilidad ya que a través de este pueden activarse/desactivarse cargas empleando relés o triacs, también pueden enviarse órdenes a un dispositivo microcontrolado o a un PIC.

Marco teórico

Todos los computadores de escritorio traen un conector DB 25 Hembra de color púrpura con una distribución de pines como se muestra en la figura 1. En el presente proyecto se emplearán las líneas D0 a D7 (pines 2 al 9) para sacar los datos de control, y el pin 25 (GND) para dar la referencia eléctrica.


Figura 1. Puerto Paralelo



Como estandard el puerto paralelo de un PC posee tres bytes:

DATAPORT, STATUSPORT y CONTROLPORT.

Para este proyecto se utilizará el DATAPORT, el cual posee obviamente una dirección asignada, la cual puede variar dependiendo del tipo de PC, para determinar cual es la dirección adecuada Usted debe dirigirse al panel de control, sistema,
administrador de dispositivos, puerto (COM y LPT), y luego haga click derecho sobre LPT1 o LPT2 según el puerto que desea controlar y de nuevo haga click en propiedades, busque la pestaña recursos y observe que intervalo de I/O le corresponde. Para nuestro caso se observa lo siguiente:

I/O Range 378-37F


Como estos valores se encuentran en base hexadecimal convertimos a decimal y obtenemos

I/0 Range 888-895

Por defecto escogemos la primera opción es decir número del Dataport es 888.

Utilizaremos incialmente Visual Basic 6.0 para la creación de nuestro software de control.

Dado que Microsoft en sus sistemas operativos recientes a creado modos de protección para los puertos del pc de tal forma que ellos no son tan fáciles de accesar como lo eran en las versiones 9x de windows, hemos de necesitar una librería "universal" que nos permita acceder de una forma práctica a dichos puertos, ella es la librería io.dll. Primero debe descomprimir el paquete en una carpeta cualquiera y luego buscar i0.dll y copiarlo.
Una vez copiada esta librería se debe instalar en la carpeta system32 de windows. La ruta a seguir es C:\WINDOWS\system32,(solamente pegarla en esta carpeta).

Elaboración del software

1. Elabore un nuevo proyecto Estándar.Exe en visual basic 6.0 como se muestra en la figura 2.

Figura 2. Nuevo proyecto estándard .EXE

2. Cree un módulo general como se muestra en la figura 3 usando la herramienta añadir un nuevo formulario.

Figura 3. Añadiendo un nuevo módulo.

3. Abra el nuevo módulo y pegue el siguiente código en él:

Public Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Public Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Public Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Public Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Public Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean

4. Por último cree un nuevo formulario y añada un botón para cada bit a controlar, como lo muestra la figura 4, también añada un botón para limpiar el puerto y otro para activar todo el puerto.

Figura 4. Formulario con que que se controla cada bit del puerto paralelo

El código correspondiente a cada botón es el siguiente:

Private Sub Command1_Click() ' bit 0 en 1
PortOut 888, 1
End Sub

Private Sub Command2_Click()
' bit 1 en 1
PortOut 888, 2
End Sub

Private Sub Command3_Click()
' bit 2 en 1
PortOut 888, 4
End Sub

Private Sub Command4_Click()
' bit 3 en 1
PortOut 888, 8
End Sub

Private Sub Command5_Click()
' bit 4 en 1
PortOut 888, 16
End Sub

Private Sub Command6_Click()
' bit 5 en 1
PortOut 888, 32
End Sub

Private Sub Command7_Click()
' bit 6 en 1
PortOut 888, 64
End Sub

Private Sub Command8_Click()
' bit 7 en 1
PortOut 888, 128
End Sub

Private Sub Command9_Click()
' D0 a D7 en 0
PortOut 888, 0
End Sub

Private Sub
Command10_Click() 'D0 a D7 en 1
PortOut 888, 255
End Sub

Obsérvese lo siguiente: la instrucción portout tiene dos valores a asignar estos son: Número del puerto y dato a sacar. Por tal razón se establece el puerto 888 y el dato a enviar en decimal. Como no todos casos son iguales ud debe identificar muy bien el número del puerto como se indico anteriormente y cambiar el este código fuente al nuevo valor del número de puerto.

Para el software anterior, cada vez que se de click a un botón de la ventana formulario se obtendrá algún dato de salida en el puerto paralelo. Para comprobarlo es necesario elaborar un hardware sencillo a base de leds con el anodo en la salida del pin del pueto paralelo y el cátodo a GND. También puede probarse el anterior software con un multímeto si se desea con la función Voltaje en dc y la punta roja de prueba en la salida del pin de puerto y la punta negra en el pin 25 (GND).

Ya están disponibles algunos circuitos de ejemplo para probar este software visítalos.

Visita mi blog personal: Luis Roberto Arteaga - Mi curriculum