mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI-Slave soll Wartezyklen erzwingen können


Autor: Daniel Roth (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ein I2C-Slave unter Verwendung des Hardware-TWI (z.B. Mega8)
Wartezyklen erzwingen, um beispielsweise nach dem Empfang eines
Datenbytes genügend Zeit zur Verarbeitung zu haben ?

Normalerweise wird ja bei I2C beim Acknowledge-Takt die Clockleitung
vom Slave auf low gehalten, um einen Waitstate einzufügen, nur hat man
beim Hardware-TWI keinen Einfluss auf die Zeitdauer des
Acknowledge-Taktes, oder doch ?

Im Datenblatt des Mega 8 steht, der Master soll dem Slave genügend Zeit
geben (was wenn diese Zeit variiert?) bzw. soll der Slave mit NoAck
antworten, wenn er noch beschäftigt ist (was mir nicht gefällt, da
NoAck für Fehler vorbehalten bleiben soll)..

Habt ihr eine Idee ? Danke
Daniel

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Hardware I2C geht alles vollautomatisch.

Der Slave hält SCL solange auf 0 bis Du es im Interrupthandler wieder
freigibst.

Und der Master bleibt solange hängen bis er wieder eine 1 auf dem SCL
sieht.


Peter

Autor: Daniel Roth (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter

Ja, das Clock-auf-low-halten macht der Slave, bis das Interrupt-Flag
wieder gelöscht wird.. nur kommt der Interrupt an einer ungünstigen
Stelle vor dem Acknowledge. Man hat also keine Möglichkeit, den
Acknowledge-Zyklus zu verlängern !?

Ich dachte immer, ein Großteil der I2C-Master-(Hardware)Bausteine prüft
nur beim Acknowledge, ob der Clock von Slave länger auf low gehalten
wird. Somit wäre das TWI-Interface nicht so ganz "kompatibel" dazu.

Notfalls werde ich meinen Master (in Software) etwas aufwendiger machen
und nicht nur beim Acknowledge die Clock-Leitung überprüfen..

Grüße
Daniel

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut I2C Spezifikation kann jeder SCL = 0 gestreckt werden, deshalb
prüft jedes Hardware I2C auch bei jedem Bit.
Sonst könnte ja auch die Arbitrierung (Multi-Master) nicht
funktionieren.

Das ACK / NACK dient nur dazu, die Übertragung abzusichern.
Bei einem Hardware I2C Slave mußt Du also vorher setzen, ob Du bereit
bist, das Byte anzunehmen oder nicht.


Peter

Autor: Daniel Roth (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, Danke !

ich schreibe meinen Master um..

Daniel

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.