Und Kommando zurück....

Die TWI-Kommunikation ist in der Tat in Ordnung, aber der Zahlenmüll, der beim Master rauskommt, wird beim Slave schon genauso reingeschrieben. Hatte vorher im Slave zu optimistisch getestet und deswegen angenommen, es gingen die richtigen Zahlen raus.
Also jetzt das neue Problem, immerhin schärfer eingegrenzt:

Diese Struktur:

Code:
volatile struct {
	unsigned char kp_pitch;
	unsigned char tn_pitch;
	unsigned char tv_pitch;
	unsigned char kp_roll;
	unsigned char tn_roll;
	unsigned char tv_roll;
} parameters_ctrl;
soll mit dieser Funktion:

Code:
ISR(SIG_2WIRE_SERIAL) {
int i;
	...

	if((TWSR&0xF8) == 0xA8) {								// Slave transmitter mode: transmit parameters
		for(i=0;i<sizeof(parameters_ctrl);i++) {
			TWDR=*( (unsigned char *) ((&parameters_ctrl)+i) );				//!!!!!!!!!!!!!!!!!!
			if(i==3) yellow_lights(TWDR);
			if(i<sizeof(parameters_ctrl)-1)	TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA);	//send TWDR
			else 				TWCR=(1<<TWINT)|(1<<TWEN);				//after last byte, don't expect ack
			while (!(TWCR & 0x80)) { };
		}
	    TWCR=(1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE);		//switch to receive mode
	}
}
über den TWI-Bus gesendet werden. Das Problem ist jetzt, die Struktur byteweise auf den Bus zu schaufeln. Da mir keine andere Methode eingefallen ist, die Struktur durchzu"iterieren", versuche ich das über Zeiger zu erreichen. Also nehme ich die Basisadresse "&name" und addiere in der Schleife die Zahlvariable. Dummerweise muß man dabei den Zeiger casten. Aber warum das ganze nicht funktioniert, sehe ich noch nicht. Sieht jemand mehr als ich?

Danke,
Nils

PS: Die Zeile mit "yellow_lights(...)" ist mein "printf"-Debugging. Es sind acht LEDs angeschlossen, die das TWDR anzeigen. Daran sehe ich, daß das TWDR bei den jeweiligen Schleifendurchläufen nicht auf 10, 20, 30, 40, 50, 60 steht (so ist die Struktur initialisiert, das habe ich geprüft), sondern auf 10, 62, 18, 13, 128, 129.