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???