Hallo

So funktioniert es:

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
   while(1)
   {
      stellzeit=30;              // Wiederholungen für Stellzeit vorbelegen
      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
      if(servopos > 25) servopos=5; // Ende Drehbereich, zurück auf andere Seite
      mSleep(500);               // Platzhalter für andere Aufgaben
   }
   return(0);
}
Zwei Probleme: Die Auflösung ist gering (5-25) weil Sleep() nicht so flott ist. Und die Pulslängen schwanken wegen der internen RP6-Interrupts. Deshalb zittern die Servos leicht.

Gruß

mic

Edit: Kommentare im Programm angefügt