Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/07/2007 #1


duda sobre paralelo LPT
Tengo un pequeña duda a la cual no le he podido encontrar respuesta ;lo que necsito hacer es super sencillo para ustedes pèro para mi no esta muy claro todavia es sacar 1 y 0 por el puerto LPT y un software en visualbasic 6.0.

lo que necesito es que cada pin de dato (2 - 9 ) prenda un led osea serian 8 leds he intentado de todas la manera posibles miren como tengo el modulo de mi programa en visual es el siguiente :

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)
y cuando lo ejecuto me sale el siguiente error Visual Basic ha detectado un problema y debe cerrarse. he bajado ya como 10 archivos dll inpout32.dll pero nada la ruta donde los estoy metiendo es la siguiente C:\WINDOWS\system32 creo que es ahi y sin embargo sigue pasando lo mismo .

si me pueden ayudar y decirme como hacer esto para que solo prenda los leds que necesito en mi protoboard les agradeseria el software es muy sencillo tiene 8 botones cada uno para cada led

muchas por la atencias les agradesco el poderme ayudar

el codigo que tengo para el bonton es el siguiente
Private Sub Command1_Click()
For x = 0 To 7
valor = 2 ^ x
Out &H378, valor
For y = 1 To 1000000 '''este seria el retardo para que prendan
v = v + 1
Next y
Next x
Out &H378, 0
End Sub
alguien me lo dio pero me dijo que era para generar una secuencia en los leds yo solo necesito es que prenda solo uno en cada boton
24/07/2007 #2


Ok!, primero que nada no te hagas nada porque no estas haciendo nada mal! el codigo parece estar correctisimo, el problema podria estar en el puerto, su direccion (aunque parece estar bien!) de cualquier manera, lo mas seguro es que sea tu version de windows, recuerda que para Windows XP, 2000 y NT, controlar los puertos es una ruleta, aveces anda y aveces no, yo en DOS y windows 98 nunca tuve problemas!
De ultima probalo haciendo el programa en C, te comento que yo al tema, bajo C lo tengo muy trabajado, asi que si queres alguna ayuda no dejes de preguntarme!
suerte!
24/07/2007 #3


Que tal ?

Maritto

mira gracias por tu ayda pero la verdad nose trabajar en C.

solo se trabajar en VB me es mucho mas facil ya que ya tango la interfaz grafia solo me falta el codigo para poder manejar el puerto y los botones.

que puiedo hacer sera problema de la board o de el windows

uso windows XP SP1 y una board msi k8cgm-v
24/07/2007 #4


Hola sebastianvz

creo que tu problema es que estas utilizando una dll que no es compatible con WIN XP, la dll que deberias utilizar es IO.dll, yo me encontre alguna vez con ese mismo problema, pero encontre la IO.dll, la he utilizado siempre y no he tenido ningun problema, ahora bien, seria bueno que empieces a utilizar C, te daras cuenta de las ventajas, en este link puedes encontrar la dll y la definicion de funciones:

http://www.pablin.com.ar/computer/programa/vb/iodll.htm

espero que te sea de ayuda.
24/07/2007 #5


mira lo que pasa es que ya tengo esta dll instalada en mi equipo pero nose que cambiarle a mi codigo.

cambio mi modulo para que funcione con esta libreria nuvea con la io.dll

Public Declare Function Inp Lib "io.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)

que mas tendria que cambiar
24/07/2007 #6


en el link que me diste aparace este codigo

Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Private Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer
Private Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Private Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Private Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Private Declare Function IsDriverInstalled Lib "IO.DLL" As Boolean

ese lo puse en un modulo ahora lo que quiero es saber como hago para prender cada led con un boton diferenta haber si con esta libreria me funcio ojala que si esoty al borde de la locura

gracias
24/07/2007 #7


ok sebastianvz mira lo que tienes hasta ahora es la declaracion de funciones que se encuentran dentro de la dll, ahora lo que tienes que hacer es utilizarlas, para esto debes tener claro que existen variables boolean, byte, integer y long, en realidad existen mas pero para el caso solo necesitamos estas, si examinas la declaracion de las funciones te daras cuenta que de cada funcion se reciben variables de este tipo, esto nos indica cuantos bit vamos a leer, esto para las funciones de lectura,. para las funciones de escritura podras ver que lo unico que se necesita es pasarle como argumento a la funcion la direccion del puerto y el valor que se va a escribir, a continuacion te explico esto detalladamente y con ejemplos:

para leer un byte del puerto, por ejemplo debes utilizar la funcion portin, veras que la declaracion de la funcion en el modulo aparece asi: PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
asi que debes utilizarla asi en tu formulario o dond quieras:

dim valorpuerto as byte
valorpuerto = portin(888) 'suponiendo que la direccion del puerto que quieres leer es la 888 o en hexa la 378


ahora bien, si lo que quieres es escribir un byte en el puerto, debes hacerlo con la funcion portout, veras que la declaracion de esta funcion es asi:
PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)

asi que si quieres escribir un 15 en el puerto, simplemente debes hacer esto:
Portout(888,15)

veras que existen otras funciones, estas funciones lo que hacen es leer o escribir 2 o 4 bytes a la vez, o leer o escribir 1 bit a la vez, te voy a mostrar como funcionaria la lectura y escritura de un bit a la vez

si quieres escribir un 1 en el bit 5 de la direccion del puerto utiliza la funcion SetPortBit, tu codigo seria asi:

SetPortBit(888,5)

si por el contrario lo que quieres es escribir un 0 en el bit 5 de la direccion del puerto utiliza la funcion ClrPortBit , tu codigo seria asi:

ClrPortBit(888,5)

ahora, si lo que quieres es leer un bit de tu puerto, hazlo con la funcion GetPortBit, por ejemplo: si quicieras leer el bit 5 de tu puerto, lo harias asi:

dim valorbit as boolean
valorbit = GetPortBit(888,5)

ten en cuenta que el puerto paralelo tiene bytes de datos, de estado y de control, y que cada uno tiene una direccion diferente, por ejemplo si no estoy mal si utilizas el LPT1, tu direccion base seria la 888 o &H378 en hexa, asi que el byte de datos seria el &H378, el byte de estado seria el &H379 y el byte de control el &H37a

espero que esto te sea de ayuda.
24/07/2007 #8


nicoloaiza, amigo muchisimas gracias ahora si tengo muy calro como empezar a hacer mi programa te lo agradesco de verdad.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.