PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoansteuerung über SCL/ SDA



Checker 1.0
20.05.2012, 16:58
Hallo,
ich bin grad an einem größeren Projekt und scheiter leider gerade beim Ansteuern von 2 meiner 3 Servos.
Über den ADC0 funktioniert es gut, aber über die SCL und SDA Ausgänge wills nicht klappen.
Ich hab die Lib schon entsprechend umgeändert, hier mein Programm:


void acsStateChanged(void)
{
if(obstacle_left)
rotate(80, RIGHT, 50, true);
if(obstacle_right)
rotate(80, LEFT, 50, true);
if(obstacle_right && obstacle_left)
rotate(60, RIGHT, 100, true);
}
void bumpersStateChanged(void)
{
if(bumper_left || bumper_right)
{
changeDirection(BWD);
move(100, BWD, DIST_MM(200), true);
rotate(50, RIGHT, 120, true);


}
}

int main(void)
{
static unsigned int counter = 0;
static char position = 0;


initRobotBase();
PositionServo(0,POSITION_MITTE);
PositionServo(1,POSITION_MITTE);
PositionServo(2,POSITION_MITTE);
DDRA |= 1;
DDRC |= 3;
setLEDs(0b111111);
mSleep(500);
setLEDs(0b001001);
BUMPERS_setStateChangedHandler(bumpersStateChanged );
ACS_setStateChangedHandler(acsStateChanged);
powerON();
setACSPwrMed();

while(true)
{
task_RP6System();
changeDirection(FWD);
moveAtSpeed(80,80);

counter = counter + 1;
if (counter > 40000)
{
counter = 0;
if(position > 3)
{
position = 0;
}
switch(position)
{
case 0: PositionServo(0,7);
PositionServo(1,7);
PositionServo(2,7);
break;
case 1: PositionServo(0,23);
PositionServo(1,23);
PositionServo(2,23);
break;
case 2: PositionServo(0,7);
PositionServo(1,7);
PositionServo(2,7);
break;
case 3: PositionServo(0,23);
PositionServo(1,23);
PositionServo(2,23);
break;


default: PositionServo(0,POSITION_MITTE);
PositionServo(1,POSITION_MITTE);
PositionServo(2,POSITION_MITTE);
break;
}
position = position + 1;
}
}
return 0;
}



Vielen Dank

shedepe
20.05.2012, 22:48
Du musst eventuell beachten, dass die SDA / SCL Pins bereits für den I2C Bus in der Lib initialisiert werden. Es wäre auch noch ganz gut wenn du uns die PositionServo - Funktion zeigen könntest

Checker 1.0
21.05.2012, 09:26
Danke, hat sich erledigt.
Der eine Servo hat gegen den maximal Ausschlag wegen falschen Werten gedrückt und so dem andern die Spannung geklaut :)