Forum: Mikrocontroller und Digitale Elektronik TWI bei Mega8 - Nicht vorhandener Teilnehmer


von Markus D. (cipher1978)


Lesenswert?

Hallo zusammen,

ich beschäftige mich gerade mit dem Bau eines RS232 <-> I2C-Wandlers mit 
einem ATmega8. Dabei ist mir folgende Frage in den Sinn gekommen, auf 
die das Handbuch des AVRs auch keine Antwort hat (oder die ich einfach 
überlesen habe...):

Was passiert, wenn der I2C-Master einen I2C-Slave adressiert, der nicht 
am Bus hängt oder aus irgendeinem Grund nicht antwortet (Port defekt, 
Controller hängt, Störung etc.)?
Wartet der Master auf eine Antwort, sprich: Muss ein Timer dafür sorgen, 
dass nach Ablauf einer gewissen Zeitspanne ohne Antwort der Sendevorgang 
abgebrochen wird?
Oder wird durch den Takt auf der SCL-Leitung ein NAK gelesen, weil sich 
kein Teilnehmer angesprochen fühlt und die Datenleitung auf +5V bleibt?


Danke schon mal für die Antworten.


Grüße aus dem (noch halbwegs) sonnigen München,


Markus

von Gast (Gast)


Lesenswert?

> auf die das Handbuch des AVRs auch keine Antwort hat

Du mußt im Handbuch des IIC nachschauen. Ein fehlender Busteilnehmer 
wird als solcher (fehlender) erkannt.

von Markus D. (cipher1978)


Lesenswert?

In der Spez. hab ich da leider auch nichts gefunden. Bei genauerer 
Überlegung muss es aber so sein, dass ein nicht vorhandener Teilnehmer 
erkannt wird, einfach aus dem Grund, weil die Datenleitung nicht auf 0V 
gezogen wird und die Antwort damit mit NACK übertragen wird.

Zum Thema ACK/NACK hab ich jetzt noch eine Frage:
Nach I2C ist spezifiziert, dass im Master Receiver-Mode der Empfänger 
die Übertragung vorzeitig beenden kann, in dem er bei einem Lesevorgang 
ein NACK sendet (für den Fall, dass der Sender mehr Daten übertragen 
will, als dem Empfänger speichern kann).
Hat der Sender auch die Möglichkeit, die Übertragung vorzeit zu beenden 
(Empfänger erwartet mehr Daten, als der Sender überträgt)?


Danke nochmals für eure Antworten


Viele Grüße und ein schönes Wochenende,

Markus

von Volker (Gast)


Lesenswert?

>Hat der Sender auch die Möglichkeit, die Übertragung vorzeit zu beenden
>(Empfänger erwartet mehr Daten, als der Sender überträgt)?

Vielleicht einfach durch eine STOP-Anweisung?

von Markus D. (cipher1978)


Lesenswert?

Sorry, hab mich vielleicht etwas ungenau ausgedrückt. Der Sender ist in 
dem Fall ein Slave. Der kann meines Wissens den Bus nicht freigeben, 
sondern nur der Master.

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
Noch kein Account? Hier anmelden.