Pulsos rapidisimos al puerto paralelo

Iniciado por SOMBRIO, 7 Enero 2010, 19:10 PM

0 Miembros y 1 Visitante están viendo este tema.

SOMBRIO

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
IRQL less or equal

ABDERRAMAH

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.

SOMBRIO

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
IRQL less or equal

Meta

Que curioso, estoy creando ahora mismo una interfaz 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]
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

SOMBRIO

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 
IRQL less or equal