so, nach wirklich stundenlangem durcharbeiten der I²C lib, der beispielprogramme mit I²C und dem durchlesen der anleitung der base und der M32 habe ich mein programm jetzt nochmal abgeändert:

Code:
 // Uncommented Version of RP6ControlServo.c

#include "RP6ControlLib.h"
#include "RP6ControlServoLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_I2CMasterLib.h"





uint8_t move_state = 0; // Wenn nicht anders zugewiesen,move_state=0



void motionControlStateChanged(void)
{	if (ir_hindernis)
	{
		if (!(ir_ende))
		{stopStopwatch3();		//stopwatch3 anhalten wenn ir erkannt wird und damit servobewegung anhalten
		writeString_P("stopStopwatch3\n");}	


	
	

			switch(move_state)
	
				{case 0:
					if (getStopwatch3() <1000 || getStopwatch3() >6000)
					{rotate(50,RIGHT,90,NON_BLOCKING); //um 90 grad rotieren wenn hindernis erkennt wird und stopwatch3 <1000 oder >6000 ist
					move_state= 1;	// move_state den wert 1 zuweisen
					}
					break;
	
	
					case 1:
					if(isMovementComplete())
					{ir_ende= true; 		//ir_ende=true, wenn bewegung abgeschlossen
					startStopwatch3();		//stopwatch3 wieder starten und servo wieder starten
					writeString_P("stopwatch3 starten\n");
					}
					break;
					
				}
	

			
			
	}

}
	

	
	
	
	





void servoansteuerung(void)
{if (getStopwatch3() <1000)
	{servo3_position = 0;
	writeString_P("LEFT Touch\n");}


if (getStopwatch3() >1000 && getStopwatch3() <2000)
	{servo3_position = 20;
	writeString_P("servo position 40\n");}
	
if (getStopwatch3() >2000 && getStopwatch3() <3000)
	{servo3_position = 90;}

if (getStopwatch3() >3000 && getStopwatch3() <4000)
		{servo3_position = RIGHT_TOUCH;
		writeString_P("Servo Right touch\n");}
		
if (getStopwatch3() >4000 && getStopwatch3() <5000)
	{servo3_position = 90;}
	
if (getStopwatch3() >5000 && getStopwatch3() <6000)
	{servo3_position = 20;}
		
if (getStopwatch3() >6000 && getStopwatch3() <7000)
	{servo3_position = 0;
	writeString_P("LEFT Touch\n");}
	
if (getStopwatch3() >7000)
	{
	setStopwatch3(0);
	writeString_P("stopwatch3 auf 0 zurück\n");}
	
}





void I2C_requestedDataReady(uint8_t dataRequestID)
{
	checkRP6Status(dataRequestID);
}





void I2C_transmissionError(uint8_t errorState)
{
	writeString_P("\nI2C ERROR - TWI STATE: 0x");
	writeInteger(errorState, HEX);
	writeChar('\n');
}

	

	
int main(void)
{ 
   initRP6Control();
   
   
   I2CTWI_initMaster(100);  
   
	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
	
	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
	
	
	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_ROTATE, true);
	
 MOTIONCONTROL_setStateChangedHandler(motionControlStateChanged);

 initSERVO(SERVO3); 
startStopwatch3(); 
   
   while(true) 
   {
servoansteuerung();
    task_SERVO();
 
	  infrarotkollission();
	  
	task_checkINT0();
        task_I2CTWI();
   }
   return 0;
}
jetzt ist es so, dass das programm zwar fehlerfrei kompiliert wird, wenn ich es aber laufen lasse, springt es sofort nach dem start wieder in den standby- modus (hoffe die bezeichnung ist so richtig) und im terminal erscheint folgende meldung:
Code:
[READY]
LEFT Touch

I2C ERROR - TWI STATE: 0x20
LEFT Touch
LEFT Touch
LEFT Touch
LEFT Touch
LEFT Touch
LEFT Touâ
[RP6BOOT]
offensichtlich ist im programm noch irgendetwas in verbindung mit I²C falsch.
grundsätzlich kann ich nicht behaupten, dass ich die I²C lib bzw. funktionen trotz gründlichem durcharbeitens wirklich 100%ig verstanden habe, da sie doch aus sehr vielen verschiedenen teilen bestehen.
um so mehr bin ich auf eure hilfe hier angewiesen.

mfg andi