Hallo,
bekomme einen Overflow-Interrupt bei einem atmega8 nicht zum laufen. 
Habe das Problem mal im folgenden Code runtergebrochen. Meine erste 
Frage ist: wieso blinkt meine LED an PD0 nur, wenn ich vor der 
Endlosschleife den Port einmal toggle?
| 1 | #include <avr/io.h>
 | 
| 2 | #include <avr/interrupt.h>
 | 
| 3 |  
 | 
| 4 | volatile uint8_t flag;
 | 
| 5 |  
 | 
| 6 | int main(void) {
 | 
| 7 |     DDRD = 0xFF;
 | 
| 8 |  
 | 
| 9 | // Timer2 konfigurieren
 | 
| 10 |     TCCR2 = (1 << CS22) | (1 << CS21);
 | 
| 11 |     TIMSK |= (1 << TOIE2);
 | 
| 12 |  
 | 
| 13 |     sei();
 | 
| 14 | 
 | 
| 15 |     // LED blinkt nur, wenn die folgende Zeile NICHT auskommentiert ist.
 | 
| 16 |     //PORTD ^= (1 << PD0);
 | 
| 17 | 
 | 
| 18 |     while(1) {
 | 
| 19 |         if (flag == 1) {
 | 
| 20 |             flag = 0;
 | 
| 21 |              PORTD ^= (1 << PD0);
 | 
| 22 |         }
 | 
| 23 |     }
 | 
| 24 | }
 | 
| 25 |  
 | 
| 26 | // Timer2 overflow Interrupt
 | 
| 27 | ISR( TIMER2_OVF_vect ) {
 | 
| 28 |     flag = 1;
 | 
| 29 | }
 | 
Meine naechste Frage ist, wieso kann ich nicht Timer 0 wie folgt nutzen?
| 1 | #include <avr/io.h>
 | 
| 2 | #include <avr/interrupt.h>
 | 
| 3 |  
 | 
| 4 | volatile uint8_t flag;
 | 
| 5 |  
 | 
| 6 | int main(void) {
 | 
| 7 |     DDRD = 0xFF;
 | 
| 8 |  
 | 
| 9 | // Timer0 konfigurieren
 | 
| 10 |     TCCR0 = (1 << CS01) | (1 << CS00);
 | 
| 11 |     TIMSK |= (1 << TOIE0);
 | 
| 12 |  
 | 
| 13 |     sei();
 | 
| 14 | 
 | 
| 15 |     while(1) {
 | 
| 16 |         if (flag == 1) {
 | 
| 17 |             flag = 0;
 | 
| 18 |              PORTD ^= (1 << PD0);
 | 
| 19 |         }
 | 
| 20 |     }
 | 
| 21 | }
 | 
| 22 |  
 | 
| 23 | // Timer0 overflow Interrupt
 | 
| 24 | ISR( TIMER0_OVF_vect ) {
 | 
| 25 |     flag = 1;
 | 
| 26 | }
 | 
Waere dankbar fuer Hilfe.