Dann wäre jetzt Schritt zwei an der Reihe:
Code:
// Servoansteuerung2: Wir erzeugen zwei Impulse im Wechsel 10.1.2010 mic
// sleep(1) verzögert ca. 0,1ms, 50 Impulse dauern ca. 1 Sekunde
// Servo an SDA (PC1) (XBUS Pin 12)
#include "RP6RobotBaseLib.h"
uint8_t c; // allgemeine 8-Bit-Variable (ein Char)
int main(void)
{
initRobotBase();
DDRC |= SDA;
PORTC &= ~SDA;
while(1)
{
for(c=0; c<50; c++) // 50 Impulse senden, das dauert ca. 1 Sekunde
{
PORTC |= SDA; // Impulsstart
sleep(12); // 1,2ms warten = Servoposition 1
PORTC &= ~SDA; // Impulsende
sleep(190); // 19ms warten
}
for(c=0; c<50; c++)
{
PORTC |= SDA;
sleep(18); // 1,8ms warten = Servoposition 2
PORTC &= ~SDA;
sleep(190);
}
}
return(0); // wird nie erreicht
}
Das Servo sollte damit im Wechsel zwei Positonen anfahren, dazu hat es jeweils eine Sekunde Zeit. Wenn du die Werte für die jeweiligen Positionen änderst um den maximalen Drehbereich auszutesten sollte das Servo in der jeweiligen Position kurz verweilen. Wenn es dies nicht macht, muss die Zeit (=maxwert für c in der Schleife) solange erhöht werden, bis die kurze Pause erkennbar ist.
Wie gehts nun weiter? Entweder erhöhen wir die Auflösung der Positionen (und trennen uns damit von der sleep()-Ansteuerung) oder wir fahren die Positionen langsamer an oder wir steuern gleichzeitig ein zweites Servo an. Sag was du willst/brauchst.
Gruß
mic