Controlar el Puerto Paralelo con Visual Basic.NET
¿Qué es el Puerto Paralelo?
Un puerto paralelo es una interfaz entre un ordenador y un periférico cuya principal característica es que los bits de datos viajan juntos enviando un byte completo o más a la vez. Es decir, se implementa un cable o una vía física para cada bit de datos formando un bus. El cable paralelo es el conector físico entre el puerto paralelo y el periférico. En un puerto paralelo habrá una serie de bits de control en vías aparte que irá en ambos sentidos por caminos distintos. En contraposición al puerto paralelo está el Puerto serie, que envía los datos bit a bit por el mismo hilo.
¿Cómo funciona el Puerto Paralelo?
La mayoría de los puertos paralelos de la parte posterior de las computadoras compatibles poseen un conector DB-25. Esto es extraño, puesto que este conector es el de serie que se utiliza para los interfaces serie. El conector es normalmente hembra (tiene orificios en lugar de patitas) para distinguirlo de los conectores serie que son habitualmente machos y que puede tener también la computadora. Sin embargo, utiliza un conector DB-25 macho para su interfaz paralelo (por ser algo diferente).
La función de cada terminal del conector DB-25 se muestra en la siguiente imagen. Las señales que ocupan esas terminales se pueden dividir en cuatro grupos básicos: tierras, salidas de datos, entradas de dialogo y salidas de dialogo. En la imagen las tierras se indican con círculos, las entradas de dialogo se indican con flechas que apuntan al conector y las salidas (tanto de datos como de dialogo) tienen flechas que apuntan hacia afuera del conector. (Note que algunas de las líneas tienen una abreviatura convencional que se indica entre paréntesis.)
Librería Inpout32.dll (Visual Basic.NET)
Para trabajar con puertos bajo VB.NET es necesario el uso de una librería que contenga funciones de Acceso a las direcciones de los puertos. Esta librería es diferente dependiendo del tipo de puerto a trabajar. La librería INPOUT32.DLL contiene las instrucciones necesarias para el manejo de los Puertos Paralelos.
Para accesar al puerto paralelo en Windows se requiere hacer uso de unas funciones que vienen en la librería inpout32.dll.
Poner la librería correspondiente en la carpeta c:\windows\system32
Agregar el módulo inpout 32.bas al programa realizado en Visual Basic y listo ya puedes hacer uso de las funciones para accesar al puerto paralelo:
Inp – Para leer el puerto (Entrada)
Out – para escribir al puerto (Salida)
Desarrollo de la práctica
Material:
- Cautín
- Estaño
- Pasta para soldar
- Protoboard
- 2 Mts cable UTP
- 2 Mts cable (1 hilo)
- 5 Leds
- 1 Conector Paralelo Macho
Procedimiento:
Primero pelamos 10 cm del cable UTP por ambos extremos y separamos los hilos, de la misma forma pelamos 1 cm de cada uno de los hilos de cada extremo, una vez realizado esto procedemos a soldar los hilos del cable en el conector macho, para esto se deben localizar los pines en el conector que están enumerados, localizamos pines del 2 al 9 que son los utilizados para la transferencia de datos, una vez localizados los pines procedemos a soldar ,esto se hace en el orden que ustedes prefieran siempre y cuando recuerden la secuencia, una vez hecho esto tomamos el cable de un hilo y pelamos en cada extremo 1 cm. Una vez hecho esto localizamos en el conector el pin 25 que es el de tierra (del pin 18 al 25 son tierra).
Una vez realizado todo este procedimiento pasaremos a la protoboard, en la protoboard tenemos que localizar la serie negativa que esta de azul una vez encontrada hay que introducir el cable de tierra en el primer orificio de la seria del polo negativo, una vez hecho esto tomamos los leds y ubicamos el polo negativo que es la patita más corta y la insertamos en la columna negativa y el positivo la insertamos en la columna “A” y que ambas filas coincidan y así con los leds restantes sucesivamente luego pasamos a conectar el cable UTP ala protoboard para esto tenemos que llevar el mismo orden que en el conector paralelo respectivamente ,localizamos el primer hilo a introducir y lo insertamos en la columna “B” de la forma que la fila del led coincida con este y así sucesivamente con los demás con su respectivo orden .
Programa
Para poder manejar puertos en Visual Basic.Net es necesario contar con la librería Inpout32.dll de la cual hablamos anteriormente reiterando que es necesario Poner la librería correspondiente en la carpeta c:\windows\system32 una vez hecho eso tenemos que crear una clase en nuestro proyecto donde se importa la librería .
Imports System Imports System.Runtime.InteropServices Public Class Puerto _ Public Shared Function output(ByVal adress As Integer, ByVal value As Integer) As Boolean End Function End Class
Una vez hecho esto pasamos a nuestro formulario e insertamos un botón, en este botón probaremos si todo sale correctamente en el botón ira el siguiente código:
Private Sub Probar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Probar.Click Puerto.output(888, 255) End Sub
Para poder encender el led numero 1 ,2 y 3 de nuestra Protoboard necesitamos el siguiente codigo que ira dentro de un boton como se muestra respectivamente :
Private Sub Led1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Led1.Click Puerto.output(888, 1) End Sub Private Sub Led2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Led22.Click Puerto.output(888, 2) End Sub Private Sub Led3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Led3.Click Puerto.output(888, 4) End Sub
888 porque es la dirección hexadecimal que utiliza VB.NET para mandar señal al puerto y 1,2 y 4 por que es la dirección donde esta ubicada el primer led para poder saber la dirección del led se debe hacer lo siguiente:
Los pines se enumeraran del 0 en adelante en este caso del 0 al 7 tomando referencia los pines del conector del 2 al 9 se realiza la siguiente operación:
| Led | Pin |
| 1 | 3 |
| 2 | 4 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |
| 6 | 8 |
| 7 | 9 |
Tomando en cuenta la tablita anterior se realiza lo siguiente:
2^0 (led)=1 (direccion en VB.NET)
2^1=2
2^2=4
2^3=8
2^4=16
2^5=32
2^6=64
2^7=128
Esa es toda la operación y así se realiza sucesivamente.
Este es el ejemplo, para esto se necesita inserta 8 botones y 1 timer el formulario y la clase anteriormente mencionada.
Public Class Form1 Dim i As Integer = 0 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Puerto.output(888, 0) End Sub Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed Puerto.output(888, 0) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Puerto.output(888, 1) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Puerto.output(888, 2) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Puerto.output(888, 4) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Puerto.output(888, 8) End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click Puerto.output(888, 16) End Sub Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click Puerto.output(888, 0) Timer1.Stop() End Sub Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click Puerto.output(888, 255) Timer1.Stop() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick TextBox1.Text = CStr(i) i = i + 1 If i = 1 Then Puerto.output(888, 1) End If If i = 2 Then Puerto.output(888, 2) End If If i = 3 Then Puerto.output(888, 4) End If If i = 4 Then Puerto.output(888, 8) End If If i = 5 Then Puerto.output(888, 16) End If If i = 6 Then Puerto.output(888, 255) End If If i = 7 Then Puerto.output(888, 16) End If If i = 8 Then Puerto.output(888, 8) End If If i = 9 Then Puerto.output(888, 4) End If If i = 10 Then Puerto.output(888, 2) End If If i = 11 Then Puerto.output(888, 1) End If If i = 12 Then Puerto.output(888, 255) End If If i = 13 Then i = 0 End If End Sub Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click Timer1.Enabled = True End Sub End Class
Este programa lo que realiza es encender led por led según el botón que se presione correspondientemente a cada led de 1 al 5, con otro botón enciende todos los leds, otro desactiva el led cuando alguno esta encendido y por último se hiso una pequeña muestra de cómo se podría implementar con un timer para que cada led encienda cada decima de segundo uno tras otro.
Con esto damos por concluido este tutorial que espero le sirva y sea de su agrado cualquier duda o sugerencia hacerla con toda confianza.
Quizá te interese :
Anteriormente publiqué un tutorial sobre como conectar Crystal Report con Mysql en VB.NET http:/ ...
Puedes utilizar este código en tus aplicaciones. Código de Fibonacci en Visual Basic .Net 'D ...
Hola comunidad!, de regreso aportando más material para que esto siga en crecimiento. Ahora p ...













y para recibir dato?? osea para recibir 1 ó 0 cunado presionamos un pulsador??
Hola:
Puedes encontar el manual completo sobre VB .net y C# en PDF con código fuente completo incluido en este enlace.
http://electronica-pic.blogspot.com/2010/07/interfaz-puerto-paralelo-lpt.html
Saludo.
it was very interesting to read http://www.ubicuos.com
I want to quote your post in my blog. It can?
And you et an account on Twitter?
hola:
adonde puedo encontrar el modulo , necesario para utilizar la librería <inpout32.dll es q sin el no me funciona el proyecto si me puede ayudar muchas gracias
hola , lo puedes descargar entrando a este link http://www.dll-download-system.com/dlls/inpout32.zip espero haberte ayudado .
Hola:
Interfaz puerto paralelo LPT:
http://electronica-pic.blogspot.com/2010/07/interfaz-puerto-paralelo-lpt.html
Un cordial saludo.
Hola estamos llevando acabo un proyecto y necesito saber como detectar voltaje por el puerto paralelo mediante c sharp.
espero y me ayuden.
gracias.
Miguel,
Por lo que sé, para detectar voltajes más bien es un asunto de un circuito especializado y la salida de eso pasarla a un decodificador analógico-digital (Ya con la salida digital puedes pasarlo al puerto sin problemas).
Espero te sirva esto como referencia.
Esquema voltimetro digital
Saludos!
tengo un problema, los leds andan con solo conectarlos a mi puerto paralelo y al usar el programa no se apagan ni se prenden, alguno me da una solucion?
TRATE DE HACERLO PERO EL ESTADO INICIAL DE MI PUERTO PARALELOES DE 5 VOLTIOS INDEPENDIETEMTE DE QUE ENECUTE O NO EL PROGRAMA NO SE POR QUE NO ME FUNCIONA
para nico o hector david…..
me pasa lo mismo q a uds… el esta
para nico o hector david…..
me pasa lo mismo q a uds… el estado inicial de mi puerto
paralelo ya es de 5 v … como lo solucionaron ?
saludos
barmanagers@hotmail.com
Hola,
¿Alguien sabe cómo mandar datos (bits) al puerto paralelo con Visual Studio 2010?
ESTOY TRABAJANDO CON PUERTO PARALELO,
NECESITO QUE MI PROGRAMA RECONOSCA ENTRADAS DE DATOS,
COMO SERIA EL CODIGO, O EL MODULO PARA HACER QUE ESTE RECONOSCA ESOS DATOS !!! SALUDOS!
COMO HACER PARA QUE MI APLICACION RECONOSCA DATOS, CUANDO ELLOS VIENE DEL PUERTO PARALELO ?
yo tengo presentar un proyecto que consiste en manejar un semaforo a traves de visual basic 6, el usuario es el que introduce los tiempos de cada led,, para ello tengo k utilizar la libreria io.dll , ya la descargue y se k tengo k ponerla en C:\WINDOWS\System32 pero no tengo ni la menor idea komo hacer eso
pueden ayudarmee plissss
En visual Estudio 2010?
Lo estoy haciendo en VB 2010 y no me funciona no realiza ninguna acción …. espero pronta respuesta
salu2
Un saludo a todos
Bueno gracias a Dios, ya puede hacerlo en vb 2010, el único problema es la librería inpout32.dll que solo funciona para xp.
Salu2
Que tal amigos… Estoy tratando de encender 19 leds y que cada uno se encienda y se apage en un tiempo determinado… en C sharp Aplicacion de windows form 2010. Si alguien me puede dar una pauta desde ya les doy mis mas sinceros agradecimientos…marconetzone@hotmail.com