Hallo zusammen.

Derzeit beschäftige ich mich mit Timer-Interrupts.
Dazu wurde ein Prog geschrieben - läuft nicht richtig - Fehlerursache erkenne ich leider nicht.

Ablauf:
Interrupt löst nach jeder 1ms aus.
LED schaltet nach 100ms für 400ms ein und dann wieder aus.
Danach startet die LED-Routine erneut.
Für >= habe ich mich entschieden, damit der ungefähre Zeitablauf, beim "verschlucken" eines Interrupts, erhalten bleibt.

Fehler:
LED schaltet nach 100ms ein und bleibt dauerhaft eingeschaltet.

Code:
#define F_CPU 1000000UL	
#include <avr/interrupt.h>	

volatile uint8_t OverflowZaehler=0;

ISR(TIM1_COMPA_vect)	
{
    OverflowZaehler++;
}

void OverflowZaehlerReset(void)
{
    OverflowZaehler=0;
}

void LEDein(void)
{
   PORTB |= (1<<PB0); 
}

void LEDaus(void)
{
    PORTB &= ~(1<<PB0);
}
    
int main(void)
{
  DDRB |= (1<<PB0);

  TCCR1B |= (1<<WGM12) | (1<<CS11);
  TIMSK1 |= (1<<OCIE1A); 
  OCR1A = 124; 
  sei(); 

  LEDaus();

  while(1)
  {
    if (OverflowZaehler >= 100)
    LEDein();
    {
        if(OverflowZaehler >= 500)
        {
            LEDaus();
            OverflowZaehlerReset();
        }

    }
  }
}