Hi beginner1101,

so gehts "im Prinzip" - allerdings mit Änderungen. Dass man den Servo hardwareseitig an eine PWM hängen kann - und sich damit viel erspart - steht ja schon oben.

Den von Dir angedachten Weg gehe ich allerdings gelegentlich auch - aber NUR wenn die PWMs anderweitig vergeben sind. So - dann kommen wir zu den Änderungen, aber erstmal etwas Grundlegendes das auch Mixxer schon beschreibt.

Wenn das Servosignal auf high geht (die Servorampe startet) dann darf das nächste Servosignal gemäß Spezifikation erst nach 20 ms wieder auf high gehen - das ist die Periodendauer des Signals. Meist sind die Servos tolerant und manche verdauen hier Zeiten, die ein paar Millisekunden länger oder kürzer sind - aber bleib möglichst nahe bei diesen 20 ms. Dein 1,5 ms-Signal für die Mittenstellung ist ganz gut gewählt - spezifikationsmässig sogar genau richtig - aber nicht alle Servos sind exakt ! ! ! NACHDEM Du die 1,5-ms-Rampe abgeschaltet hast, musst Du warten, bis - siehe oben - die 20ms seit Rampenstart vorbei sind und darfst erst danach die Rampe wieder starten.

>>> In dieser Beziehung ist die Skizze zur Servoansteuerung im RNWissen falsch <<< - die 20 ms gehen eben von steigender Flanke bis zur nächsten steigenden Flanke ! ! ! Genau - und etwas besser verständlich - ist die Skizze hier.

Grundlegendes ist jetzt vorbei.

Du müsstest also in Deinem main nach dem Ausschalten des Servoports noch rund 18,5 ms warten bis die Signalleitung zum Servo wieder eingeschaltet wird. !!! Dieses Verfahren solltest Du aber nur zu Übungszwecken machen - ansonsten steht Dein Controller ja meist auf "wait" und tut sonst nix.

Sinnvoll wäre folgende Lösung:
Du baust einen Timer - ähnlich wie Deine bestehende Lösung - der beispielsweise in 1 sec 10 000 Interrupts generiert. In diesem Timer zählst Du - sagen wir mal die Variable IRS_zeit hoch bis 10 000 und wenns so weit ist setzt Du den auf eins zurück. Damit wird 1 ms in 10 Teile geteilt *gggg*. Im main kannst Du jetzt eine Variable setzen auf SRV_pos - z.B. = 15. Wenn Du Deine IRS_zeit auf eins zurücksetzt, dann schaltest Du in der ISR den Servo ein, wenn IRS_zeit gleich SRV_pso (also 15) ist, dann schaltest Du den Servo in der IRS wieder aus. OK?

BTW: Kann es sein, dass Du den Code für Deine Timerroutine bei mir gefunden hast - Variablenname und "60000" deuten darauf hin? WENN Du von 0 bis (Izeit_1 <= 60000) zählst, dann sind das natürlich 60 001 Schritte ! ! !

Viel Erfolg