Das macht i2c_init(), zumindest für die Softwareversion i2cmaster. Für die Hardwareversion twimaster braucht man die Ports überhaupt nicht anzufassen, das wird von der TWI-Einheit gemanagt, analog zum UART, wo man sich auch um nix kümmern muss.

Ein Blick in die Source von i2cmaster offenbart einen bug bei großen AVRs.
Fleury geht davon aus, daß PINn, DDRn und PORTn aufeinander folgen. Für große ATmegas ist das AFAIK nicht immer so (zB PortE).

Welche Version verwendest du denn?
Sonst alles gecheckt?
  • #define für CPU-Frequenz (nicht notwendig gleich deiner Quarz-Frequenz)
  • #defines für Ports (falls Soft-Version)
  • Pullups an SCL und SDA
  • Slave-Adresse
  • Objekte neu generiert nach Anpassung der Makros? Wirklich?
  • Ist das Slave-Protokoll so wie im Slave-Manual?


Ich hab mir gestern nach deinem Post mal das Fleury-Zeug geholt, weil ich auch noch was via I2C machen werde.
Hab noch ein 24C02 rumfliegen und an nen Mega8 gestöpselt.
Ging alles auf Anhieb so wie man sich das wünscht; allerding mit etwas angestaubtem Compiler (gcc 3.3) und eigenem Makefile. Aber das sollte nix zur Sache tun...

BTW: *Was* funktioniert denn dabei nicht?