Hallo, ich versuche gerade, das TWI mit einem ATmega32 zum Laufen zu bekommen. Da ich ständig fehlerhafte Daten bekommen habe, hab ich das ganze Befehl für Befehl, in der Reihenfolge wie es im Datenblatt steht, über die UART (Terminalprogramm) gesteuert händisch abgetestet - mit dem Digital-Oszi an den beiden Leitungen. Erstmal geht alles, aber trotzdem - ich kann mich nur wundern, was ich da sehe... Und zwar kommt es dazu, dass wenn z.B. für einen Busreset nach einem Fehler mehrere Stop-Conditions hintereinander gesendet werden, der µC SCL und SDA beide auf GND zieht, dabei aber im TWSR die 0x08 stehen hat (also "Start Condition gesendet"!). In diesem Zustand funktioniert auf dem Bus natürlich nichts mehr richtig. Daten werden dabei übrigens gesendet, aber die Leitungen bleiben im Ruhezustand immer auf low, und Start und Stop werden nicht korrekt gesendet. Schicke ich dann nochmal Stop, gehen die Leitungen wieder auf high, und im TWSR steht 0x00. Laut Datenblatt bedeutet dieser Zustand einen Busfehler, in dem man eine Stop Condition senden soll. Wenn ich das mache, fällt er aber wieder in den "beide Leitungen low, TWSR=0x08"-Zustand. Was stimmt denn jetzt? Und wie kann ich unter diesen Umständen einen Busfehler von einer gesendeten Start-Condition unterscheiden? Er gerät nämlich manchmal bei "normalen" Busbedingungen in so einen Zustand...
Edit: ich hab inzwischen festgestellt, dass der Mega32 im Idle-Zustand den Befehl, eine Stop-Condition zu senden, wie eine Start-Condition behandelt. Ob er dann auch den Interrupt auslöst hab ich noch net rausfinden können... sieht also so aus, als müsste ich da in der Logik Sorge für tragen, das hätten die aber ruhig mal ins Datasheet schreiben können...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.