Hallo
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.Ich hab auch das Stellzeit=30; vor die while-schleife um es nicht ständig neu definieren zu müssen, das spart rechenzeit -->ruckeln
Auch das ist Unsinn. Die Impulslänge wird hier gebildet: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
Einzig ein Interrupt kann die Ausführungsdauer von Sleep() beeinflussen. Ein Ausschalten der Interrupts mit cli()/sei() führt hier aber nicht zum Ziel...Code:setLEDs(1); // Servo Impuls Anfang sleep(servopos); // Sleep() läuft mit 10kHz: 15 entspricht 1,5ms setLEDs(0); // Servo Impuls Ende
Und schlieslich: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.ich versteh zwar nicht, warum der Servo am linken Anschlag bleibt
Gruß
mic







Zitieren

Lesezeichen