Liste der Anhänge anzeigen (Anzahl: 1)
Probleme mit I2C-Kommunikation mit Interrupt
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.
Anhang 25852
schon mal vielen Dank im Voraus
Liste der Anhänge anzeigen (Anzahl: 1)
Das Thema ist auf [Erledigt], da es mein Ziel war die Kommunikation als Master Interrupt-gesteuert zu programmieren. Dies funktioniert nun, im Anhang habe ich mal meinen jetzigen Code, er ist alles andere als perfekt, aber es war auch nur eine Übung. Falls Bedarf besteht, kann ich das Thema auch wieder auf nicht erledigt stellen.
Anhang 25878
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 25879
Dies müsste nun aber wirklich die richtige Version sein