Witam, mam problem z uzyskaniem przerwania od licznika. Program w ogólności ma co mniej więcej sekundę na przemian zapalać i gasić diode. Licznik jest w trybie porównania do wartości 156. Częstotliwość oscylatora to 4 MHz, przeskalowana przez 256. Program niestety nie chce wejść w przerwanie. Może któryś z bardziej doświadczonych forumowiczów jest w stanie zwrócić mi uwage gdzie robię błąd ewentualnie o czym zapomniałem.
Kod programu:
Kod programu:
Cytat:
#define F_CPU 4000000UL /* 4 MHz */
#include <avr/io.h>
#include <avr/interrupt.h>
int8_t licznik = 0;
int8_t licz = 0;
ISR (TIMER0_COMPA_vect)
{
++licznik;
}
int main (void) {
DDRA = 0xFF;
PORTA &= ~_BV(PA0);
PORTA |= _BV(PA1);
PORTA &= ~_BV(PA2);
//kofiguracja oobsługi przerwania licznika
TCCR0 = _BV(CS02); //preskaler
TCCR0 = _BV(WGM01);//tryb pracy licznika
TCCR0 = ~_BV(WGM00);
OCR0 = 0x9C; //156; //do ilu ma zliczac licznik
TIMSK = _BV(OCIE0); //odblokowanie przerwania
sei();
while(1) {
if(licznik == 154) {
++licz;
if (licz == 100) {
PORTA ^= _BV(PA0);
dupa = 0;
}
}
}
return 0;
}