Encendiendo un led con el puerto paralelo

De acuerdo a lo que se ve en mi video de Youtube, aca presento el tutorial de como hacer que encienda un led conectado al puerto paralelo. Este es el video http://www.youtube.com/watch?v=oV31uB6fJCo

Para comenzar primero debemos tener en cuenta lo siguiente:

  1. Asumo que tienes conocimientos en VB6.
  2. El conector que conocemos como paralelo, es un DB25 que se consigue en cualquier “Steren”, o bien donde vendan refacciones de electrónica.
  3. Este conector tiene 25 pines, numerados del 1 al 25, para hacer que encienda el led conectado a el, se usaran los pines 2 y 25. El pin 2 digamos que “trae correinte”, mientras que el 25 es tierra.

Pues comencemos…

¿Qué es un puerto?

Un puerto se define como la interfaz física entre un dispositivo de Hardware y la computadora.

Nosotros usanos puertos para comunicarnos con la PC via Módem, impresora, teclado, mouse, etc. Las señales que se envian y reciben en el puerto pueden ser “0” ó “1”, lo cual sería apagado o encendido respectivamente. Un puerto paralelo puede enviar hasta 8 bits y recibir 5 al mismo tiempo.

Los pines numerados de un puerto paralelo

Los pines numerados de un puerto paralelo

Para enviar los datos por el puerto se utilizan los pines 2 al 9, que corresponden a D0-D7. Los puertos 18 al 25 se utiizan como tierra (ver en la figura que corresponden a G0 a G7).

En la aplicaíón que desarrolle utilicé los pines 2 y 25, como habeis podido observar pude haber usado cualquiera del 2 al 9 y del 18 al 25.

El desarrollo.

Lo primero fue conseguir la libreria inpout32.dll, la cual se encarga de comunicarse con los puertos. Como todos sabemos Visual BASIC es un lenguaje de alto nivel y como tal, no le es posible comunicarse directamente con ellos.

Al incluir la libreria, que esta programada en un lenguaje de bajo nivel esta podrá hacer posible que nuestro proyecto funcione, ya que es la que se comunica con los puertos.

Para bajar la libreria via RS  http://rapidshare.com/files/227330402/Tutorial_VB6_Y_PP.rar (ver créditos al final).

Antes de continuar deben de tener en cuanta que el archivo DLL debe estar en la misma carpeta donde guarden el proyecto, de lo contrario no funciona

Lo siguiente sería soldar un cable de red en el pin 2 y otro cable en el pin 25, asimismo los otros extremos del cable van soldados al led, si lo prefieren pueden usar una protoboard. Tener en cunta que el cable que va al pin 2 es que “positivo” por lo tanto iria a la para mas larga del led. Si lo soldan al revés no funcionará.

Ahora si, nos metemos a Visual Basic y pedimos un proyecto de tipo EXE Estandar, cuando aparezca el formulario guardamos el proyecto, y nos salimos de Visual BASIC.

 

Captura de la carpeta donde tengo guardado el proyecto

Captura de la carpeta donde tengo guardado el proyecto

En la captura se aprecian los archivos del proyecto de Visual Basic (*.frm, *.frx, *.vbp, *.vbw, *.bas, *.SCC), la librería (*.dll), y el binario terminado (led.exe). Una vez mas les digo, todo en la misma carpeta.

Si aun no tenemos la DLL en la misma carpeta, la copiamos para que quede como en la figura, y damos 2 clic al archivo .VBP para volvernos a meter a Visual.

Ahora si en el formulario en blanco agregamos:

3 botones con las siguientes propiedades:

  • command1.caption=”Encender”
  • command2.caption=”Apagar”
  • command3.caption=”Automatico”

3 etiquetas con las siguientes propiedades:

  • Label1.caption=”Direccion LPT1″
  • label2.caption=””
  • label2.borderStyle=1
  • label2,forecolor=Escojan uno de la lista que les aparece….
  • label2.font=Escojen una fuente de la lista que aparece….
  • label3.caption=”milisegundos”

1 HScroolBar con las siguientes propiedades:

  • HScrollBar1.name=”barrita”
  • barrita.largechange=50
  • barrita.max=2000
  • barrita.min=10
  • barrita.smallchange=10
  • barrita.value=1000

2 TextBox con las siguientes propiedades:

  • text1.text=””
  • text2.text=””
  • text2.enabled=false

1 Timer con las siguientes propiedades

  • Timer1.interval=0

Debe de quedar algo como la figura

El formulario debe de lucir parecido a este

El formulario debe de lucir parecido a este

Ahora debemos de insertar un módulo y dentro de el poner el siguiente codigo.

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)

Lo que hicimos con ese codigo es decirle a Visual que vamos a usar 2 funciones que estan en una libreria externa, las funciones a usar son Out y Inp; ambas alojadas en inpout.dll.

A decir verdad solo usaremos por el momento Out, ya que se encarga de enviar datos por el puerto. Cabe destacar que su uso sera muy simple:

Out(direccion, valor)

Donde:

  • Direccion: Es la direccion que asigna el BIOS  al puerto paralelo, por predeterminado es la 0x378, y es la que se usara en enste tutorial.
  • Valor: Un valor binario que indica que pin del puerto va a enviar el dato.

Un tutorial mas completo de esto esta aqui.

Mas Código.

Vamos por orden, primero tenemos que hacer 2 funciones, una se encargara de encender el led y la otra de apagarlo (mas que obvio verdad?).

Damos 2 clic al formulario y en el area de declaraciones escribimos:

Private encendido, automatico as Boolean
Private Sub enciende()
    Out &H378, 1
    Label2.Caption = "Led Encendido"
    Me.Caption = "Led Encendido"
    encendido = True
End Sub
Public Sub apaga()
    Out &H378, 0
    Label2.Caption = "Led Apagado"
    Me.Caption = "Led Apagado"
    encendido = False
End Sub

Hasta ahi tenemos las dos funciones encargadas de encender y apagar el led, observen como me refiero a la direccion del puerto -&H378- acuerdense que es VB!! no podemos hacerlo como en C que seria 0x378, por que nos da error.

Lo primero qe va a hacer la aplicacion es encender el led, para ello en el load del formulario agregamos:

Private Sub Form_Load()
    Text2.Text = barrita.Value
    enciende
End Sub

Y lo último que hara la aplicacion??? Pues lo contrario!! apagar el led:

Private Sub Form_Unload(Cancel As Integer)
    apaga
End Sub

Para encender el led, tenemos que añadir este codigo en Command1

Private Sub Command1_Click()
    automatico = False
    Timer1.Interval = 0
    enciende
End Sub

Para apagarlo, en Command2:

Private Sub Command2_Click()
    automatico = False
    Timer1.Interval = 0
    apaga
End Sub

Para habilitar el encendido automatico, en Command3:

Private Sub command3_Click()
    automatico = True
    Timer1.Interval = barrita.Value
End Sub

Para que funcione el automatico añadir en el timer:

Private Sub Timer1_Timer()
If encendido Then
    apaga
Else
    enciende
End If
End Sub

Al ejecutar el proyecto el boton de Encender pues enciende el led, el de apagar, lo apaga!!! lo curioso es al dar clic en automatico el led prende y apaga solo, y si movemos la barra de desplazamiento lo hara mas rapido si la movemos a la izquierda y mas lento si la movemos a la dercha, ademas de ver el text3 el intervalo de encendido/apagado exacto en milisegundos.

Creo que es todo, despues pongo otro posto analizando linea por linea el programa.

Créditos:

Este minimanual y la aplicacion que desarrollé estan basadas en el tutorial que presenta “aarondiego2” en su canal de youtube http://www.youtube.com/user/aarondiego2, los créditos del mismo estan a nombre de Ing. Diego Alberto Ortega Carreto.

Mi siguiente proyecto, usando como guía este, sera un programa hecho en VB6 que presente algunas letras y numeracion del 0 al 9 y viseversa en un display anodo comun DA05, yo les tendre noticias.

El autor dela libreria me es desconocido, solo aparece una direccion web en sus propiedades http://www.logix4u.net

Anuncios

6 comentarios en “Encendiendo un led con el puerto paralelo

  1. vgcastelanm dijo:

    Ya tengo un programa que hace eso, todo funciona bien, mi pregunta es: al instalarlo en otra compu de entrada el ciruito tiene encendido todos los leds y no responde a que se debe?

    Gracias

    • Prenden todos por una sencilla razon:

      Algun programa o el propio sistema operativo dejaron la salida del puerto encendida, como si nuestro porgrama hiciera “Out &H378, 255”.

      Si no responde el programa puede ser que la direccion del LPT sea diferente. Este tutorial y muchos ejemplos en Internet asumen que la direccion del puerto es 0x378 y por eso para encender los leds usan Out &H378,valor.

      Si el puerto paralelo de la compu donde testeas no esta integrado en la placa base te puedo asegurar que es otra direccion de puerto.

  2. paul Ventura dijo:

    Muy Buena noche me gusto tu proyecto y pues la verdad me toca hacer la parte del timer pero veo que no dejaste tu proyecto seria mucha molestia que lo subas para poder formarme la idea, muchas gracias de antemano.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s