Minifriese
12.07.2006, 16:26
Moin moin!
Also, beiliegende Codes sollen eine Kommunikation zwischen einem ATmega16 (Master Receiver) und einem ATMega8 (Slave Transmitter) über TWI aufbauen. Es funktioniert bis zum ersten Absatz in der Funktion TWIreaddata() in TWIRCV.C. Die print-Befehle sind meine Version des guten alten printf-Debuggings, sie geben ein paar Zahlen am LCD aus und sind durchnumeriert, um zu sehen, wo das Programm hängt.
So wie die Codes hier gedruckt sind, sehe ich auf dem Display als TWSR den Statuscode 0x40 und die Nummer 6, das heißt, der Slave hat erkannt, daß er angesprochen wird und mit ACK bestätigt.
Wenn ich aber die Zeile mit dem print(....,7) nicht wegkommentiere, bekomme ich auf dem Display die Anzeige Statuscode 0xF8 und die Nummer 7. Dort bleibt das Programm also hängen und sagt mir, daß der Zustand nicht definiert ist, weil TWINT nicht gesetzt ist. Eigentlich sollte aber das erste Datenbyte übertragen und ACK zurückgemeldet worden sein und der Statuscode dementsprechend 0x50 sein. Scheint aber nicht zu funktionieren, obwohl das Ansprechen des Slaves mit seiner Adresse geklappt hat.
Sieht jemand, woran das liegen könnte?
Gruß,
Nils
Also, beiliegende Codes sollen eine Kommunikation zwischen einem ATmega16 (Master Receiver) und einem ATMega8 (Slave Transmitter) über TWI aufbauen. Es funktioniert bis zum ersten Absatz in der Funktion TWIreaddata() in TWIRCV.C. Die print-Befehle sind meine Version des guten alten printf-Debuggings, sie geben ein paar Zahlen am LCD aus und sind durchnumeriert, um zu sehen, wo das Programm hängt.
So wie die Codes hier gedruckt sind, sehe ich auf dem Display als TWSR den Statuscode 0x40 und die Nummer 6, das heißt, der Slave hat erkannt, daß er angesprochen wird und mit ACK bestätigt.
Wenn ich aber die Zeile mit dem print(....,7) nicht wegkommentiere, bekomme ich auf dem Display die Anzeige Statuscode 0xF8 und die Nummer 7. Dort bleibt das Programm also hängen und sagt mir, daß der Zustand nicht definiert ist, weil TWINT nicht gesetzt ist. Eigentlich sollte aber das erste Datenbyte übertragen und ACK zurückgemeldet worden sein und der Statuscode dementsprechend 0x50 sein. Scheint aber nicht zu funktionieren, obwohl das Ansprechen des Slaves mit seiner Adresse geklappt hat.
Sieht jemand, woran das liegen könnte?
Gruß,
Nils