Autor Tema: Se puede hacer retardos menores a un milisegundo en VB ?  (Leído 12723 veces)

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

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Se puede hacer retardos menores a un milisegundo en VB ?
« en: 04 de Agosto de 2007, 14:14:46 »
Buenas hasta ahora e usado solo los retardos por medio del timer que me da el visual el cual se debe de ingresar el valor en milisegundos pero no en usegundos , la cuestion es que deseaba desarrollar un programa para adquirir señales a mayor velocidad por ejemplo cada 50us , no se si sera mucho pedir al visual o es necesario hacerlo mediante otro lenguaje de mayor potencia como el visual c o el delphi , delos cuales prefiero el delphi por temor al primero :shock:, claro que eso en caso que con el visual basic  no tenga remedio o si habra una libreria especial aparte de los temporizadores para estos retardos , les agradecere alguna opinion al respecto :mrgreen:

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #1 en: 06 de Agosto de 2007, 03:22:08 »
Hola:

Puedes hacer un bucle DUMMY, con el número de iteraciones necesarias para que demore cierto tiempo, lo puedes hacer con un FOR.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #2 en: 16 de Agosto de 2007, 15:33:42 »
Hola electronando.

No hay forma de hacerlo preciso. Lo que te sugiere Lord es una solución,pero todo depende de la PC, de la carga de programas que tengas en ese momento ejecutandose, y de muchisimos factores más.

No sé que tanta precisión necesitás.
Ah! Y te comento que el VB miente. El VB no es capaz de controlar Timers con intervalos menores a los 52ms.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #3 en: 16 de Agosto de 2007, 16:36:17 »
Hola:

Bruno, tu que ere maestro de maestros en programacion de PC, ahora que estamos en esto de los retardos, tienes idea de como se puede hacer para generar una frecuencia de 50Hz para controlar un servo desde el PC por el LPT?


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #4 en: 16 de Agosto de 2007, 17:26:19 »
Hola Gio.

¿Te estás refiriendo a VB6?

Para generar una señal de 50Hz podés usar la llamada a la API GetTickCount para contar los milisegundos transcurridos, pero dividir 1ms en 180 partes ya no es tan sencillo. Se pierde precisión.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #5 en: 16 de Agosto de 2007, 18:56:03 »
Hola

Otro método de conteo de tiempo es la función Timer, y no me refiero al objeto timer.

Un pequeño ejemplo...

dim inicio
dim tiempotranscurrido

inicio = Timer 'empieza a contar usando función Timer
'inicio tendrá un valor que indica el tiempo desde las 12am hasta el momento en que se llama

'después de un rato si se llama otra vez Timer entregará un nuevo tiempo
'solo hay que sacar la diferencia

tiempo = Timer - inicio 'entrega la diferencia en fracciones decimales y enteros si se da el caso


Yo usé Timer para saber cuánto tiempo le toma al pic enviar una trama de datos por el puerto serial.

Y Bruno tiene razón sobre la falla del objeto timer... nunca se ejecuta cuando debe hacerlo, yo intenté hacer un conteo con el objeto y da tiempos todos ilógicos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #6 en: 16 de Agosto de 2007, 19:57:28 »
Si migsantiago, pero ojo que el timer trabaja contando centesimas de segundo(es decir, de a 10ms) y no creo que eso le alcance a Gio.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #7 en: 16 de Agosto de 2007, 20:17:39 »
Jaja sí  :lol:

Es lo malo de los ambientes multitareas... windows siempre anda ocupado atendiendo mil y un procesos a la vez.

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #8 en: 20 de Agosto de 2007, 21:15:52 »
Hola:

Pues en efecto Bruno,  10ms es mucho, ya que necesito entre 1ms y 2ms para que el servo varíe su posición, como es eso de los ticks que tu mencionas?

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #9 en: 16 de Octubre de 2007, 01:07:05 »
Yo tambien estoy necesitando generar un retardo de 1ms, pero no encuentro forma, ya lo resolvieron?? Me pueden decir a mi tambien  :mrgreen:

Intente hacer esto:

Código: [Seleccionar]
Private Function Retardo(Tiempo As Integer)
Timer1.Interval = Tiempo
Bandera = 0
Timer1.Enabled = True
    Do While Bandera = 0
    Loop
End Function


Private Sub Timer1_Timer()
Bandera = 1
Timer1.Enabled = False
End Sub

Y usarlo así:
Código: [Seleccionar]
Retardo (1)

pero el programa me deja colgado el Windows..



Encontré Esto

Usa una Api de Windows y permite crear retardos desde 1ms.

Solo hay que crear un Modulo Bas
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Hay que llamarla asi:
Sleep 2000 'Llama a la API Sleep (2000 milisegundos = 2 segundo de pausa).



SALUDOS!!
« Última modificación: 16 de Octubre de 2007, 01:30:14 por PICmouse »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #10 en: 16 de Octubre de 2007, 11:38:27 »
Hola, debido a que los Pentium tiene varias unidades de ejecución y los simples retardos calculando el tiempo de ejecucion de las instrucciones ya no son validos en este tipo de procesadores, Win32 provee dos funciones para que el calculo de tiempos sea preciso. Estas son :
  • QueryPerformanceFrequency
  • QueryPerformanceCounter
Hay mucho info en la Web donde explica su uso para medir tiempos con mucha precision, con respecto a generar un retardo especifico, tal vez sea conveniente crear un Thread con resolucion "real time" y ahi aplicar el metodo basado en las 2 funciones anteriores.
En los operativos Win 9X/Me se podia utilizar unas funciones reservadas que paran el "scheduler" de windows

  • int 2F Function 1681 - Begin critical Section
  • int 2F Function 1682 - End critical Section
En las listas de Ralf Brown figuran el modo de empleo, pero la idea es que el codigo entre estas dos llamadas no es interrunpido por ningun thread, pero como dije antes no deberia funcionar en Windows NT/2000/XP....
Bueno eso es todo, espero haber aportado algo...
Salu2!


Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #11 en: 16 de Octubre de 2007, 15:58:53 »
Ernesto el Sleep también deja en un lazo eterno hasta que cumpla el plazo del tiempo, aunque se me ocurre esto (no lo he probado):

Código: Visual Basic
  1. ...
  2. Sleep(2000)
  3. DoEvents
  4. ...

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #12 en: 16 de Octubre de 2007, 16:57:16 »
El DoEvent no se colocaria antes de decirle Sleep???

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #13 en: 16 de Octubre de 2007, 17:08:38 »
que va, lo acabo de probar, no funciona ni antes ni después

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #14 en: 16 de Octubre de 2007, 17:20:10 »
 :D :D :D :D :D, Bueno pero pasa como con el PIC, ideal para retardos muy pequeños, ya mas grandes es mejor usar el TIMER.

SALUDOS!!!


 

anything