Hi,
ich versteh zwar nicht, warum der Servo am linken Anschlag bleibt, aber versuch doch mal das: (nichtmehr nur 3 mal Anhalten)
Code:
// RP6 steuert ein Servo an der SL1-LED mit Sleep() 1.5.2008 mic
#include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen
// wir mit den störenden Interrupts
uint8_t stellzeit, servopos=15; // 15=Servomitte, Drehbereich ca. 5-25
int main(void)
{
initRobotBase();
setLEDs(0); // alle LEDs aus/kein Impuls
stellzeit=30; // Wiederholungen für Stellzeit vorbelegen
while(1)
{
while(stellzeit--) // Wir geben dem Servo Zeit zum Positionieren
{ // und senden solange das Steuersignal
setLEDs(1); // Servo Impuls Anfang
sleep(servopos); // Sleep() läuft mit 10kHz: 15 entspricht 1,5ms
setLEDs(0); // Servo Impuls Ende
sleep(200-servopos); // Das Signal soll alle 20ms gesendet werden
} // Am Ende der Schleife sollte das Servo im Ziel sein
servopos+=1; // Nächste Position berechnen
if(servopos > 25) servopos=5; // Ende Drehbereich, zurück auf andere Seite
mSleep(500); // Platzhalter für andere Aufgaben
}
return(0);
}
Ich hab auch das Stellzeit=30; vor die while-schleife um es nicht ständig neu definieren zu müssen, das spart rechenzeit -->ruckeln
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
MfG Pr0gm4n
Lesezeichen