Hi Klucky...

Ich habe mir mal die twi.h angeschaut..
da wird START mit TW_START u. MT_SLA_ACK mit TW_MT_SLA_ACK
MT_DATA_ACK mit TW_MT_DATA_ACK
Deklariert



hoffe es hilft....





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) exit;      /*Ü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) exit;   /*Ü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) exit;   /*Ü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) 
{ 

i2c_start(SD20_W); 
i2c_data(0x7F); 
i2c_stop(); 

}

mfg uwe