Hola El tema del que les quiero hablar es para los que usamos el puerto lpt en vb6 y queremos leer datos desde el statusport con la libreria inpout32.dll
El problema con el que me tope es que lee super facil
statusport = Inp(&H379)
y esto lo leemos cada intervalo de tiempo con el timer puesto en cierto intervalo
timer1.interval= 50 o 80 o 100 o 20 diferentes valores
pero esto falla cuando leeemos valores enviados rapidisimo por ejemplo un pagador de monedas las revoluciones de un motor etc..
falla por que cuando vuelve a leer el statusport este ya cambio y volvio a la normalidad es decir yo quiero leer unos 1 y mi aparato a medir motor ya mando un 101 en lo que mi timer salto en ese intervalo y leyo un solo 1
o bien el segundo caso el motor trabajo mas lento y el timer ya leyo 3 intervalos y este motor solo esta en 1/16 del giro si en ese 16 de giro prende o acciona algo y mi pc debe leer cada que lo acciona otra vez falla por que el timer lee 3 lineas marcando que ya dio 3 tres unos "1" o dos o 4 etc.. y el motor no ha dado ni un 1 esta en 00000000
no se si me explique pero quien haya tenido este problema me entendera a la perfeccion
lo ideal para resolver esto seria que el statusport solo cambiara cuando cmabia su lectura sin hacer intervalos de tiempo para leerlo
Bueno pues para resolverlo se me ocurrio algo la verdad muy facil con el mismo timer este solo debe cambiar una vez que lea un cambio total de 360 grados es decir un 0 y un 1 y no solo un 1 o un 0 como es acostumbrado
ejemplo de mi programa usando un etado de lectura de 11101
f variable usada para crear contador
accion prender apagar algo despues de que de x giros en los que mi programa decide despues de cada que tanto intervalo de giro de 360 grados del motor acciono algo
formload()
Out &H378, 15 "mitad corriente mitad tierra ideal para un transistor y un rele"
timer1.interval=20 "emasiado pequeño como para que se le vaya algo"
timer1_timer()
statusport = Inp(&H379)
If (statusport = 143) And d = 0 Then
d = d + 1
End If
""ahi ley 0001
If (statusport = 111) And d > 0 Then "111 es decimal binario es 11101"
t = 1
f = (f - t)
If f > 0 Then
Label1.Caption = (f)
d = 0
Else
Out &H378, 255
WindowsMediaPlayer1.URL = "C:\e.mid"
Label1.Caption = "0"
Picture9.Visible = False
d = 0
End If
End If
solo se activo si dio el cambio completo
Se los dejo y si algun dia chocan con este problema les sea de ayuda ya que a mi me funciono
La idea principal es reducir el intervalo del timer muy pequeño y solo leer el dato despues de que haya sido totalmente cambiado
por ejemplo
10
110
001
01
0001
1110
leo el valor hasta que este cambia
Saludos
Joder, yo hubiera pensado en hacerlo por hardware, como los teclados que tienen un minicache de puro hardware que manda las órdenes pendientes en órden. Pero obviamente tu método es mucho mejor, más barato y no lo se, pero posiblemente más ligero.
si se reduce mucho el costo yo tambien pense en montarle un pic y que este mandara los pulsos mas lentos y constantes para que la pc los pudiera leer pero el solo hecho de meter el pic ya es un incremento de tiempo trabajo esfuerzo y mas tosco
Saldudos amigo
Que curioso, estoy creando ahora mismo una interfaz (http://www.forosdeelectronica.com/f26/interfaz-puerto-paralelo-29436/) para controlar el puerto paralelo con Visual C#. Cuando acabe, lo haré uno para Visual C++ y el otro para Visual Basic .net
[youtube=425,350]http://www.youtube.com/watch?v=qHVsolpOPXQ[/youtube]
Se ve muy coqueto tu programa pero solo escribe ? o tambien lee datos ?
tengo una aplicacion llamada vbtoconverter totalmente parcheado y pasa muy bien de un lenguaje a otro si lo necesitas para tu proyecto te lo paso avisame
voy a poner unas fotos de el sistema terminado para que veas el motor que use en mi proyecto y el uso que tiene use un fototransistor para conocer el intervalo
del giro del motor en el que se encuentra
Saludos amigo