18-08-2018, 17:09
Faktycznie tą bibliotekę można sobie w du.... wsadzić. Jak funkcja
nie będzie wywoływana odpowiedni często to wszystko się posypie. Kolejny dowód, że Arduino to zabawka.
Wystarczy skonfigurować timer na przerwania co np 1ms:
oraz wektor obsługi przerwania:
W przerwaniu możemy sobie wywoływać funkcje co 100ms, np tak:
Dodając inne dzielniki, np 10, 300ms mamy inne interwały czasowe.
Program jest banalny, prostszy niż te czary mary w timer.h, itp.
PS
Pokazałem na T0 ale on jest używany przez Arduino, dlatego trzeba wybrać inny. Ponadto kod jest na archaiczny Meag16 ale na nim ostatnio pracowałem reanimując jakiś stary projekt klientowi.
Kod:
timer.process();
Wystarczy skonfigurować timer na przerwania co np 1ms:
Kod:
TCCR0 = (1<<WGM01); // tryb CTC
TCCR0 |= 0x5; // Preskaler na 1024
OCR0 = 1 * F_CPU/1000 / 1024; // 1ms * F_CPU/1000 / PRESKALER
TIMSK |= ( 1<<OCIE0 ); // Zezwolenie na IRQ od porównania timera
oraz wektor obsługi przerwania:
Kod:
INTERRUPT( TIMER0_COMP_vect )
{
Kod:
INTERRUPT( TIMER0_COMP_vect ) // INTERRUPT lub SIGNAL zależy co lepsze
{
uint8_t static d100=100;
if( !d100-- ){
d100=100;
call_co_100_ms();
}
}
Program jest banalny, prostszy niż te czary mary w timer.h, itp.
PS
Pokazałem na T0 ale on jest używany przez Arduino, dlatego trzeba wybrać inny. Ponadto kod jest na archaiczny Meag16 ale na nim ostatnio pracowałem reanimując jakiś stary projekt klientowi.