danke SlyD für die hilfe. jetzt hab ich mal alles so abgeändert wie du gesagt hast:
Code:
 
#include "RP6ControlLib.h"
#include "RP6ControlServoLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_I2CMasterLib.h"





uint8_t move_state = 0; // Wenn nichts anderes zugewiesen ist, ist 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 watchDogRequest(void)
{
	static uint8_t heartbeat2 = false;
	if(heartbeat2)
	{
		clearPosLCD(0, 14, 1);
		heartbeat2 = false;
	}
	else
	{
		setCursorPosLCD(0, 14);
		writeStringLCD_P("#"); 
		heartbeat2 = true;
	}
}


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();
    initSERVO(SERVO3); 
startStopwatch3(); 
   I2CTWI_initMaster(100);  
   
   WDT_setRequestHandler(watchDogRequest); 
	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
	
	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
	
	mSleep(1500);
	
	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, false);
	I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, false);


   
   while(true) 
   {
servoansteuerung();
    task_SERVO();

	  infrarotkollission();
	
	task_checkINT0();
        task_I2CTWI();
   }
   return 0;
}
jetzt hab ich zumindest die meldung mit dem I²C error weg bekommen. allerdings springt mein programm auf dem mikrocontroller nach wie vor nach der abgelaufenen wartezeit (bei mir jetzt 1,5 sekunden) wieder in den standbymodus.

es muss also nach wie irgendetwas in meinen I²C funktionen falsch sein.
wer kann mir weiterhelfen?

mfg andi