Hallo
So vielleicht:
Code:
#include "RP6RobotBaseLib.h"
uint8_t i; //Stellzeit für das Servo
int main(void)
{
initRobotBase();
DDRA |= 1;
while(1)
{
setLEDs(1);
for(i=0; i<50; i++) // 50 mal Servosignal für Position 1 senden
{
PORTA |= 1;
sleep(5); // Impulslänge Position 1 (0,5ms)
PORTA &= ~1;
sleep(200-5); // Impulspause
}
setLEDs(2);
mSleep(500); // Pause 1
setLEDs(4);
for(i=0; i<50; i++) // und 50 mal Servosignal für Position 2 senden
{
PORTA |= 1;
sleep(30); // Impulslänge Position 2 (3ms?)
PORTA &= ~1;
sleep(200-30); // Impulspause
}
setLEDs(8);
mSleep(2000); // Pause 2
}
return(0);
}
(ungetestet)
Das Servosignal muss solange wiederholt werden, bis das Servo seine Position nicht mehr ändert. Da wir keine Positionsrückmeldung erhalten, kann das nur über eine Zeitsteuerung realisiert werden. Günstig ist hierbei, dass der Impuls alle 20ms erzeugt werden sollte, 50 Impulse dauern dann ca. eine Sekunde.
Mein Programm geht immer vom aktuellen Winkel aus...
Das Servo fährt immer absolut die zur Impulsdauer gehörende Position an. Wenn du relativ von der jeweiligen Startposition schwenken willst, kannst du das ohne zusätzliche Positionsrückmeldung vergessen.
Die Belegung von ADC0 passt nicht zu den Servosteckern. Das hast du aber sicher beachtet 
Gruß
mic
P.S. Bitte Code-Tags verwenden.
Lesezeichen