Ver Mensaje Individual
  #3  
Antiguo 25-06-2013
Novatin Novatin is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 61
Reputación: 12
Novatin Va por buen camino
Hola ecfisa,

Lamento haberme ido "al punto" sin explicar mucho el problema... el retardo lo quiero para generar una secuencia de pulsos por puerto paralelo para un motor del tipo "stepper"; estuve probando con la funcion Delay que puse en el anterior mensaje, pero me di cuenta que no es muy precisa; Luego pase por usar QueryPerformanceCounter() de la siguiente manera:

Código:
LARGE_INTEGER pcFreq; //ENTERO_LARGO de muchos bits.. :D
QueryPerformanceFrequency(&pcFreq); //captura la frecuencia de la CPU
int MicroSec=(pcFreq.QuadPart/1000)*1.3;// 1.3 Microsegundos

void TForm1::miDelay(int MicroSec)
{
  LARGE_INTEGER freqIni; //Variable frecuencia inicial
  LARGE_INTEGER freqFin; //Variable frecuencia final
  QueryPerformanceCounter(&freqFin); //Captura Frecuencia Actual 

  freqIni=freqFin; //Igualando Frecuencia Inicial y final
  while(freqIni.QuadPart/1000<freqFin.QuadPart/1000+MicroSec) //While consume mucho CPU
      QueryPerformanceCounter(&freqIni);
}
y aunque esta funcion es bastante precisa me deja el problema de consumirme muchos ciclos de cpu ...


Lo de la función Sleep, ya la habia probado pero tiene tambien el problema de no ser tan precisa para mover motores stepper...

Fue por eso que me habia planteado como una opción la posibilidad de usar WaitForSingleObject(), que hasta donde entiendo puede generar un retardo sin consumir tantos ciclos de cpu... pero aun no encuentro un ejemplo claro de como usarlo..

PD: El motor stepper requiere aún pulsos por debajo del 1 milisegundo.
Responder Con Cita