nun ja keiner der Servos reagiert

das is meine einzige Kontrolle des timers, ob an den ausgängen ein PWM signal entsteht

danke für das Lob und den ersten Tipp!

Ich bin am überlegen das grundprinzip zu verändern.
wie du schon sagtest, frisst der ISR grob geschätzt 8% meiner Rechenleistung (alle 100 Takte ein interrupt mit ca 8 Assembler befehlen) uns zusätzlich die permanente Überprüfung der Timer mit den Vergleichswerten.
Daher wäre eine andere Lösung um 18 PWMs zu erzeugen ratsam.
Ich überlege meinen 16MHz quartz durch ein 6,4MHz Quartz zu tauschen.
Dadurch bin ich in der Lage die Timer 0 und 2 bei einem Prescaler von 64 zu 10µs timern zu nutzen (alternativ ginge auch 25,6MHz bei einem Prescaler von 256, aber das unterstützt der µC nicht ). Ein Pin wird auf High gesetzt, die Pulsdauer wird einfach vorgeladen und wenn der Überlauf erreicht wird, wird der entsprechende Pin zurück gesetzt. dann folgt der nächste kanal. da es 18 Servos sind und maximal 18*2,5ms=45ms vestreichen können müssen zwei Timer gleichzeitig impulse erzeugen, dann kann es höchstens 22,5ms dauern alle Signale zu erzeugen und dann können sie auch gleich schon wieder mit den nächsten Signalen loslegen. Im Falle, dass die Impulssumme kleiner als 20ms war muss entsprechend gewartet werden. Hier besteht die auslastung des µC nur darin in alle 20ms 18mal in den ISR zu springen, die Ports zu schalten und die timer neu vorzuladen. Also kaum arbeit.
Das einzige was mich an dieser Idee stört ist, die Tatsache dass ich 60% meiner Geschwindigkeit verliere, weil ich nurnoch mit 6,4MHz arbeite. Aber ansonsten bekommt man mit den prescalern und den 8 Bit-Timern nicht auf einen Timer der 0-2,55ms abdeckt.
Diese Signale hätten jedoch gegenüber der ersten Lösung den vorteil, dass sie aufgrund der tastsache, dass jedes signal durch einen ISR direkt ausgelöst wird sehr präzise ist.

Was haltet ihr von der alternativen Idee?

mfg Sirvivor