porke no lo posteas en programacion?
-ya lo he puesto hace dias, ya va por la page 3 kreo... pero para los que no visitan todos los foros aqui les va...
pues si, esto esta 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 electronica o a quienes simplemente les interese manipular o detectar variables fisicas 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 luces, regarias las plantas, etc...
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 http://www.ctp.ru/images/LPT.jpg
es un conector del tipo hembra, que consta de 25 terminales (pines, huecos, como los llames...)
se conoce tecnicamente como DB25...
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 http://www.rafal.waw.pl/wynalazki/porty/lpt.gif
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
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
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" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal 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
''MsgBox "entrada 15 detectada"
Shape1.FillColor = &HFF&
End If
If Text2.Text = 71 Then
MsgBox "entrada 11 detectada"
End If
If Text2.Text = 79 Then
MsgBox "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
''MsgBox "entrada 15 detectada"
Shape1.FillColor = &HFF&
End If
If Text2.Text = 71 Then
MsgBox "entrada 11 detectada"
End If
If Text2.Text = 79 Then
MsgBox "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
''MsgBox "entrada 15 detectada"
Shape1.FillColor = &HFF&
End If
If Text2.Text = 71 Then
MsgBox "entrada 11 detectada"
End If
If Text2.Text = 79 Then
MsgBox "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
''MsgBox "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
MsgBox "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 interfase 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
[/color]