Hallo,
ich hab das mal schnell für radbruch gemacht (keine Angst, will keinen Code klauen)
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
//d.h. du setzt "servopos" auf einen Wert 5-25 entsprechend der Position, die der Servo anfahren soll
int main(void)
{
initRobotBase();
setLEDs(0); // alle LEDs aus/kein Impuls, da da ja auch die Servos mit dranhängen--> Störsignale vermeiden
while(1)
{
stellzeit=30; // Wiederholungen für Stellzeit vorbelegen (zeit in [20ms], wie lange der Servo zum stellen der Postition braucht)
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+=5; // Nächste Position berechnen, kannst du natürlich auch anders, z.B. dass du Taster, Sensoren etc. einliest
if(servopos > 25) servopos=5; // Ende Drehbereich, zurück auf andere Seite
mSleep(500); // Platzhalter für andere Aufgaben
}
return(0);
}
so, ich hoffe ich konnte dir nun etwas helfen, eventuell kann ich dir in ein bis zwei wochen eine noch genauere Lösung anbieten, meine Servolib
damit ruft man nurnoch task_Servos(Parameter); auf und als Parameter gibt man lediglich ein, welche Stellung der Servo annehmen soll, dabei sind allerdings ein paar #define's nötig...
MfG Pr0gm4n
PS: radbruch, wie lange braucht so ein Servo für linker Anschlag bis rechter Anschlag? (deine Miniservos z.B.)