www.mikrocontroller.net

Forum: Compiler & IDEs ATMega TWI im Slave Receiver Mode


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian Strunck (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.