XBert, deine methiode hat allerdings das problem, wenn da sehr viele Servos denselben wert haben, werden die Servos immer ein wenig aus der spur gehen, je mehr Servos denselben wert haben

ich hätte da ne idee die etwas speicherintensiv ist, aber locker mit 8/16/32 Servos klarkommt

man nehme ein char array, das der auflösung für die servosteuerung entspricht, also 1mS(vollausschlag links/rechts) / x Steps, wobei x der anzahl an timerüberläufen entspricht, die in 1mS möglich sind ...

jetzt richtet man sich also den timer ein und das array von der größe x

man legt sich ausserdem eine indexvariable und eine countervariable an

bei counter == 0 schaltet man alle pins auf HIGH und setzt die indexvariable auf 0

in der ISR lässt man jetzt 1ms nichts passieren (mindeststellzeit)

dann geht man mit der indexvariable bei jedem step ein stück vorran durch das array ... jedes byte in dem array steht für 8 Servos (je bit ein servo) bei der ersten gefundenen 1(also das bit nicht der wert) wird die leitung für den jeweiligen servo auf LOW gezogen

wenn also bei position 0 ein wert von 4 steht (3tes bit 1) wird der impus des 3ten servo bei 1ms abgeschaltetn (linker anschlag) und wenn bei position x eine 3 steht (1tes und 2tes bit) werden die Servos 1 und 2 gestoppt (rechter anschlag)

abschliessend setzt man den index wieder auf 0 und wartet dann 18mS und macht wieder garnichts (man sollte eventuell alle impulsleitungen auf LOW setzen bevor man das tut, kann ja passieren man hat ne 1 übersehen hat )

um die position der Servos zu ändern, wartet man zunächst mit
while ( index != 0 ) ;
dass der timer in die pausephase geht, löscht das bit der alten position und schreibt die neue position ... die position für jeden servo sollte man sich immer in einer variable speichern

alles zusammen braucht man dafür x + 10-12 bytes arbeitsspeicher, aber das sollte so ganz ordentlich funktionieren