Hi,

ich hab mal den Code zusammengeschrumpft und getestet die Fehler bleiben.
Nun soll der Slave einfach nur die Daten einlesen / der Master nur senden.

Code:
#define NACK 0
#define ACK 1

void twi(void)
{
	cli();
	
	//Pullups
	DDRC &= ~((1<<PC1) | (1<<PC0));
	PORTC |= ((1<<PC1) | (1<<PC0));
		
	//TWI Init
	TWBR = 10;
	TWAR = (15<<1);
	TWCR = (1<<TWEN)|(1<<TWEA);
	
	uint8_t i = 0;

	while(1)
	{	
		// If TWINT set
		if (TWCR & (1<<TWINT))
		{
			switch (TWSR)
			{
				// Slave & Read Flag
				case 0x60:
					i = twi_read(ACK);
					dectohex(i);
					i = twi_read(NACK);
					dectohex(i);
					//TWI Stop
					TWCR = ((1<<TWINT) | (1<<TWEN) | (1<<TWEA) | (1<<TWSTO));
					break;

			}
		}

	}
}

uint8_t	twi_read(uint8_t ack_flag)
{
	if (ack_flag)
	{
		TWCR = ((1<<TWINT) | (1<<TWEN) | (1<<TWEA));
	} else {
		TWCR = ((1<<TWINT) | (1<<TWEN));
	}
	while (!(TWCR & (1<<TWINT)));
	return TWDR;
}

Code:
$regfile = "m168def.dat"
$crystal = 14745000
$baud = 19200

$lib "i2c_twi.lbx"                                          ' Für Hardware TWI

' Externe Pullups vorhanden
Config Scl = Portc.5
Config Sda = Portc.4

'Funktioniert nur mit Waitms 1
Config Twi = 50000                                          ' Init TWBR und TWS

'Funktioniert
'Config Twi = 400000                                          ' Init TWBR und TWS

Twcr = &B00000100                                           ' nur TWEN setzen

Dim A As Byte

Do

   I2cstart                                                 'start condition
   A = &B00011110
   I2cwbyte A                                               'slave address
   A = &H30
   I2cwbyte A                                               'slave address
   A = &H30
   I2cwbyte A                                               'slave address
   I2cstop

'   Waitms 1

Loop

End