Hi Leute,

ich habe meinen RP6 mal mit einem SRF10 Ultraschallmodul ausgestattet. Funktioniert auch wunderbar, wenn ich nichts weiter mache, als den SRF10 anzusteuern.
Ich möchte den jetzt aber gerne in das M32-Beispielprogramm "Example_10_Move2" integrieren, in dem ich auch schon eine Funktion zur Steuerung mit einer RC5-Fernbedienung habe.
Folgendes habe ich in "I2C_requestedDataReady" eingebaut:

Code:
void I2C_requestedDataReady(uint8_t dataRequestID)
{
	// We need to check if this is an INT0 Request from the Robot Base unit.
	// The Function call inside the if condition returns true if it was an
	// interrupt request, so we have to negate it here and if it was NOT
	// an interrupt request from the Robot base we can check any other sensors
	// from which you may have requested data...
	if(!checkRP6Status(dataRequestID)) 
	{	
		// Here you can Check other sensors/microcontrollers with their own
		// request IDs - if there are any...
		
		uint8_t messageBuf[8];
		static uint8_t dist_tmp;
		switch(dataRequestID)
		{
			case MEASURE_US_HIGH: // High data register
				// get received data ...
				I2CTWI_getReceivedData(messageBuf, 2);
				dist_tmp = (messageBuf[0]);
				// ... and request low data byte:
				I2CTWI_transmitByte(SRF_ADR, 3);
				I2CTWI_requestDataFromDevice(SRF_ADR, MEASURE_US_LOW, 1);
			break;
			case MEASURE_US_LOW: // low data byte:
				I2CTWI_getReceivedData(messageBuf, 2);
				distance = messageBuf[0] + (dist_tmp << 8);	// Formel zur Distanzberechnung; siehe auch SRF10-Doku S.3
				
				// ----------------------------------
				// Output measured distance:
				writeString_P("Distance: ");
				writeInteger(distance, DEC);
				writeString_P(" cm | ");
				// show a simple text bargraph:
				uint16_t dist_count;
				for(dist_count = distance; dist_count > 4; dist_count-=2)
					writeChar('#');
				writeChar('\n');
				// ... of course you can also use "distance" as a normal
				// variable everywhere else in your program! 
				// ----------------------------------
			break;
		}
	}
}
Mit den dataRequestIDs

Code:
#define MEASURE_US_LOW 	1
#define MEASURE_US_HIGH 2
Der Sensor funktioniert damit auch weiterhin super. Sobald ich aber eine Taste auf der Fernbedienung drücke, wird mein Programm resettet. Der Reset ist zeitlich wirklich unmittelbar auf den Tastendruck auf der Fernbedienung zurückzuführen.

Hat da vielleicht jemand ne Idee, woran das liegen könnte? Ich verstehe dieses Verhalten nicht so ganz. Hab keine Ahnung, wo ich da bei der Fehlersuche ansetzen soll

An irgendwelchen I2C Funktionen hab ich nichts verändert (bis natürlich auf die "I2C_requestedDataReady"). Falls ihr noch weitere Infos braucht nur raus damit.

Vielen Dank schonmal für jeden Tip!!
Schöne Grüße,
V:X