Hallo!

Ich versuche einen optimalen Code für meinen Quadrupped mit 12 Modellbauservos zu schreiben und stehe vor vor folgendem Problem:

Hierfür möchte ich 2 Timer verwenden.
Ein Timer (Timer1 16-Bit) der alle 20 Sekunden auslöst und den 2. Timer (Timer0 8-Bit) aktiviert. Der 2. Timer arbeitet dann alle Servoimpulslängen ab und beendet sich danach bis er wieder vom 1. Timer aktiviert wird.

Das klappt eigentlich auch schon fast, aber beim "Anschalten" des 2. Timers löst dieser sofort aus anstatt der vorgegebenen Zeit zu warten.
Danach hält er sich an die Zeiten.
Also habe ich den Timer0 wie folgt aktiviert:

Code:
    TCNT0 = 0;                                // um sicherzustellen, dass er von Null aufwärtszählt
    OCR0A = 50;
    TIMSK0 |= (1 << OCIE0A);        // Timer0 aktivieren
Aber egal welchen Wert ich für OCR0A eingebe, er startet immer sofort...
Der andere Timer wartet artig seine 20 ms ab bevor er zum ersten mal auslöst.

Hier nochmal ein bisschen mehr Code zur Übersicht:
Code:
...

int main(void)
{
   
    // Timer0 - 8-Bit 
    TCCR0A |= (1 << WGM01);                    // Clear Timer on compare
    TCCR0B |= (1 << CS02);                    // Prescaler 256, Interrupt max Verzögerung 4,1 ms
    //TIMSK0 |= (1 << OCIE0A);                // Compare-mode aktivieren
    
    
    // Timer1 - 16-Bit
    // Servo Impuls-Zeit
    TCCR1B |= (1 << WGM12) | (1 << CS12);    // Prescaler 256, Clear Timer on compare
    OCR1A = 1249;                            // Interrupt Verzögerung 20 ms
    TIMSK1 |= (1 << OCIE1A);                // Compare-mode aktivieren
        
    sei();                                    // Interrupts global ein
    
   ....
}
    

...

ISR (TIMER0_COMPA_vect)
{
         ....
        OCR0A = wartezeit[zaehler];   // Hier gibts die neue Wartezeit - diese wird auch eingehalten!
}


ISR (TIMER1_COMPA_vect)
{
   ... 
    
    TCNT0 = 0;
    OCR0A = 50;                             // <-------------------------------------dieser Wert wird ignoriert
    TIMSK0 |= (1 << OCIE0A);        // Timer0 aktivieren
}
Zum beenden des Timer0 setze ich TIMSK0 = 0.


Vielleicht sieht hier jemand meinen Fehler? Ich wäre für jede Hilfe dankbar

Zur Herangehensweise:
Ich habe schon einen anderen Code zur Ansteuerung der 12 Servos verwendet, dieser ist aber sehr unsauber und die Servos bewegen sich nur sehr ungenau.
Deshalb möchte ich UNBEDINGT diese Methode zum laufen bekommen um auch die Pausenzeiten konstant zu halten.

Gruß Erik