Witam chciałem skonfigurować timer1 w ten sposób że:
1.chodzi on cały czas odliczając 0-255
2.Przerwanie wywoływane jest po pierwsze po każdym przepełnieniu (czyli SIG_OVERFLOW1)
3.Przerwanie wywoływane jest w określonym czasie odliczania zapisanym w ICR1 (czyli TIMER1_CAPT_vect)
Mój kod inicjujący przerwanie wygląda tak:
Obsługa przerwań:
Dioda 1 mruga jak szalona a dioda 2 milczy.
Założenie jest takie, żeby dioda 2 zapalała się i gasła w połowie czasu gdy dioda 1 jest zapalona. Stąd ICR1 = 128.
Nie bardzo wiem gdzie błąd i czy da się tak w ogóle skonfigurować timer.
Oczywiście 128 nie jest wartością docelową tylko ma być zmienna, a czasami ma się zmieniać 2-3 razy w ciągu jednego zliczania timera, czyli wywołać przerwanie na 10, 40 i 90 cyklu powiedzmy. Update ICR1 wew. przerwania . Na razie nie wchodzi mi w ogóle w ISR(TIMER1_CAPT_vect)
1.chodzi on cały czas odliczając 0-255
2.Przerwanie wywoływane jest po pierwsze po każdym przepełnieniu (czyli SIG_OVERFLOW1)
3.Przerwanie wywoływane jest w określonym czasie odliczania zapisanym w ICR1 (czyli TIMER1_CAPT_vect)
Mój kod inicjujący przerwanie wygląda tak:
TCCR1A = (1<<WGM10);
TCCR1B = (1<<WGM12)|(1<<CS10)|(1<<CS12);//256 bit fas PWM z preskalerem na najwolniejszy
ICR1 = 128;
TIMSK |= _BV(TOIE1);
TIMSK |= _BV(TICIE1);
sei();Obsługa przerwań:
ISR(TIMER1_CAPT_vect){
LED_PORT ^= LED_2;
}
ISR(SIG_OVERFLOW1){
LED_PORT ^= LED_1;
}Dioda 1 mruga jak szalona a dioda 2 milczy.
Założenie jest takie, żeby dioda 2 zapalała się i gasła w połowie czasu gdy dioda 1 jest zapalona. Stąd ICR1 = 128.
Nie bardzo wiem gdzie błąd i czy da się tak w ogóle skonfigurować timer.
Oczywiście 128 nie jest wartością docelową tylko ma być zmienna, a czasami ma się zmieniać 2-3 razy w ciągu jednego zliczania timera, czyli wywołać przerwanie na 10, 40 i 90 cyklu powiedzmy. Update ICR1 wew. przerwania . Na razie nie wchodzi mi w ogóle w ISR(TIMER1_CAPT_vect)
