@Dennis

Es ist natürlich schwer, einen Code zu analysieren, der nur aus Calls in eine unbekannte Library besteht.

Einiges kann man ahnen, anderes weniger.

I2C_start() und I2C_stop() dürften die entsprechenden Signale auf den Bus legen und I2C_write(xx) ein Byte senden. Aber was macht I2C_clock()? Die Clock auf einen Wert einstellen kann nicht sein, es gibt ja keinen Parameter und die Clock starten kann auch nicht sein, vor einem Start gibt es bei I2C keine Clock. Und was macht I2C_ack()? Ein ACK senden kann es nicht sein, das ACK kommt immer von dem, der gerade Daten empfangen hat. Und eine Abfrage, ob ein ACK empfangen wurde, kann es eigentlich auch nicht sein, dann würde ja irgendwas wie ein if im Code vorkommen.

Bevor das nicht wirklich geklärt ist, braucht man sich über Bitkombinationen keine Gedanken zu machen.

Hier mal kurz den Anfang einer I2C Übertragung:

Code:
Start erzeugen
Adressbyte senden
empfangenes ACK bzw NAK auswerten
wenn NAK
        Slave antwortet nicht, Übertragung abbrechen
        Stop erzeugen
   
wenn ACK
weiter senden
.
.
MfG Klebwax