Witam
Głównym moim zamierzeniem było zliczanie impulsów z halotronu wiem, że mógłbym to zrobić na zwykłych przerwaniach sprzętowych ale nie chciałem zamulać głównego programu dużą ilością przerwań, dlatego zdecydowałem się na użycie timera jako licznika korzystającego z zewnętrznego wejścia zegarowego T0. W moim wypadku generatorem jest czujnik Halla. Wszystko było dobrze gdy pisałem to dla timera 0 wszystko działa pięknie niestety nie mam wtedy dostępu do timerów z biblioteki Timer.H z których korzystam już w skumulowanym programie. Dlatego chciałem użyć Timer1 i tu jest problem, bo jak dla Timera 0 działa wszystko to dla 2 prawie nic.
Kod dla timera0
Kod dla Timera1
Mam arduino Leonardo.
Będę z góry wdzięczny za odpowiedź.
Głównym moim zamierzeniem było zliczanie impulsów z halotronu wiem, że mógłbym to zrobić na zwykłych przerwaniach sprzętowych ale nie chciałem zamulać głównego programu dużą ilością przerwań, dlatego zdecydowałem się na użycie timera jako licznika korzystającego z zewnętrznego wejścia zegarowego T0. W moim wypadku generatorem jest czujnik Halla. Wszystko było dobrze gdy pisałem to dla timera 0 wszystko działa pięknie niestety nie mam wtedy dostępu do timerów z biblioteki Timer.H z których korzystam już w skumulowanym programie. Dlatego chciałem użyć Timer1 i tu jest problem, bo jak dla Timera 0 działa wszystko to dla 2 prawie nic.
Kod dla timera0
Kod:
//volatile int encoder1 = 500;
volatile long long int przepel=0;
volatile int licznik=0;
void setup ()
{
Serial.begin(9600);
cli();
// reset Timer 0
TCCR0A = 0;
TCCR0B = 0;
// set compare match register to desired timer count:
// turn on CTC mode:
TCCR0A = bit (WGM01);
// Timer 0 - counts events on pin D4
TIMSK0 = bit (OCIE0A); // interrupt on Timer 0 CTC
TCNT0 = 0; //counter to zero
licznik = TCNT0;
// start Timer 0
// External clock source on T0 pin (D4). Clock on rising edge.
TCCR0B = bit (CS02) | bit (CS01) | bit (CS00);
sei();
} // end of setup
ISR(TIMER0_COMPA_vect)
{
przepel++;
}
void loop ()
{
Serial.println(TCNT0);
}
Kod dla Timera1
Kod:
volatile long long int przepel=0;
volatile int licznik=0;
void setup ()
{
Serial.begin(9600);
cli();
// reset Timer 1
TCCR1A = 0;
TCCR1B = 0;
// turn on CTC mode:
TCCR1A = bit (WGM11);
// Timer 1 - counts events on pin D6 T0
TIMSK1 = bit (OCIE1A); // interrupt on Timer 1 CTC
TCNT1 = 0; //counter to zero
licznik = TCNT1;
// start Timer 1
// External clock source on T0 pin (D4). Clock on rising edge.
TCCR1B = bit (CS12) | bit (CS11) | bit (CS10);
sei();
} // end of setup
ISR(TIMER1_COMPA_vect)
{
przepel++;
}
void loop ()
{
Serial.println(TCNT0);
}
Mam arduino Leonardo.
Będę z góry wdzięczny za odpowiedź.