Hallo zusammen,
Ich habe ein für mich seltsames Problem mit meinem TWI.
Wenn mein Atmega8 als Master von einem Sensor Daten liest, dann muss er
schon nach dem zweitletztem Byte, welches er empfangen will, dem Sensor
ein NACK (not acknowledge) senden. Wenn er das nicht tut, dann bleibt
der Controller in der while Schleife einer darauffolgendne TWI_Start
Funktion hängen, sprich das TWINT Flag wird nicht mehr gesetzt.
Die Stelle im Code sieht so aus:
1 | ** Send START condition
|
2 | */
|
3 | TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
|
4 | /*
|
5 | ** Wait until transmission completed
|
6 | */
|
7 | while (!(TWCR & (1<<TWINT))){} !!!!!hier bleibt er hängen !!!!!!!!!
|
Anscheinden wird in diesem Fall das TWINT Flag nicht mehr gesetzt,
obwohl eine Start Kondition vom Controller gesendet wurde.
Ich verstehe dieses Verhalten nicht, sollte es nicht so sein, dass der
Master als Receiver nach dem letzten Byte, welches er empfangen will,
ein NACK senden sollte und somit der Sensor weiss, dass er nichts mehr
senden soll? Ich habe irgendwo in einem Forum mal aufgenommen, dass das
passieren kann, wenn gewisse Register des Sensors doppelt gebuffert
sind. Im Datenblatt finde ich allerdings nichts dazu.
Hat jemand eine Idee?
Vielen Dank,
Roman