So jetzt wird das ganze soweit fehlerfrei kompiliert. Allerdings habe ich immer noch das Problem das es nicht das tut was es soll ! Ich wollte damit einen SD20 ansprechen. Ich habe das ganze jetzt mal so geändert das ich es an PortA ablesen kann wenn ein sendeversuch fehlgeschlagen ist.

Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <avr/twi.h>
#include <stdlib.h> /*für exit*/

/*SD20 Adresse mit Lese- oder Schreibbit*/
#define SD20_W 0xC2
#define SD20_R 0xC3

typedef unsigned char BYTE;
typedef unsigned short WORD;

void i2c_start(BYTE ADRESSE)
{
	
	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);   /*Startbedingung senden*/
	while (!(TWCR & (1<<TWINT)));            /*Darauf warten dass TWINT gesetzt wurde was aussagt das die Startbedingung gesendet wurde*/
	if ((TWSR & 0xF8) != TW_START) PORTA=0x01;      /*Überprüfen  ob  START erfolgreich gesendet wurde sonst abbrechen*/
	TWDR = ADRESSE;                        /*Slave Adresse in TWDR laden*/
	TWCR = (1<<TWINT)|(1<<TWEN);            /*TWINT und TWEN löschen damit die ADRESSE gesendet wird*/
	while (! (TWCR & (1<<TWINT)));            /*Darauf warten dass TWINT gesetzt wurde was aussagt dass die ADRESSE gesendet wurde*/
	if ((TWSR & 0xF8) != TW_MT_SLA_ACK) PORTA=0x02;   /*Überprüfen ob ADRESSE erfolgreich gesendet wirde sonst abbrechen*/

}
void i2c_data(BYTE DATA)
{
	
	TWDR = DATA;                        /*DATA in TWDR laden*/
	TWCR = (1<<TWINT)|(1<<TWEN);            /*TWINT und TWEN löschen damit die DATA gesendet wird*/
	while (! (TWCR & (1<<TWINT)));         /*Darauf warten dass TWINT gesetzt wurde was aussagt dass die DATA gesendet wurde*/
	if ((TWSR & 0xF8) != TW_MT_DATA_ACK) PORTA=0x04;   /*Überprüfen ob DATA erfolgreich gesendet wirde sonst abbrechen*/

}
void i2c_stop(void)
{
	
	TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);   /*Stopbedingung senden*/

}
int main(void)
{
	
	DDRA=0xFF;
	PORTA=0x0;
	
	i2c_start(SD20_W);
	i2c_data(0x01);
	i2c_data(0x7F);
	i2c_stop();
	
	while(1)
	{}
		
}
Und bei mir wird immer der PortA auf 0x02 geschaltet also bleibt das Programm an folgender stelle hängen:

Code:
	if ((TWSR & 0xF8) != TW_MT_SLA_ACK) PORTA=0x02;
woran könnte das liegen?

So das habe ich noch zum ansprechen eines SD20 auf der Roboter-Teileseite im Forum gefunden:

Ein Schreibzugriff läuft also wie folgt ab:

- Startbedingung
- Adresse senden RW-Bit LOW (0xc2 / 194)
- Register senden (z.B. 1 für Servo 1)
- Wert schreiben (127 für Mittelstellung)
- Stopbedingung

Läuft mein schreibzugriff auch so hab oder habe ich da etwas falsch gemacht?