Zum Programm:

1)Du initalisierst die I2C_Schnittstelle 2 mal.
2)In compact c legt man beim initalisieren gleich noch den Arbeitstakt fest: "I2C_Init(I2C_100kHz);". Kanst ja mal das ausprobieren.
3)Meistens muss man beim I2C_Bus nicht warten, er wartet von alleine. An deiner Stelle würde ich das Programm mal auf die wirklich wichtigen Sachen, nur mal zum testen, kürzen.
4)Du schreibst "UCSRB |= (1<< TXEN) | (1<<RXEN);", aber "TX" und "RX" sind doch die Ports der RS232-Schnittstelle, bei I2C heißen die Leitungen "SDA" und "SCL".
5)Hast du schon überprüft, ob der Compiler alle Include-Dateien findet?

Hoffentlich geht dann was; probier das Programm so zu kürzen:


I2Cstart(Deviceadresse+write)
I2Cwrite(Registeradresse, ab wo gelesen werden soll)
I2Cstart(Deviceadresse+read)
highbyte = I2Cread(Ack)
lowbyte = I2cread(Nack)
I2Cstop()
distance = (highbyte*256)+lowbyte

Wenn ich mehr weiß, schreib ich, viel Erfolg

Tenorm