Hi, bin gerade dabei, zwei Mega8 testweise über den TWI zu verbinden und schaff es mittlerweile auch, Daten von dem einen Controller auf den anderen zu schieben. Allerdings finde ich keine Möglichkeit abzufragen, wie ich beim Slave nach neuer Aktivität auf dem Bus pollen kann. Das TWSR liefert immer 0xF8 (keine Aktivität). Das TWCR ist mit 0x45 beschrieben, das TWINT Bit im TWCR ändert sich nicht. (Obwohl ich auch befürchte, dass es dies in diesem Mode auch nicht tut.) Ich kann zwar Daten aus dem TWDR lesen und es sind auch immer die aktuellen Daten (Master sendet einen unsigned char, der alle Sekunde um 1 inkrementiert wird) und wenn ich alle Sekunde einmal im Slave das TWDR auslese, bekomme ich auch 1 mal das aktuelle Zeichen. Nun will ich aber, dass ich nicht von der Zeit abhängig bin, sondern einfach nen Status abfrage, ob sich was ändert. Könnte ja mal sein, dass der Master nen anderen Zeitabstand hat. So, ich hoffe mir kann dabei jemand helfen, Gruss und vielen Dank schonmal, Sebastian
Hi sowas macht man doch nicht im Poll-Betrieb. Dafür nutzt man Interrupts. Dann ist das eigentlich ganz einfach. Du bekommst bei bestimmten Ereignissen auf dem Bus einen Interrupt, behandelst den Zustand des TWSR und setzt TWCR entsprechen dem Vorgängerzustand neu. Matthias
War mir irgendwie klar, dass genau die Antwort kommt, aber gut. Mir gehts auch momentan nicht um eine konkrete Anwendung, sondern einfach, dass es einmal funktioniert hat, damit ich weiss, wie es geht. Danach kommt die Sache mit den Interrupts. Aber trotzdem danke für die schnelle Antwort .) Sebastian
Hi wenn du pollst könntest du ja Statuswechsel verpassen. Das ist ansich keine gute Idee. Aber im PRinzip läuft es ja genau gleich ab: 1. Statuswechsel detektieren 2. Auswertung des Status 3. TWCR passend neu schreiben Ich verstehe eh nicht wie das bei dir überhaupt funktionieren kann wenn du bei einem Statuswechsel das TWCR nicht neu schreibst. Solange das nicht beschreiben wird macht das TWI AFAIK garnichts. Matthias
Ich muss ehrlich sagen, da wunder ich mich auch drüber, aber das TWDR wird definitiv erneuert, auch wenn ich das TWINT nicht neu setze. Laut Datenblatt sollte das Bit ja in jedem fall freigesetzt werden. Na ja, ich forsche eh weiter, aber Danke. Sebastian
Du must im Slave das TWEA Bit setzen, dann kriegst Du auch einen neuen Status, nachdem ein Start+SLA gesendet wurde und bei jedem Datenbyte bis zum Stop. Daß das TWDR ständig mitliest, obwohl nicht als Slave adressiert, ist zwar lustig, aber nicht dokumentiert. Wenn Du das HW-I2C nutzen willst, mußt Du Dich schon an den I2C-Standard halten. Peter
Da das TWCR auf 0x45 gesetzt ist, ist das TWEA Bit mit gesetzt. Das TWDR liefert nur richtige Daten, wenn die Adresse stimmt. Viel mehr hab ich da bis jetzt auch nicht rausgefunden. Hab da aber abgebrochen und hab noch ne interuptgesteuerte Software gebastelt. Funktioniert in der Tat zufriedenstellender. Danke nochmal an die eifrigen Poster. Sebastian
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.