Hallo Pr0gm4n,

es wäre schön, wenn es sozusagen eine universelle Library für Servos geben könnte, die mit jedem AVR, mit jedem Servo und mit allen Anwendungszwecken zurecht käme.
Leider geht das nicht.

Hier im Forum gibt es geniale Lösungen für die Servoansteuerung. Die beste war eine für einen 2313 (Assembler), mit der 10 Servos über eine I2C-Ansteuerung betrieben werden können. Leider habe ich den Link nicht parat.

Darüber hinaus gibt es viele Lösungen z.B. von radbruch hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=39173
... für 8 Servos am RP6.

Weitere Lösungen (auch mit verschiedenen Ansätzen!) gibt es hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=34407
Da hat wieder radbruch gute Routinen gepostet.
Ich habe in diesem Thread allein 3 verschiedene Ansätze in C für den RP6 vorgestellt:

1. RP6Base_Servo.zip am 3.10.07:
Die blockierende Lösung mit Verzögerungsschleife. Das ist die ungünstigste Variante. Allerdings funktioniert sie und ist hier sogar noch besser als deine Lib, weil zumindest die 18ms zwischen den Impulsen nicht noch blockierend gewartet wird. Da kann der uC ja nichts anderes machen! Die Servo-Ansteuerung ist doch immer nur ein "Randproblem" des uC-Programms. Die Hauptsache ist doch die Logik oder Aufgabensteuerung, für die die Servos gebraucht werden.

2. RP6Control_Servo.zip am 6.10.07:
Das ist eine Lösung mit Timer, der auf einer festen Frequenz läuft. Der Servo-Impuls wird im Hauptprogramm gestartet, danach kann das Programm weiter laufen. Erst in der Timer-ISR wird der Impuls beendet, wenn die richtige Dauer erreicht ist. Das ist noch die universellste Lösung, die für die meisten Anwendungen und uCs passen kann: Sie ist weder für den Impuls noch für die 18..19ms bis zum Folgeimpuls blockierend und kann an jedem Pin des uC laufen. Auch mehrere Servos sind so möglich. Da ein Timer fast immer benutzt wird, kann er auch für die Servoansteuerung mit genutzt werden. Die Auslastung ist aber durch die Timer-ISR recht hoch, da der Interrupt eine recht hohe Frequenz braucht.

3. RP6Control_Servo2.zip am 8.10.07:
Das ist die Hardware-PWM-Lösung. Sie stellt gar keine Last für den Programmablauf dar und eignet sich gut, wenn nur 1 bis 2 (je nach uC auch mehr) Servos anzusteuern sind. Eine universelle Lösung ist das meist nicht, sondern immer eine einzelne Lösung, also nicht geeignet für eine Lib.

Also was bleibt: Eine universelle Servo-Lib gibt es nicht. Aber: Sehr gute Einzellösungen.

Gruß Dirk