über die lib von fleury hab ich das auch schon probiert. unten der code dazu. die zahlen die per printf geschrieben werden, sind dazu da um zu sehen wie weit er kommt. leider wird die zahl 12 nicht mehr ausgegeben, also es wird nur die zahl 11 ausgeben und es läuft nicht mehr weiter.



Code:
#include <inttypes.h>	
#include <stdio.h>
#include <stdlib.h>

#include <avr/io.h>
#include "i2cmaster.h"


#define SLAVE_ADRESSE 0xE0
#define F_CPU 16000000UL
#define BAUD 9600		//Baudrate
#define MYUBRR F_CPU/16/BAUD-1  //Werte für UBRR Register 

#include <util/delay.h>
...
unsigned int read_cm(unsigned char address);

int main(void)
{

        stdout = &mystdout;
	USART_Init ( MYUBRR ); //USART initialisieren

	printf( "*** Ultraschallsensor SRF02 ***\n");

int distance;
i2c_init();
DDRD = 0xff;
PORTD = 0xff;
read_cm(SLAVE_ADRESSE);
distance = read_cm(SLAVE_ADRESSE);

printf( "    Abstand: %dcm\n", distance);

while(1);

return 0;
}

unsigned int read_cm(unsigned char address)
{
	printf("1");
   unsigned char lowbyte,highbyte;
   unsigned int distance;
	printf("2");
   i2c_start_wait(address+I2C_WRITE);
   	printf("3");
   while (i2c_write(0));
   	printf("4");
   while (i2c_write(81));
   	printf("5");
   i2c_stop();
   	printf("6");

   i2c_start_wait(address+I2C_WRITE);
   	printf("7");
   while (i2c_write(2));
   	printf("8");
   i2c_stop();
   	printf("9");

   _delay_ms(65);
   	printf("10");

   i2c_start_wait(address+I2C_READ);
   	printf("11");
   highbyte = i2c_readAck();
   	printf("12");
   lowbyte = i2c_readNak();
   	printf("13");
   distance = (highbyte*256)+lowbyte;
   	printf("14");
   i2c_stop();
   	printf("15");

   if(distance > 150)
   {
      PORTD = 0x00;
	  printf("6");
   }

   return distance;

}