LusoRobótica - Robótica em Português
Sistemas específicos => ARM => Raspberry Pi => Tópico iniciado por: luisjustin em 08 de Dezembro de 2017, 00:40
-
volatile int power = 100;
void zero_crosss_int()
{
// Cálculo do ângulo de disparo: 60Hz-> 8.33ms (1/2 ciclo)
// (8333us - 8.33us) / 256 = 32 (aprox)
int powertime = (32*(256-power));
// Mantém o circuito desligado por powertime microssegundos
delayMicroseconds(powertime);
// Envia sinal ao TRIAC para que ele passe a conduzir
digitalWrite(loadR, HIGH);
// Espera alguns microssegundos para que o TRIAC perceba o pulso
delayMicroseconds(8.33);
// Desliga o pulso
digitalWrite(loadR, LOW);
}
meu problema era que não existe a função
delayMicroseconds no pigpio e nem no C o que eu posso fazer para contornar esse problema ?
-
Provavelmente só consegues implementar isso usando as funções de WAVES, pois num sistema operativo como a versão Linux do Pi (que não é Real-Time, se não estou em erro) não consegues garantir timmings a não ser dentro do kernel.
-
Um sistema operativo multiuser como o linux não tem funções de delay no mesmo sentido que o arduino tem, pelo que não deves encontrar um port direto desse tipo de coisa.
Tens a função
#include <unistd.h>
int usleep(useconds_t usec);
Mas é para esquecer esse tipo de resolução, usleep(8.33) não vai acontecer nunca num OS que não seja realtime.
A man page tem a seguinte nota
The usleep() function suspends execution of the calling thread for
(at least) usec microseconds. The sleep may be lengthened slightly
by any system activity or by the time spent processing the call or by
the granularity of system timers.