Hallo

Ich hab auch das Stellzeit=30; vor die while-schleife um es nicht ständig neu definieren zu müssen, das spart rechenzeit -->ruckeln
Das ist völliger Quatsch! Mit dieser Änderung wird stellzeit nur einmalig mit 30 geladen, alle weiteren Schleifendurchgänge starten dann mit 255, weil stellzeit vom Anfahren der letzten Position mit 0 belegt war. Das wird nur nicht offensichtlich weil anschliesend immer ein mSleep(500); folgt. Wenn man das auskommentiert wird man sehen, dass die Wartezeit ab der zweiten Position deutlich größer ist. Zudem werden wohl einige Positionen übersprungen.

ist zwar nur ein Takt, aber wenn man das immer macht kommt doch manchmal was mit 0.05 ms oder so zusammen, was das ruckeln erheblich verbessert
Auch das ist Unsinn. Die Impulslänge wird hier gebildet:
Code:
         setLEDs(1);             // Servo Impuls Anfang 
         sleep(servopos);        // Sleep() läuft mit 10kHz: 15 entspricht 1,5ms 
         setLEDs(0);             // Servo Impuls Ende
Einzig ein Interrupt kann die Ausführungsdauer von Sleep() beeinflussen. Ein Ausschalten der Interrupts mit cli()/sei() führt hier aber nicht zum Ziel...

Und schlieslich:
ich versteh zwar nicht, warum der Servo am linken Anschlag bleibt
Das Servo bleibt nicht am linken Anschlag sondern startet dort einen neuen Demozyklus. Genau das macht "if(servopos > 25) servopos=5;" Wenn Position größer rechts dann Position=links.

Gruß

mic