stehe schon wieder vor einem rätsel...
Zitat:
Zitat von Dirk
@Fabian:
Vielleicht machst du es dir für den Anfang zu schwierig.
Fang doch mit einer einfachen Aufgabe an:
Die Control M32 (Master) fordert auf Tastendruck bestimmte Aktionen von der Base (Slave) über I2C an.
Gruß Dirk
wenn ich folgenden code in die slavedatei einfüge
Code:
DDRC |= SL1;
PORTC &= ~SL1;
......
for(c=0; c<50; c++) //50 = 50 Impulse senden, das dauert ca. 1 Sekunde
{
PORTC |= SL1; // Impulsstart servo I
sleep(5); // 1 = 0.1ms warten = Servoposition 1
PORTC &= ~SL1; // Impulsende
sleep(150); //50ms warten
}
.........
immer entsprechend case1 = SL1, case2 = SL2, case3 = SL4 und case4 = SL5, funktioniert es was die LEDs betrifft, aber der angeschlossener servo nur bei SL1 und SL2, nicht aber bei SL4 und SL5...
Code:
#include"RP6RobotBaseLib.h"
#include "RP6I2CslaveTWI.h"
int main(void)
{
initRobotBase();
powerON();
setACSPwrOff();
uint8_t i;
uint8_t c; // allgemeine 8-Bit-Variable (ein Char)
I2CTWI_initSlave(10);
while (true)
{
if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy)
{
// Register speichern:
i = I2CTWI_writeRegisters[0];
I2CTWI_writeRegisters[0] = 0;
switch (i)
{
case 1:
DDRC |= SL1;
PORTC &= ~SL1;
setLEDs(0b000001);
mSleep(500);
setLEDs(0b000000);
// task_motionControl();
// move(30,FWD,DIST_MM(50),false);
for(c=0; c<50; c++) //50 = 50 Impulse senden, das dauert ca. 1 Sekunde
{
PORTC |= SL1; // Impulsstart servo I
sleep(5); // 1 = 0.1ms warten = Servoposition 1
PORTC &= ~SL1; // Impulsende
sleep(150); //50ms warten
}
break;
case 2:
DDRC |= SL2;
PORTC &= ~SL2;
setLEDs(0b000011);
mSleep(500);
setLEDs(0b000000);
// task_motionControl();
// move(30,BWD,DIST_MM(50),false);
for(c=0; c<50; c++)
{
PORTC |= SL2;
sleep(5);
PORTC &= ~SL2;
sleep(150);
}
break;
case 3:
DDRC |= SL4;
PORTC &= ~SL4;
setLEDs(0b000111);
mSleep(500);
setLEDs(0b000000);
// task_motionControl();
// rotate(30,LEFT,20,false);
for(c=0; c<50; c++)
{
PORTC |= SL4;
sleep(5);
PORTC &= ~SL4;
sleep(150);
}
break;
case 4:
DDRC |= SL5;
PORTC &= ~SL5;
setLEDs(0b001111);
mSleep(500);
setLEDs(0b000000);
// task_motionControl();
// rotate(30,RIGHT,20,false);
for(c=0; c<50; c++)
{
PORTC |= SL5;
sleep(5);
PORTC &= ~SL5;
sleep(150);
}
break;
default:
setLEDs(0b111111);
mSleep(500);
setLEDs(0b000000);
}
}
}
return 0;
}
ich komme einfach nicht dahinter warum???