Beim Master sind mir schon einige Fehler aufgefallen. Vielleicht ist das auch nur hier (nicht ganz zu 100% gleiche Programm wie beim AVR Studio).
Du schreibst immer "PORTC = 1<<PC0;" bzw "PORTC = 0<<PC0;". Das ist falsch.
Das sollte man so schreiben:
zum Setzen: "PORTC |= (1<<PC0);" => mit "|=" wird nur bitweise gesetzt und beim "1<<PC0" fehlt bei dir die Klammer
zum Löschen: "PORTC &= ~(1<<PC0);" => mit "&=" und "~" wird bitweise gelöscht und beim "0<<PC0" fehlt bei dir die Klammer
Das findet man z.B. im (sehr guten) AVR GCC Tutorial bei www.mikrocontroller.net
Beim Slave ist mir aufgefallen das die ISR (Interruptroutine) falsch ist.
Der Interrupt muss so aussehen: "ISR (TWSI_vect) {...}"
Bei einem Interrupt muss immer stehen "ISR (xxx_vect){}" => statt xxx muss der jeweilige Interrupt stehen wie z.B. Int0,...
Hier etwas zu Interrupts (von www.mikrocontroller.net) http://www.mikrocontroller.net/artic...r_.28WinAVR.29
Die einzelnen Register,... habe ich mir nicht angesehen. Im Datenblatt auf S170 ist ein Beispiel für eine I2C Übertragung (Master). Hast du schon andere I2C Hardware angesteuert (wie z.B. Portexpander)? Ich würde zuerst einen I2C Baustein ansteuern (z.B: PCF8574,...) Wenn das klappt würde ich stattdessen einen µC mit einem I2C Slave Programm (mit gleicher Adresse) ansteuern. Somit weiß man ob der Master funktioniert.
MfG Hannes
Lesezeichen