Hallo mare_crisium. Vielen Dank für die ausführliche Antwort.

Zitat Zitat von mare_crisium
hdtvfreak,
zu 1.: Doch, die Liste der Zustände findet sich im Datenblatt; Du musst aber das ausführliche nehmen (" ATmega32A (352 pages, revision A, updated 6/08 )" oder "doc8155.pdf"). Z.B. auf Seite 188. Dazu gibt's auch noch sehr hilfreiche Übersichten, z.B. auf Seite 190.
mare_crisium
Habs nun gefunden .

Zitat Zitat von mare_crisium
hdtvfreak,
zu 2.: Nee, das geht auch viel fixer! Guck' nochmal Deine SCL-Frequenzeinstellung nach (S. 182). Bei mir kommt das ACK praktisch verzögerungsfrei.
mare_crisium
Hm, lag wohl an den Waitroutinen in der Main Loop. Ohne diese klappt es perfekt. Die SCL Frequenz stimmt auch 100khz.
Habe gar nicht gewusst, dass Bascom bei Waitms auch keine Timer Interrupts mehr ausführt. Werde mir wohl etwas anderes überlegen müssen.

Zitat Zitat von mare_crisium
hdtvfreak,
zu 3.: Das TWINT "is set by hardware when the TWI has finished its current job and expects application software response" (Seite 202), unabhängig, ob der Sklave "NACK" oder "ACK" gesagt hat.
mare_crisium
Jetzt hab ich doch noch eine kurze Frage zum TWI Ablauf. Bisher habe ich es so verstanden:

1. Master beginnt und sendet Startsequenz.
2. Slave erkennt die Startsequenz, sendet Ack, löscht TWINT
3. Master erkennt, dass TWINT gelöscht wurde und liest dann aus dem Statusregister den aktuellen Stand aus und reagiert darauf.
--> sendet die Slave ID + setzt das R/W Bit auf Write
4. Slave löscht TWINT, Master erkennt es, liest Status aus und sendet Byte
5. Slave quittiert den Erhalt des Bytes, indem es TWINT löscht und ein Ack sendet
6. Master erkennt dies, liest Statusregister aus und schaut ob die Übertragung ok war.

So in etwa richtig?

Grüße

hdtvfreak