Hallo Rolf,
ich habe jetzt das Erweiterungsmodul M32 stillgelegt, bis bei mir da eine bessere Lösung funktioniert. Bis dahin verwende ich nur das RP6 Base als Master, womit auch alle SRF Sensoren funktionieren.
Da ich schon mit dem Arduino Mega 2560 die einzelnen Bauteile getestet hatte und mit Wire.h gut zu rande kam, stellten sich schon die ersten Probleme mit der I2C Umstellung beim RP6 ein.
Wobei mich da jetzt das nächste Problem einholt. Mit dem Arduino konnte ich den TSL2561 ganz gut ansprechen, aber mit der jetzigen Lib (RP6I2CmasterTWI.h) habe ich so meine Probleme.

Der (Beispiel) Code im Arduino:
Code:
#include <Wire.h>

void setup()
{
  Wire.begin();                // join I2C bus (address optional for master)
  Serial.begin(9600);          // start serial communication at 9600bps
}

int reading = 0;

void loop()
{
  Wire.beginTransmission(115);                            
  Wire.write(byte(0x00));    
  Wire.write(byte(0x51));      
  Wire.endTransmission();     
  delay(70);  
  Wire.beginTransmission(115);
  Wire.write(byte(0x02));     
  Wire.endTransmission();      
  Wire.requestFrom(115, 2); 

  if(2 <= Wire.available())    // if two bytes were received
  {
    reading = Wire.read(); 
    reading = reading << 8;   
    reading |= Wire.read();
    Serial.println(reading); 
  }

  delay(500); 
}


Übertragung (Kurzform) auf RP6I2CmasterTWI.h im RP6 Base:

Code:
#include "RP6RobotBaseLib.h" 	
#include "RP6I2CmasterTWI.h"

#define SRF_LEFT_ADR  0xE6
#define SRF_MIDDLE_ADR 0xE4
#define SRF_RIGHT_ADR 0xE2
#define TSL_2561_ADR 0x39

#define MEASURE_US_LEFT_LOW 	0
#define MEASURE_US_LEFT_HIGH 	1
#define MEASURE_US_RIGHT_LOW 	2
#define MEASURE_US_RIGHT_HIGH 	3
#define MEASURE_US_MIDDLE_LOW 	4
#define MEASURE_US_MIDDLE_HIGH 	5
#define MEASURE_TSL_DATA_LOW	6
#define MEASURE_TSL_DATA_HIGH	7

uint16_t distance_left = 0;
uint16_t distance_right = 0;
uint16_t distance_middle = 0;
uint16_t lux = 0;

//I2C Bus Werteabfrage auf Adressen
void I2C_requestedDataReady(uint8_t dataRequestID)
{
	uint8_t messageBuf[8];
	static uint8_t dist_tmp;
	switch(dataRequestID)
	{
		case MEASURE_US_LEFT_HIGH:
			I2CTWI_getReceivedData( messageBuf, 2 );
			dist_tmp = messageBuf[0];
			I2CTWI_transmitByte(SRF_LEFT_ADR, 3);
			I2CTWI_requestDataFromDevice(SRF_LEFT_ADR, MEASURE_US_LEFT_LOW, 1);
		break;
		case MEASURE_US_LEFT_LOW:
			I2CTWI_getReceivedData( messageBuf, 2 );
			distance_left = messageBuf[0] + (dist_tmp << 8);
			writeString_P("SRF_L: ");
			writeInteger(distance_left, DEC);
			writeString_P(" cm ");
		break;
		case MEASURE_US_RIGHT_HIGH:
			I2CTWI_getReceivedData( messageBuf, 2 );
			dist_tmp = messageBuf[0];
			I2CTWI_transmitByte(SRF_RIGHT_ADR, 3);
			I2CTWI_requestDataFromDevice(SRF_RIGHT_ADR, MEASURE_US_RIGHT_LOW, 1);
		break;
		case MEASURE_US_RIGHT_LOW:
			I2CTWI_getReceivedData( messageBuf, 2 );
			distance_right = messageBuf[0] + (dist_tmp << 8);
			writeString_P("\tSRF_R: ");
			writeInteger(distance_right, DEC);
			writeString_P(" cm");
		break;
		case MEASURE_US_MIDDLE_HIGH:
			I2CTWI_getReceivedData( messageBuf, 2 );
			dist_tmp = messageBuf[0];
			I2CTWI_transmitByte(SRF_MIDDLE_ADR, 3);
			I2CTWI_requestDataFromDevice(SRF_MIDDLE_ADR, MEASURE_US_MIDDLE_LOW, 1);
		break;
		case MEASURE_US_MIDDLE_LOW:
			I2CTWI_getReceivedData( messageBuf, 2 );
			distance_middle = messageBuf[0] + (dist_tmp << 8);
			writeString_P("\tSRF_M: ");
			writeInteger(distance_middle, DEC);
			writeString_P(" cm\n");
		break;
		case MEASURE_TSL_DATA_HIGH:
			I2CTWI_getReceivedData( messageBuf, 2 );
			dist_tmp = messageBuf[0];
			I2CTWI_transmitByte(TSL_2561_ADR, 3);
			I2CTWI_requestDataFromDevice(TSL_2561_ADR, MEASURE_TSL_DATA_LOW, 1);
		case MEASURE_TSL_DATA_LOW:
			I2CTWI_getReceivedData( messageBuf, 2 );
			lux = messageBuf[0] + (dist_tmp << 8);			//
			writeString_P("\tTSL: ");
			writeInteger(lux, DEC);
			writeString_P(" lux\n");
		break;
	}
}

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

//SRF08 Sensorenfunktion
void task_SRF(void)
{
	static uint8_t measureInProgress = false;
	static uint8_t channel = 0;
	if(!measureInProgress) // Start measurement ONCE only
	{
		if(TWI_operation == I2CTWI_NO_OPERATION) // Busverkehrüberwachung, freie Transfermöglichkeit
		{
			if(channel == 0)
				I2CTWI_transmit2Bytes(SRF_LEFT_ADR, 0, 81);
			else if(channel == 1)
				I2CTWI_transmit2Bytes(SRF_RIGHT_ADR, 0, 81);
			else if(channel == 2)
				I2CTWI_transmit2Bytes(SRF_MIDDLE_ADR, 0, 81);
			measureInProgress = true;
			setStopwatch1(0);
		}
	}
	else if(getStopwatch1() > 500) // 500ms Messverzögerung
	{
		if(channel == 0)
		{
			I2CTWI_transmitByte(SRF_LEFT_ADR, 2);
			I2CTWI_requestDataFromDevice(SRF_LEFT_ADR, MEASURE_US_LEFT_HIGH, 1);
			channel = 1;
		}
		else if(channel == 1)
		{
			I2CTWI_transmitByte(SRF_RIGHT_ADR, 2);
			I2CTWI_requestDataFromDevice(SRF_RIGHT_ADR, MEASURE_US_RIGHT_HIGH, 1);
			channel = 2;
		}
		else if(channel == 2)
		{
			I2CTWI_transmitByte(SRF_MIDDLE_ADR, 2);
			I2CTWI_requestDataFromDevice(SRF_MIDDLE_ADR, MEASURE_US_MIDDLE_HIGH, 1);
			channel = 0;
		}
		measureInProgress = false;
		setStopwatch1(0);
	}
}

int task_TSL()
{
	static uint8_t measureInProgress = false;
	static uint8_t channel = 0;
	uint8_t DataLow = 0;
	uint8_t DataHigh = 0;
	uint8_t Channel3 = 0;
	
	if(!measureInProgress)
	{
		if(TWI_operation == I2CTWI_NO_OPERATION)
		{
		if(channel == 3)
				I2CTWI_transmit2Bytes(TSL_2561_ADR, 140, DataLow);
				I2CTWI_transmit2Bytes(TSL_2561_ADR, 141, DataHigh);
			measureInProgress = true;
			setStopwatch2(0);
		}
	else if(getStopwatch2() >500)
	I2CTWI_transmitByte(TSL_2561_ADR, 2);
	I2CTWI_requestDataFromDevice(TSL_2561_ADR, MEASURE_TSL_DATA_HIGH, 1);
	}
	measureInProgress = false;
	setStopwatch2(0);
	Channel3 = DataHigh*256+DataLow;
	return(Channel3);
}



int main(void)
{
	initRobotBase();
	
	I2CTWI_initMaster(100);
	I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
	I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);

	setLEDs(0b111111);
	mSleep(500);	   
	setLEDs(0b000000);
	
	powerON();
		
	
	startStopwatch1();	//SRF
	startStopwatch2();	//TSL2561
	startStopwatch3();
	
	while(true)  
	{
		task_TSL();			//kommt noch...
		task_SRF();
		task_I2CTWI();
		task_RP6System();
	}
	return 0;
}

Klappt noch nicht.

Nach dem Chip Hersteller soll man die Struktur beachten:
Read ADC Channels Using Read Byte Protocol

Address = 0x39 //Slave addr − also 0x29 or 0x49
Command = 0x8C //Address the Ch0 lower data register
ReadByte (Address, Command, DataLow) //Result returned in DataLow
Command = 0x8D //Address the Ch0 upper data register
ReadByte (Address, Command, DataHigh) //Result returned in DataHigh
Channel0 = 256 * DataHigh + DataLow //Shift DataHigh to upper byte
Command = 0x8E //Address the Ch1 lower data register
ReadByte (Address, Command, DataLow) //Result returned in DataLow
Command = 0x8F //Address the Ch1 upper data register
ReadByte (Address, Command, DataHigh) //Result returned in DataHigh
Channel1 = 256 * DataHigh + DataLow //Shift DataHigh to upper byte


Da bräuchte ich Hilfe.

Gruß
Mac80