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

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

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #15 en: 16 de Octubre de 2007, 17:29:04 »
No funciona porque Sleep freeza la aplicación, por eso no sirve llamar a DoEvents antes ni despues.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #16 en: 16 de Octubre de 2007, 23:58:08 »
jeje a este ritmo es mejor conectar un pic al puerto paralelo e indicarle que maneje directamente el servomotor, Windows no puede controlar tiempos con tanta precisión, es probable que solo por hardware se pueda hacer.

Esperemos que den con la solución  :mrgreen:

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #17 en: 17 de Octubre de 2007, 09:52:20 »
Aca hay una nota de aplicaciíon que muestra la implementacíón de un Timer de alta precision, la nota esta escrita en C++, pero creo que puede ser traducida a Visual Basic.

http://www.codeguru.com/cpp/w-p/system/timers/article.php/c5759/

Salu2 !

Desconectado Gorgonas

  • PIC12
  • **
  • Mensajes: 81
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #18 en: 17 de Octubre de 2007, 10:08:04 »
Hay formas de hacerlo tanto en vb6 como en otros lenguajes, pero como dijo bruno no tiene ninguna precision, puesto que la ejecucion de cualquier programa en el ordenador depende de muchos factores que pueden ralentizar la aplicacion por periodos de tiempo que aparentemente no se aprecian, pero hablando de us claro que se notaria.

Desde mi punto de vista trabajar por debajo de 1ms o incluso tiempos algo mayores, es imposible a traves del pc.

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #19 en: 17 de Octubre de 2007, 10:30:44 »
La nota de aplicación habla de una resolucion minina de 1 ms con una precision del 5 % que puede ser inadecuada en algunas aplicaciones, la otra alternativa muchisimo mas costosa en implementación es hacer un "driver" que corra en otro ring mas cercano al microkernel, pero como dije antes la implementación es bastante complicada.
Salud2!

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #20 en: 18 de Octubre de 2007, 15:09:28 »
Leyendo la nota que menciona RICHI777 me ha dado por buscar las api timeSetEvent en el Apiguide y me he conseguido con que hay un ejemplo:

High Performance Timer

"Descripción:
The timeSetEvent function starts a specified timer event. The multimedia timer runs in its own thread. After the event is activated, it calls the specified callback function or sets or pulses the specified event object."


y aquí el fuente que dan:

Código: Visual Basic
  1. 'This project requires a Form and a Module
  2. 'On the form, there should be one command button (Command1)
  3. 'and one Timer (Timer1)
  4.  
  5. 'In the form:
  6. Option Explicit
  7. Private Sub Form_Load()
  8.     'KPD-Team 2001
  9.    'URL: http://www.allapi.net/
  10.    'E-Mail: KPDTeam@Allapi.net
  11.    Command1.Caption = "Start"
  12. End Sub
  13. Private Sub Form_Unload(Cancel As Integer)
  14.     'Stop the timers if they're still counting
  15.    timeKillEvent hMMTimer
  16.     Timer1.Enabled = False
  17. End Sub
  18. Private Sub Timer1_Timer()
  19.     'increment VBTimer
  20.    VBTimer = VBTimer + 1
  21. End Sub
  22. Private Sub Command1_Click()
  23.     If Command1.Caption = "Start" Then
  24.         'Start both timers
  25.        Timer1.Interval = 1
  26.         Timer1.Enabled = True
  27.         hMMTimer = timeSetEvent(1, 0, AddressOf TimerProc, 0, TIME_PERIODIC Or TIME_CALLBACK_FUNCTION)
  28.         Command1.Caption = "Stop"
  29.     Else
  30.         'Stop both timers
  31.        timeKillEvent hMMTimer
  32.         Timer1.Enabled = False
  33.         Command1.Caption = "Start"
  34.         'Show result
  35.        MsgBox "Timer1_Timer was called " & VBTimer & " times;" & vbNewLine & "TimerProc was called " & MMTimer & " times."
  36.         VBTimer = 0
  37.         MMTimer = 0
  38.     End If
  39. End Sub
  40. 'In a module
  41. Option Explicit
  42. Public Const TIME_ONESHOT = 0  'Event occurs once, after uDelay milliseconds.
  43. Public Const TIME_PERIODIC = 1  'Event occurs every uDelay milliseconds.
  44. Public Const TIME_CALLBACK_EVENT_PULSE = &H20  'When the timer expires, Windows calls thePulseEvent function to pulse the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
  45. Public Const TIME_CALLBACK_EVENT_SET = &H10  'When the timer expires, Windows calls theSetEvent function to set the event pointed to by the lpTimeProc parameter. The dwUser parameter is ignored.
  46. Public Const TIME_CALLBACK_FUNCTION = &H0   'When the timer expires, Windows calls the function pointed to by the lpTimeProc parameter. This is the default.
  47. Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
  48. Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
  49. Public VBTimer As Long, MMTimer As Long
  50. Public hMMTimer As Long
  51. Sub TimerProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, ByVal dw1 As Long, ByVal dw2 As Long)
  52.     'Increment MMTimer
  53.    MMTimer = MMTimer + 1
  54. End Sub

lo que no me queda claro es cuanto tardaría la máquina virtual en ejecutar una línea en vb, porque habría que añadirle ese tiempo.

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

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #21 en: 19 de Octubre de 2007, 14:37:54 »
recapitulando: ¿retardo en vb menos de 1ms? no lo creo a menos que trabajemos en ensamblador, en todas las apis que he mirado estan por encima del ms

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 #22 en: 19 de Octubre de 2007, 16:41:11 »
SIP, lastima, Procesador a 4GHz y no somos capaces de hacer un carajo retardo de 1us jajajaja  :D

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Se puede hacer retardos menores a un milisegundo en VB ?
« Respuesta #23 en: 05 de Mayo de 2008, 16:40:25 »
Holaaaaa:

Aunque admito no entender muy bien todo este rollo, me interesa el tema.
Buscando e indagando por varios sitios encontré algo en C y Asembler y esto en VB.
MicroSegundos

Está en inglés y tiene un ejemplo al final de la página. Son Cuatro páginas de información
que deberían leer.

Hice varias pruebas con un archivo en .c y .asm llamado uclock, pero me pinto una paloma volando
y no hubo forma de compilarlo. El uclock lo usan para ese oficio desde hace años atrás.

Espero te sirva Sr. LordLafebre. Y si te llega a funcionar, solo dejanos saber por favor.


Bye('_')
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.


 

anything