Visual Basic - problema con timer

Life is soft - evento anual de software empresarial
 
Vista:

problema con timer

Publicado por Rigoberto Mercado (8 intervenciones) el 16/09/2006 05:34:58
Que tal, pues mi problema es el siguiente:
Estoy trabajando con el puerto paralelo en especifico con una interfase de potencia controlada por LPT, el problema que tengo es que al diseñar el software me da problemas ya que necesito dejar un pin activado o sea "D0" y que "D1" este cambiando de estado en diferentes intervalos de tiempo creando asi un tren de pulsos, "D2" entra en sincronia despues de 25 segundos, y asi sucesivamente el problema que tengo es que cuando inicia el programa el "D0" se activa correctamente pero cuando entra el "D1" me apaga el "D0" y este debe estar encendido siempre, lo malo es que nunca habia usado el control timer que es donde creo esta el problema, pongo una parte del codigo por si alguien sabe como evitar que se desactive el "D0" cuando entra cualquier otro ya sea "D1" o "D2". Si tienen algo de informacion tambien me la pueden mandar al correo: [email protected], [email protected] agradeciendo de antemano la ayuda recibida.

Private Sub Form_Mousemove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1 = 0
End Sub

Private Sub Label1_Change()
If Label1.Caption = 1 Then
Out &H378, 1
Label2.Caption = "Encienden luces del dragon"
Label1.BackColor = &HFF&
End If
If Label1.Caption = 6 Then
Out &H378, 0
Label2.Caption = "Cambio"
Label1.BackColor = &H8000000F
End If
If Label1.Caption = 7 Then
Out &H378, 1
Label2.Caption = "Encienden luces del angel"
Label1.BackColor = &HFF&
End If
If Label1.Caption = 12 Then
Out &H378, 0
Label2.Caption = "Cambio"
Label1.BackColor = &H8000000F
End If
If Label1.Caption = 13 Then
Out &H378, 1
Label2.Caption = "Encienden luces del cerro"
Label1.BackColor = &HFF&
End If
If Label1.Caption = 18 Then
Out &H378, 0
Label2.Caption = "Cambio de luz"
Label1.BackColor = &H8000000F
End If
If Label1.Caption = 19 Then
Out &H378, 1
Label2.Caption = "Encienden luces de la imagen"
End If
If Label1.Caption = 22 Then
Out &H378, 0
Label2.Caption = "Apaga las luces"
End If
End Sub

Private Sub Timer1_Timer()
If Timer1.Interval = 500 Then
Label1 = Val(Label1) + 0.5
End If
End Sub

El puerto sise controla bien solo lo del timer es lo que no queda ya que apaga el PIN ("D0") que este encendido
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con timer

Publicado por SemperFiMXL (25 intervenciones) el 16/09/2006 12:21:11
En cuanto a lo del timer, solo pones en la propiedad .Interval los milisegundos que quieras como lapso. No hace falta preguntar dentro del evento si el .Interval es 500, a menos que lo modificaras dentro del mismo evento (o en alguna otra parte de tu codigo) y quisieras conocer que valor tiene para para saber que ejecutar dependiendo del valor que tenga asignado.
Si siempre va a tener el valor de 500, entonces simplemente lo dejas asi:

Private Sub Timer1_Timer()
Label1 = Val(Label1) + 0.5
End Sub

Respecto al asunto de que se te apaga el D0, en tu codigo estas ejecutando "Out &H378, 0" cada cierto valor del Label1. Al enviar 0 al puerto, con esto le indicas que apague todos los pines de datos (del D0 al D7). Luego, en los demas lapsos envias siempre "Out &H378, 1" y esto solamente enciende el pin D0. No veo, en el codigo que pusiste, que envies nunca algun valor para encender algun otro de los pines.

Para encender el pin D0, enviar "Out &H378, 1"
Para encender el pin D1, enviar "Out &H378, 2"
Para encender el pin D2, enviar "Out &H378, 4"
Para encender el pin D3, enviar "Out &H378, 8"
Para encender el pin D4, enviar "Out &H378, 16"
Para encender el pin D5, enviar "Out &H378, 32"
Para encender el pin D6, enviar "Out &H378, 64"
Para encender el pin D7, enviar "Out &H378, 128"

Para encender el pin D0 y el D1, enviar "Out &H378, 3" (suma de D0+D1)
Para encender el pin D0 y el D2, enviar "Out &H378, 5" (suma de D0+D2)
Para encender el pin D1 y el D2, enviar "Out &H378, 6" (suma de D1+D2)

Para encender D0, D1 y D2, enviar "Out &H378, 7" (suma de D0+D1+D2)

Y asi sucesivamente, hasta el limite de 255 para encender del D0 al D7 ...

Para apagar todo los pines, "Out &H378, 0"

Espero te sirva de algo ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con timer

Publicado por Rigoberto Mercado (8 intervenciones) el 16/09/2006 18:11:07
Gracias por la ayuda SemperFiMXL ya modifique el codigo con las opciones que me mencionas pero la falla continua, lo que quiero es que varios pines esten siempre encendidos y uno o dos sean intermitentes ¿crees que esto sea posible? si tienes pora ahi algun ejemplo te lo agradeceria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma los pines necesarios, no envies 0 (cero) !!!

Publicado por SemperFiMXL (25 intervenciones) el 18/09/2006 08:56:39
Crei que habia sido claro, pero veo que no...

Lo que requieres es enviar "Out &H378, X" donde "X" es la suma de los pines que quieres encender. Los pines cuyo valor no este incluido en la suma representada por "X" se apagaran y lo que si esten incluidos en la suma, quedaran encendidos. No necesitas enviar "0" para apagar los que tenias previamente encendidos, pues esto causa que se apaguen todos los pines, y no es eso lo que quieres...

Prueba con esto, como ejemplo...

Private Sub Command1_Click()

'Encendemos pines D1, D2 y D5 (suma 2+4+32=38)
Out &H378, 38
Call Pausa() ' 2 Segundos, ver funcion mas abajo ...

'Encendemos pines D1, D2 y D3 (suma 2+4+8=14)
Out &H378, 14
Call Pausa() ' 2 Segundos, ver funcion mas abajo ...

'Encendemos pines D1, D2 y D7 (suma 2+4+128=134)
Out &H378, 134
Call Pausa() ' 2 Segundos, ver funcion mas abajo ...

'Encendemos pines D0 al D7 (suma 1+2+4+8+16+32+64+128=255)
Out &H378, 255
Call Pausa() ' 2 Segundos, ver funcion mas abajo ...

'Encendemos pines D0 al D2 (suma 1+2+4=7)
Out &H378, 7
Call Pausa() ' 2 Segundos, ver funcion mas abajo ...

'Finalmente apagamos todos los pines (valor = 0)
Out &H378, 0
Call Pausa() ' 2 Segundos, ver funcion mas abajo ...

End Sub

Private Sub Pausa()
Dim nSeconds As Integer

nSeconds = TIMER()
Do While TIMER() < nSeconds + 2
Loop

End Sub

'''''''''''''
Observa que nunca estoy enviando el valor de 0 (cero) para apagar pines previamente encendidos, sino hasta el final, para apagarlos todos.

Observa asi mismo, que los pines D1 y D2 siempre estan encendidos durante el ejemplo, pues su valor (2 y 4) estan incluidos en cada "suma" que se envia al comando Out ...

Ahora si, espero se entienda ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Suma los pines necesarios, no envies 0 (cero) !

Publicado por rigoberto mercado (8 intervenciones) el 18/09/2006 20:39:06
Todo listo ya esta entendido solo que habia pequeñas confuciones pero ya quedaron claras se agradece la ayuda SemperFiMXL. Estamos en contacto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar