Hi,
habe mal wieder ein Problem mit enweder meinem Code oder der PC Software.

Habe den slave wie folgt initialisiert:
Code:
DDRA = 0x00;								//set as input for address
TWSR = 0x00;
TWCR = 0x00;

//A6 A5 A4 A3 A2 A1 A0 | GC
TWAR = (TWI_ADDRESS<<1)|(1);				
TWCR = _BV(TWEN)|_BV(TWEA);
was meines Erachtens dem Datenblatt des ATMega16 entspricht.
Danach stehe ich in einer for-Schleife..

In der Interruptroutine steht:
Code:
SIGNAL(SIG_2WIRE_SERIAL){
	uint8_t* pData=&task.ucCommand;
	pData=&pData[DataCnt];
	
   switch(TWSR){ 
	    case(TW_SR_GCALL_ACK):			//==>
	    case(TW_SR_SLA_ACK):			DataCnt=0;TWCR |= _BV(TWEA);break;//got my address

		case(TW_SR_GCALL_DATA_ACK):	//==>
		case(TW_SR_DATA_ACK):{
			*pData=TWDR;
			DataCnt++;
			TWCR |= _BV(TWEA);			//ack
		}break;
		case(TW_SR_STOP):{
		   if(DataCnt==sizeof(TCMD)){
			   if(task.ucMAGIC_COOKIE==MAGIC_COOKIE)  	//minimum security must be
				   ucProcess=true;
			}
			DataCnt=0;
		}break;
		
		case(TW_SR_DATA_NACK):			//==>	
		case(TW_SR_ARB_LOST_SLA_ACK):	//nack next byte, and reset my counter and wait for new start
		case(TW_SR_ARB_LOST_GCALL_ACK)://==>
		default:			DataCnt=0;TWCR &= ~_BV(TWEA);break;
	}
   
   TWCR |=  _BV(TWINT);	//reset interrupt
}
Was auch nach bestem Wissen und Gewissen aus der Doku entnommen wurde.

Slave Adresse ist 1

Wenn ich nun im Basic-PC Tool send ID=1, d1=1, d2=2 eingebe wird meine Interruptroutine nicht angesprungen. Hat jemand bitte mal kurz Zeit sich das anzusehen?

Gruss
Michael