Esto está destinado para los novatos en el mundo de la programacion, a novatos que les guste la electronica, y que deseen combinar la potencia de las computadoras con la electrónica, o a quienes simplemente les interese manipular o detectar variables físicas desde la pc…
Leelo todo, no es largo lo que pasa es que lo hice en el kwrite de linux (como el bloc de notas de winbugs) por eso me quedo asi =P todo desordenao…
pensamiento….
seria interesante tener por ejemplo, un software que te permita controlar las luces de la casa entera, o un software que te avise que puerta de la casa ha sido abierta, o un software que ayude a tu mamá a regar las platas automaticamente o desde la pc. se acabarian los tipicos regaños de tu mamá… “te la pasas todo el dia en la computadora y no haces nada en la casa”…. ya no te dirian eso, por que desde la computadora, abririas puertas, encenderias
pero sin irnos tan lejos para empezar y no complicarnos tanto con electronica, podemos hacer tambien cosas basicas, aunque la verdad la aplicacion que le des a la programacion, es cuestion de los limites de tu imaginacion 8)
como esto es para novatos, antes que nada hay que conocer cual es el puerto paralelo… (cabe decir que usare imagenes linkeadas, luego las cambio por unas que tengo… )
si no la vez aki esta
es un conector del tipo hembra, que consta de 25 terminales (pines, huecos, como los llames…) se conoce tecnicamente como DB 25…
estos 25 pines estan divididos en tres “bytes” llamados dataport, statusport y controlport, todos
orientados al manejo de una impresora conectada ahi, gestionan desde el control del papel, hasta si la impresora esta ocupada, etc…
vamos a robarnos esas propiedades y a usarlos para nuestros fines
aqui tenemos en detalle los pines del puerto paralelo
si no lo vez
podemos ordenar cada uno de los bytes
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
pin 1 - STROBE pin 14 - AUTO FEED pin 16 - INIT pin 17 - SELECT
la parte de GND, son los tierra del 18 al 25
para saber cual pin es cual, acercate a tu puerto paralelo y te daras cuenta que a la par de cada terminal tiene su numero, cuidado con conectar al revez la cosas xD
en resumen podemos decir esto:
el Dataport se usa como salida el Statusport se usa como entrada el controlport se usa de las dos formas anteriores
es decir que para encender leds, mandar voltaje al puerto usaremos el Dataport, para recibir niveles de voltaje usaremos el Statusport (un ejemplo del uso del statusport es para cuando en un sistema de riego que al terminar de regar, este haga un cambio de voltaje en algun dispositivo (como un rele) se detecta el cambio de cero a 5 voltios y se puede hacer “la magia” de la deteccion de acciones fisicas desde la computadora, en este caso desde visual basic) para empezar es mas que suficiente trabajar con estos dos bytes.
Ahora que ya hablamos un poquito de el puerto, hablemos de la programacion necesaria para trabajar con este puerto…
hay que saber que para trabajar con este puerto debes tener en tu pc, una dll que gestiona toda esta programacion, una puede ser la io.dll y otra puede ser la inpout32.dll en este caso usaremos la inpout32.dll (en realidad no cambia mucho la programacion entre las dos, pero de que palabritas cambian, cambian ojo con eso…)
nos bajamos la inpout32.dll
http://www.google.com.sv/search?hl=es&q=inpout32.dll&btnG=B%C3%BAsqueda+en+Google&lr=
antes de continuar se nos hara necesario sabernos la posicion de memoria del puerto paralelo en nuestro pc o la direccion en memoria, que viene a ser lo mismo… generalmente la direccion en memoria del puerto paralelo se ve asi:
378------dataport 379------statusport 37A------controlport
si no estas seguro puedes hacer varias cosas para saber la direccion, una es durante el power on self test de la bios irte con pause hasta que veas algo como el intervalo de salida/entrada del puerto paralelo , en XP puedes irte a propiedades de mi pc> ficha hardware > administrador de dispositivos > puertos COM y LPT > da click en el + y luego posicionate en el LPT > click derecho > propiedades > dale a la ficha recursos > y ahi tendras el intervalo entrada/salida del puerto…
ocuparemos primero la direccion 378 para poder enviar voltaje al puerto paralelo
ok, creamos un nuevo proyecto, lo ideal a la hora de programar con esta dll es crearte un modulo nuevo
menu proyecto > agregar modulo luego nos saldra una ventana que nos preguntara si es uno existente o uno nuevo, escogemos uno nuevo…
en el modulo vamos a declarar esto:
Public Declare Function Inp Lib “inpout32.dll” _ Alias “Inp32″ (By Val? Port Address? As Integer) As Integer Public Declare Sub Out Lib “inpout32.dll” _ Alias “Out32″ (By Val Port Address As Integer, By Val Value As Integer)
todos entendemos lo que hace este codigo, no sera necesario dar detalles… cabe destacar que la dll debe estar en el directorio del sistema c:/windows/system32 creo que ese es , si no corrobora en tu pc
ok, ahora que tenemos las instrucciones empezamos con un ejemplo sencillo
agrega a tu formulario lo siguiente:
un nuevo textbox un nuevo boton
la instruccion (con la inpout32.dll) para poder enviar datos al puerto paralelo es la mas logica que pueda existir, es Out xD
su sintaxis es asi:
out(puerto, dato)
por ejemplo:
Out &H378, 255
hay que tener en cuenta tambien el tipo de dato que le enviaremos al puerto:
0 2 4 8 16 32 64 … 255
eso seria para enviar voltaje uno por uno a cada pin del dataport o pines de datos que es lo mismo para poner en cero voltios a todos los pines de datos se usa el 0 ( out &H378, 0) para poner un 1 logico(5 voltios) en el pin D1 se usa 2 (out &H378, 2) y asi sucesivamente…. hasta que para poner todos los pines de datos se utiliza el 255 (out &H378, 255)
esto seria un programita elemental con un boton para cada dato:
Private Sub Command1_Click() Out &H378, 1 End Sub
Private Sub Command2_Click() Out &H378, 2 End Sub
Private Sub Command3_Click() Out &H378, 4 End Sub
Private Sub Command4_Click() Out &H378, 8 End Sub
Private Sub Command5_Click() Out &H378, 16 End Sub
Private Sub Command6_Click() Out &H378, 32 End Sub
Private Sub Command7_Click() Out &H378, 64 End Sub
Private Sub Command8_Click() Out &H378, 128 End Sub
Private Sub Command10_Click() Out &H378, 255 End Sub
Private Sub Command9_Click() Out &H378, 0 End Sub
si quisieras enviar un 1 logico a varios pines de datos, unicamente debes sumar los datos:
por ejemplo, para mandar datos a la vez a D1 y a D2 se usaria 2 + 4 , es decir quedaria asi la order:
out &H378, 6
y asi sucesivamente…
si queremos detectar o captar desde el puerto paralelo, entonces hacemos algo asi…
usamos la instruccion inp
aki tienen el ejemplo que yo usaba para practicar que me da flojera modificar =P, pero lo hacia junto a juegos de imagenes para simular…
Private Sub Timer2_Timer() If Image4(1).Visible = True Then Image4(2).Visible = True Image4(1).Visible = False Text2.Text = Str(Inp(Val(&H379))) ‘ aqu puedes notar como el textbox cogia el valor Text2.Refresh If Text2.Text = 207 Then ‘’Msg Box “entrada 15 detectada” Shape1.Fill Color? = &HFF& End If If Text2.Text = 71 Then Msg Box “entrada 11 detectada” End If If Text2.Text = 79 Then Msg Box “entradas 11 y 15 detectada” End If Exit Sub End If If Image4(2).Visible = True Then Image4(3).Visible = True Image4(2).Visible = False Text2.Text = Str(Inp(Val(&H379))) Text2.Refresh If Text2.Text = 207 Then ‘’Msg Box “entrada 15 detectada” Shape1.Fill Color = &HFF& End If If Text2.Text = 71 Then Msg Box “entrada 11 detectada” End If If Text2.Text = 79 Then Msg Box “entradas 11 y 15 detectada” End If Exit Sub End If If Image4(3).Visible = True Then Image4(1).Visible = True Image4(3).Visible = False Text2.Text = Str(Inp(Val(&H379))) Text2.Refresh If Text2.Text = 207 Then ‘’Msg Box “entrada 15 detectada” Shape1.Fill Color = &HFF& End If If Text2.Text = 71 Then Msg Box “entrada 11 detectada” End If If Text2.Text = 79 Then Msg Box “entradas 11 y 15 detectada” End If Exit Sub End If End Sub
ok ahora que lo vieron y se dieron cuenta que es algo amateur xD, les explico… el problema que se me daba a la hora de practicar la deteccion de “eventos” en un circuito electronico, era que no encontraba el evento en visualbasic adecuado para colocar el codigo que se encargaria de gestionarme todo lo que sucederia segun el estado del statusport..
entonces se me ocurrio hacer un “simulador de activacion” es decir como un monitoreo a la activacion…
por ejemplo se “encendien” foquitos(imagenes) en el formulario algo asi:
0=apagado 1= encendido
100 010 001 100 010 001 100 010 001
y aprovechando la secuencia de cambio automatico por medio del timer pude encontrar el evento que me diera la deteccion automatica de la presencia de personas en una zona por medio de sensores conectados por medio de una interfase al puerto paralelo (al statusport)
If Image4(1).Visible = True Then Image4(2).Visible = True Image4(1).Visible = False
cuando la imagen 4(1) fuera visible, la imagen 4(2) se encendia y al instante se apagaba la imagen4(1) y asi sucesivamente…
para la deteccion de codigos del status me apoye de un textbox Text2.Text = Str(Inp(Val(&H379)))
ese me cogia el valor en el statusport que varia segun el estado de sus terminales te genera una combinacion, la cual tienes que manipular segun te convenga y segun la conexion que hayas hecho…
If Text2.Text = 207 Then ‘’Msg Box “entrada 15 detectada” End If
si el codigo era 207 el msgbox lo dice todo…
se puede dar el mismo caso que al enviar datos al puerto, que mandes a dos pines ala vez en ese caso:
If Text2.Text = 79 Then Msg Box “entradas 11 y 15 detectada” End If
todo es cuestion de probar uno a uno las combinacion posibles que te va a generar lo de usar un textbox es nada mas para la hora de practicar, hacer pruebas y copiar los codigos que te genera el statusport.. y si a la hora de hacer tu propia aplicacion te da flojera modificarlo como es mi caso generalmente xD entonces nada mas lo pones invisible y todo igual =)
text2.visible = false ‘=P
Con respecto al aspecto de la seguridad y del cuido del puerto paralelo hay interfases especiales que se encargan de echarte una mano y de cuidar a la vez el puerto paralelo que puedes dañar si no tienes cuidado =P
http://www.google.com.sv/search?hl=es&q=interfase+puerto+paralelo&btnG=B%C3%BAsqueda&lr=
pues, en lo que generalmente se basa una interface para el puerto paralelo en en la amplificacion de salida que lastimosamente la salida directa de corriente del puerto paralelo es muy pobre, y se hace necerio agregar una interfase estabilizadora con buffers o con transistores, y con otro monton de cosas que puedes usar…
Hay muchas paginas que manejan como algo totalmente serio el uso de interfases de pro- tecccion, porque puedes quemar el puerto paralelo, pero si no vas a manejar cosas como motores, u otras cosas que exigen mas, y solo quieres practicar con leds por ejemplo, no es necesaro armar o comprar ua interfase ya que funciona perfectamente aunque siempre hay que tener el debido cuidado de no conectar mal algo…
Espero les ayude a los novatos para que empiecen a trabajar con esto tan interesante que es la manipulacion y deteccion de variables fisicas desde la pc =)
saludox sanchez_antonio13@hotmail.com