Das Problem ist folgendes. In der Interrupt Routine wird pro Aufruf immer nur ein Kanal behandelt. Die Zeit bis diese Routine erneut aufgerufen wird entspricht dann dem Timing des Servos und wird jedes mal für das entsprechende Servo gesetzt. Das heisst aber auch, das sich die relative Position des Pulses, vom z.B. 5 Kanal, ändert wenn sich die Kanäle davor ändern. Das ist auf jeden Fall so, die Frage ist halt ob das die Ursache für das Servozucken ist. Deshalb wärs auch cool wenn das mal einer, wie oben beschrieben, Testen könnte.
Als Beispiel:
Kanal 1,2,3,4,5,6,7,8
Timing 1.5ms, 1ms, 1ms, 1ms, 1ms, 2ms, 1ms, 2ms
Der Code geht jetzt hin und ruft die ISR auf. Diese schaltet den Ausgang von 1 auf HIGH und setzt die Aufrufzeit für die ISR auf 1.5ms. Nach 1.5ms wird die ISR aufgerufen und 1 geht auf LOW. 2 geht auf HIGH und setzt die Zeit für den Aufruf auf 1ms. Das geht dann so weiter bis die Sache durchgelaufen ist. Nach dem letzten Durchlauf wird noch 9.5ms(20ms-10.5ms) gewartet bis wieder bei Kanal 1 angefangen wird. Angenommen wir ändern Kanal 1,2,3 und 4 auf 2ms, 1.5ms, 1.5ms und 2ms. Dann gehen wir wieder durch und erreichen Kanal 5 jetzt ganze 2.5ms später als vorher.
Wie gesagt, es kann sein das den Servos das egal ist, sicher bin ich mir da aber nicht.
EDIT:
Ich habe mal ein Programm geschrieben was dieses Verhalten simuliert. Das war dem Servo was ich verwendet habe selbst bei einer Abweichung von bis zu 7.5ms vollkommen egal.