PDA

Ver la Versión Completa : Leer un evento de GPIO


rseliman
22-10-2018, 17:26:59
Hola a todos , estoy usando una raspberry pi y programando con lazarus ...estoy leyendo un evento de un caudalimetro con


Caudal := Main.GPIO.PinValue[PinCaudal1];

if Caudal = TPinValue.Low then CauState :=0 else CauState :=1;

La pregunta es la siguiente ...los tiempos del caudalimetro son cortos , y tratando de leerlo con un timer cada 1 milisegundo , me pierde pulsos , o sea ...deberia leer 4 pulsos y me lee solo dos , alguien me da una mano de como leerlo de otra forma que no sea con un timer , sino que sea tipo interrupcion ??

Mil gracias a todos

Casimiro Notevi
22-10-2018, 18:48:53
Yo haría una pregunta: ¿Realmente es absolutamente necesario leer el valor 1000 veces por segundo?

rseliman
22-10-2018, 19:29:25
Yo haría una pregunta: ¿Realmente es absolutamente necesario leer el valor 1000 veces por segundo?

el tema es que si no estoy leyendo justo en el flanco de subida del pulso lo pierdo ...por eso pregunto por una interrupcion para poder leer ese flanco

Gracias

Casimiro Notevi
22-10-2018, 20:01:11
Me temo que no será exacta la lectura cada milisegundo, siempre pueden haber oscilaciones que depende de varios factores, reloj del procesador, ocupación de recursos por otros softwares e incluso del sistema operativo, etc.

rseliman
22-10-2018, 20:21:49
Me temo que no será exacta la lectura cada milisegundo, siempre pueden haber oscilaciones que depende de varios factores, reloj del procesador, ocupación de recursos por otros softwares e incluso del sistema operativo, etc.


Asi es ....no se te ocurre una forma de soucionar el problema ??

Muchas gracias

Casimiro Notevi
22-10-2018, 20:33:13
Se ha tratado el tema varias veces, no lo encuentro ahora mismo, aunque una búsqueda por internet me devuelve unos enlaces que puedes ir probando:
Uno (https://stackoverflow.com/questions/26045024/high-precision-timer#26046445), dos (https://www.thoughtco.com/accurately-measure-elapsed-time-1058453), tres (https://stackoverflow.com/questions/26045024/high-precision-timer), cuatro (https://www.pascalgamedevelopment.com/showthread.php?2353-Fastest-timer-component-for-Delphi).

Casimiro Notevi
22-10-2018, 20:35:30
Haz una búsqueda en los foros por QueryPerformanceFrequency

Mira este (http://www.clubdelphi.com/foros/showthread.php?t=83121&highlight=QueryPerformanceFrequency) hilo.
Y este (http://www.clubdelphi.com/foros/showpost.php?p=144561&postcount=5) otro.

Casimiro Notevi
22-10-2018, 20:41:21
Mira este (http://www.clubdelphi.com/foros/showthread.php?t=83121&highlight=QueryPerformanceFrequency) hilo.
Y este (http://www.clubdelphi.com/foros/showpost.php?p=144561&postcount=5) otro.
En esos dos hilos resolverás tu problema.

rseliman
23-10-2018, 01:26:06
En esos dos hilos resolverás tu problema.

Muchas gracias ...pruebo y despues comento

Saludos