Alex schrieb:
> OCR0A = 2-1;
>
> // Compare Interrupt erlauben
> TIMSK0 |= (1<<OCIE0A);
Dein Timer kann zwar alle 2 Takte einen Interrupt generieren.
Aber die ISR
> ISR (TIMER0_COMPA_vect)
> {
> PORTD ^=0xFF;
> }
kommt dann nicht mehr nach.
Bei einem Interrupt muss ein Einsprung in die ISR gemacht werden (kostet
Zeit), Register gesichert werden (kostet Zeit), dann die eigentliche
Instruktion in der ISR (kostet Zeit), die gesicherten Register
wiederhergestellt werden (kostet Zeit) und ein Rücksprung aus der ISR
gemacht werden (kostet Zeit).
Das ist wie wenn dir dein Chef alle 10 Sekunden eine Akte zur
Bearbeitung auf den Tisch legt. Wenn du minimum 2 Minten zur Bearbeitung
der Akte benötigst, dann kommst du nicht mehr hinterher. Es wird dann
alle 2 Minuten eine Akte fertig und nicht alle 10 Sekunden.
* 'kostet Zeit' ist gleichzusetzen mit: dafür muss der µC ein paar Takte
aufwenden.