You are on page 1of 7

Tutorial Básico Control Puerto Paralelo con Visual Basic 6.

0
Introducción.

Este pequeño tutoríal proporciona los pasos básicos para controlar el puerto paralelo
desde Visual Basic 6.0. Lo que se intenta es poder enviar pulsos o señales por medio de
este y recibir pulsos o señales por medio de el.

La información que se encuentra en este texto fue adquirida en Internet y conocimientos


adquiridos (experiencia del escritor).

Material.

Puerto paralelo.
Microsoft Visual Studio 6.0.
1 Led.

Empecemos con el puerto paralelo. Este es un conecto DB25 obvio con 25 pines lo
cuales están numerados y tienen una función especifica cada uno de ellos.

Podemos ordenar cada uno de los pines o bytes en:

Dataport

pin 2 - D0 pin 3 - D1
pin 4 - D2 pin 5 - D3
pin 6 - D4 pin 7 - D5
pin 8 - D6 pin 9 - D7

Statusport

pin 10 – ACK pin 11 - BUSY


pin 12 - PAPER END pin 13 - SELECT IN
pin 15 - ERROR

1
ControlPort

pin 1 – STROBE pin 14 - AUTO FEED


pin 16 – INIT pin 17 - SELECT

La parte de GND, son los tierra


del 18 al 25

1. El Dataport se usa como salida.


2. El Statusport se usa como entrada.
3. El controlport se usa de las dos formas anteriores.

Es decir que para encender led’s mandando voltaje al puerto usaremos el Dataport, para
recibir niveles de voltaje usaremos el Statusport.

Es importante no conectar al revés las cosas en el puerto ya que existe la posibilidad de


dañarlo.

En este caso mencionare la forma en que se conecta y controla pero también mencionare
que mi computadora no contaba con puerto paralelo. Una vez adquirido el puerto
paralelo de tipo PC-I fue colocado en la ranura correspondiente y se le instalo el
controlador indicado.

El puerto paralelo maneja direcciones de memoria asignadas por el SO. No se si son


pilas o colas pero son direcciones de memoria, estas direcciones están numeradas en
código hexadecimal y son utilizadas normalmente para enviar ceros o unos a una
impresora. Por ejemplo:

H378

* Donde la H indica que es hexadecimal.


* El 378 es el número hexadecimal.

Una vez dicho y entendido esto se debe tener alguna forma de controlar esto desde el
lenguaje visual Basic, desafortunadamente al ser un lenguaje de alto nivel visual no
tiene la capacidad de controlar hardware por si solo, este tipo de circunstancias se
controlan con C o C++ ya que estos lenguajes tiene esa capacidad.

Afortunadamente para nosotros se puede aprovechar la característica de Windows de


utilizar DLL (Dynamic Linking Library (Bibliotecas de Enlace Dinámico)) y ya que
algún experto programo una DLL en C++ para controlar este dispositivo nosotros
podemos utilizarla en Visual Basic.

Esta DLL mágica es la inpout32 la cual tiene la capacidad de mandar y recibir señales o
pulsos por el puerto paralelo. Existen varias versiones, varias de ellas no funcionan en
XP y mucho menos en Vista, pero después de buscar y buscar por Internet encontré una
que si funciona perfectamente en XP y Vista incluso te da su código y muchas cosas
mas, esta DLL se supone que esta adjunta con este tutorial.

2
Una vez comprendido esto hablemos de las direcciones de memoria anteriormente
mencione la dirección de memoria que utiliza el puerto paralelo para funcionar esta se
puede ver en:

Botón de inicio/Mi PC/botón derecho del ratón/propiedades/hardware/administrador de


dispositivos/puertos (COM & LPT)/doble clic en tu puerto LPT/recursos.

Como se ve en la imagen los primeros intervalos corresponden a Dataport (salidas del


puerto paralelo) es decir:

Pin 2 3 4 5 6 7 8 9
Memoria 378 379 37A 37B 37C 37D 37E 37F

Como se puede ver se omitió el 0 y también se puede observar que es la misma


dirección que usamos en el ejemplo del código hexadecimal.

El otro intervalo es para el Statusport y funciona de la misma manera.

Esto no quiere decir que para todas las maquinas sea la misma. Como mencione al
principio de este escrito mi PC no contaba con puerto paralelo por lo que le agregue un
PC-I y mis direcciones quedaron de la siguiente manera.

Es muy recomendable siempre checar las direcciones para no presentar errores ni


confusiones, este simple paso ahorra muchos dolores de cabeza.

3
Para la programación se necesita comprender la forma en que serán enviados los datos,
señales o pulsos al puerto y es de la manera siguiente.

Se envían datos binarios y dependiendo del valor son los pines utilizados:

Pin 2 3 4 5 6 7 8 9
Valor Binario 1 10 100 1000 10000 100000 100000 10000000
0
Valor decimal 1 2 4 8 16 32 64 128

Por ejemplo:

Si queremos mandar señales por el pin 2 y el 5 pues se hace la suma.

1+8=9

Y ese valor es el que se envía en binario 1001.

Digamos que necesitamos el pin 5 y 9 la suma es:

8 + 128 = 136

Y en binario es 10001000.

Si queremos prender todos los led’s conectados al puerto paralelo pues se pone:

Valor.- 1111111 = 255

Si queremos apagar todos los led’s conectados al puerto paralelo pues se pone:

Valor.- 0 = 0

NOTAS:
• Se puede ver que el pin de menor peso es el numero 2 por lo que hay que
empezar a contar por hay.
• Normalmente el puerto paralelo esta enviando señal por todos los pines.
• No es necesario enviar el dato binario ya que la DLL inpout32 los convierte
basta con enviar el dato decimal.

Es hora de comenzar.

Para poder enviar datos al puerto paralelo desde visual Basic utilizando la DLL
inpout32 se usa el comando Out:

Su sintaxis es:
out (numero de pin desde donde se desea empezar a contar “pin con menor peso”, dato en decimal o binario).

4
Por ejemplo:

Out &H378, 255

Donde: Se omite el paréntesis.


&H indica que el valor es hexadecimal.
Se separa con “,”.
El 255 indica que pines serán usados.

Normalmente se utiliza la primera dirección de memoria y el pin numero 2 como el de


menor peso, de no ser así cambia la suma y los valores adquiridos por los pines que le
siguen al de menor peso.

Programación:

1) Creamos un nuevo proyecto EXE estándar en VB6 en el formulario agregamos


2 botones.

Nombre Texto
Command1 Prendido
Command2 Apagado

2) Abrimos el código y agregamos.

Private Sub Command1_Click()


Out &H378, 0
End Sub

Private Sub Command2_Click()


Out &H378, 1
End Sub

Agregamos un modulo “Archivo/agregar modulo” y ponemos.

Public Declare Function Inp Lib "inpout32.dll" _


Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Es importante copiar y pegar la DLL inpout32 en C:\WINDOWS\system32 si


ponemos el código en el modulo tal cual.

5
Yo y mucha gente mas a escuchado la frase “los que es del cesar a l cesar” pues
en nuestro caso seria “lo que es del SO. Al SO.” A que me refiero con esto no es
muy recomendable mezclar cosas vitales del SO. Con otras cosas externas por lo
que nuestra DLL seria mejor ponerla en otro lugar, digamos que se instala
nuestro programa en una PC pues la DLL debería estar en la carpeta donde se
instalo, en este caso supongamos que la tenemos en un pendriver o usb con la
letra H:\ asignada y una carpeta con nombre serial, pues el código seria el
siguiente:

Public Declare Function Inp Lib "H:\ serial\inpout32.dll" _


Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Como ven lo único que cambia es el path, ¡que fácil es la vida verdad!

3) Si corremos el programa y presionamos los botones pues no pasa nada y eso es


bueno quiere decir que esta bien, lo que pasa es que no esta conectado nada.

Si te sale un error como este al momento de compilar o apretar un boton.

Pueden ser 2 cosas.

1) La DLL inpout32 no esta en C:\WINDOWS\system32 o no esta en el path


indicado.
Solución.-Verifica que esta en el lugar indicado.

6
2) La DLL inpout32 no es compatible con XP o Vista es una versión anterior que
solo funciona en sus predecesores de XP. Claro si su SO. Es Windows XP o
Vista.
Solución.- Usa la que se encuentra con este tutorial.

Yo e mirado que es necesario para controlar un solo pin o bit que prenda un led lo
siguiente:

Material Necesario

1 Puerto paralelo libre


1 Moc3010m
1 Triac (A los Amperes que trabaje el dispositivo I=P/V)
1 Resistencia 560 Ohms
1 Resistencia 220 Ohms
1 Led
1 Conector Db25 Macho
Cable para interconexiones (Puede ser del de Red de 8 Hilos)
1 Fusible (Al amperaje del dispositivo)
1 Clavija CA con cable

Pues la verdad yo no ocupe tanto, solo use el puerto paralelo libre una extensión de
puerto paralelo es decir un cable de puerto paralelo y un led.

Conectar el led y probar nuestro programa.

1) Conectamos la extensión al puerto paralelo.


2) En el pin 2 conectamos la pata del led (+).
3) En cualquier pin entre 18 y25 conectamos la pata (-).
4) Corremos nuestro programa.
5) Apretamos los botones y miramos.

Para leer un dato desde el puerto se usa la instrucción Inp.

Más información de esto en:

http://foro.elhacker.net/programacion_general/introduccion_a_la_programacion_por_pu
ertos_en_visual_basic-t47786.0.html

Espero que esto le sea de ayuda, cualquier duda comentario o sugerencia escriban a
daco_tutor@hotmail.com

Tutorial Básico Control Puerto Paralelo con Visual Basic 6.0 realizado por:
Ing. Diego Alberto Ortega Carreto

You might also like