Nie wiem dlaczego Timer0 nie generuje przerwania przepełnienia licznika.
Zegar 12MHz
Preskaler 1024
Każde przerwanie zmienia bit głośnika na przeciwny (XOR) czyli częstotliwość dźwięku to częstotliwość przerwań podzielona przez 2.
Głośnik ma zakres od 20Hz - 20kHz
Częstotliwość oczekiwana: f = 12MHz / 1024 / 2 = 5860Hz
Dźwięk się nie pojawia niezależnie od ustawienia preskalera na jeden z 5 trybów.
Gdzieś robię prosty błąd, ale chyba się zablokowałem z myśleniem
Zegar 12MHz
Preskaler 1024
Każde przerwanie zmienia bit głośnika na przeciwny (XOR) czyli częstotliwość dźwięku to częstotliwość przerwań podzielona przez 2.
Głośnik ma zakres od 20Hz - 20kHz
Częstotliwość oczekiwana: f = 12MHz / 1024 / 2 = 5860Hz
Dźwięk się nie pojawia niezależnie od ustawienia preskalera na jeden z 5 trybów.
Gdzieś robię prosty błąd, ale chyba się zablokowałem z myśleniem
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(TIMER0_OVF_vect){ // przerwanie INT0 po przepełnieniu TIMER0
PORTB ^= (1<<PB0);
}
int main(void){
// włącz przerwania
TIMSK = 1<<TOIE0; //zezwolenie na przerwania od TC0
TCCR0 = (1<<CS02) | (1<<CS00); //preskaler XTAL/1024,
sei();
//ustaw pin dźwięku
DDRB |= (1<<PB0);
// --- PĘTLA GŁÓWNA ----------------------------------------------------------------------- //
for(;;) {
}
return(0);
}
