Hallo zusammen =)
Ich habe bereits eine I2C-Kommunikation mit Polling programmiert, die auch funktioniert. Nun wollte ich das Ganze Interrupt gesteuert machen. Auch hier soll mein Controller (AT MEGA 164 PA) als Master arbeiten. Auf der Leiterplatte befindet sich ebenfallsnoch ein Temperatursensor (Auf Port B Pin 0). Dieser soll der Slave sein, wie auch schon beim Polling-Beispiel.
Der Master sendet also die Start-Condition, daraufhin wird TWINT gesetzt und das Programm springt in die ISR. Dort wird dann die Slave-Adresse mit Schreib- oder Lesebefehl (Adresse = 0x48 mit angehängter 0 oder 1) gesendet um den Slave auszuwählen. Danach springt das Programm auch wieder brav in die ISR, leider aber mit Status-Code 0x20, also einem NACK für die Adresse. Dies habe ich auch mit einem Oszi nachgemessen.
Doch woran liegt das, was mache ich falsch? Im Prinzip ist es das Gleiche wie beim Polling, mit dem Unterschied dass nicht gewartet wird bis TWINT gesetzt wird while (!(TWCR & (1<<TWINT))) sondern dies einen Interrupt auslöst.
__I2C_mitInterrupt.c
schon mal vielen Dank im Voraus
Lesezeichen