Gast
#1736867
Hallo,
ich habe ein Problem mit dem Verständnis von Interrupts. Mein Ziel war
einen Timer zu erstellen der einmal in der Sekunde einen Interrupt
erzeugt. Dazu habe ich den Timer1B (16Bit)
im CTC-Mode, Clock ist 16MHz, durch Prescaler auf 15625. Dann habe ich
als Compare-Wert passend 15625 gewählt. So müsste das gewünschte
Verhalten eintreten. Ein erster Interrupt wird mit dem Programm auch
ausgelöst...danach passiert jedoch nichts mehr?! Wieso? Muss ich in der
ISR etwas zurücksetzen oder ähnliches?
// Interrupt service routine for timer
ISR(TIMER1_COMPB_vect){
switch_led(LED_DISPLAY,1);
wait_ms(10);
switch_led(LED_DISPLAY,0);
}
int main(){
// PORTC for LEDs
PORTC = 0xFF;
DDRC = 0xFF;
// Configure a timer
// Clock: 16000000HZ
// Prescaler: 1024=>15625 is the clock, CTC Mode
TCCR1B = (1<<CS12) | (1<<CS10) | (1<<WGM12);
OCR1B = 0x3D09; // Compare value is 15625
// Activate Interrupts
TIMSK1 = (1<<OCIE1B);
sei();
while(1){
}
return 0;
}