• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Niedokładność pomiarowa - problem z odczytywaniem impulsow
#34
Faktycznie tą bibliotekę można sobie w du.... wsadzić. Jak  funkcja
Kod:
timer.process();
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:
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 )
{
W przerwaniu możemy sobie wywoływać funkcje co 100ms, np tak:
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();
  }
}
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.
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Niedokładność pomiarowa - problem z odczytywaniem impulsow - przez es2 - 18-08-2018, 17:09

Skocz do:


Przeglądający: 1 gości