elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: [Tutorial] Tortilla + TOR = + privacidad


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Littlehorse, Eleкtro)
| | |-+  Introduccion a la programacion por puertos en visual basic
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Introduccion a la programacion por puertos en visual basic  (Leído 36,631 veces)
BADBYTE-K
Knowledge is power, Diesel-K


Desconectado Desconectado

Mensajes: 2.328


Aprende todo lo que este a tu alkance


Ver Perfil WWW
Introduccion a la programacion por puertos en visual basic
« en: 18 Noviembre 2004, 11:53 »

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... :P)



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  :D


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 :P
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 :P, 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


En línea

agutin1983

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Introduccion a la programacion por puertos en visual basic
« Respuesta #1 en: 18 Agosto 2005, 20:15 »

hola! antes que nada te felicito por el tutorial. quisiera hacerte una pregunta con respecto a ste tema:
yo estoy intentando hacer un "brazo robotico" .....
mediante la intruccion: "Out &H378, 2" le doy votage al pin 2, y en este conecto un optoacoplador para luego activar un relay y encender un motor electrico que hace girar una correa hasta cierto tope. Ahora viene mi problema, yo quiero colocar "algo" en el tope para que cuando llegue ahi me envie una señal a la pc y automaticamente dae la instruccion  "Out &H378, 0" y apagar el motor electrico ya que el dispositivo llego a su meta. Segun lo que explicaste, entiendo que lo puedo leer mediante "Inp &H379". pongo esta insctruccion en un timer y los estaria leyendo a cada segundo hasta que haya un cambio, lo que quiero saber bien es: que valor devuelve y como consigo que haya un cambio, es decir, tengo que dale votage entre (por ej) en pin 15 y gnd?, cuanto es ese voltage maximo?, me da diferentes resultados segun el voltage aplicado ? hay que "cerrar el circuito" entre el pin 15 y gnd? bueno espero que me puedas reponder. saludos


En línea

BADBYTE-K
Knowledge is power, Diesel-K


Desconectado Desconectado

Mensajes: 2.328


Aprende todo lo que este a tu alkance


Ver Perfil WWW
Re: Introduccion a la programacion por puertos en visual basic
« Respuesta #2 en: 19 Agosto 2005, 02:05 »

Hola, este post es viejito, la discusion la desarrollamos aqui:

http://foro.elhacker.net/index.php/topic,48748.0.html

puedes postear tus dudas o verificar las demas respuestas que han sido de mucha ayuda de otros usuarios


saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programación de Puertos del PC (USB, RS232, etc)
Programación General
Z3r0D4Y 1 3,242 Último mensaje 6 Diciembre 2010, 22:55
por Afsoon
Introducción a Visual Studio LightSwitch
.NET
43H4FH44H45H4CH49H56H45H 7 4,110 Último mensaje 16 Agosto 2011, 06:11
por 43H4FH44H45H4CH49H56H45H
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines