www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Slave: Bus-Trennung erkennen


Autor: Fledertier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moinsen.

Wie könnte man denn mit einem ATMega als I2C-Slave erkennen, dass keine 
Verbindung mehr zum I2C-Bus vorliegt?

Beispiel: Ein 7-Segment-Display für verschiedene Anzeigen bekommt die 
Daten per I2C. Wird die Verbindung getrennt (Kabel abgezogen), soll das 
Display selbstständig auf eine interne Uhr umschalten und deren Uhrzeit 
anzeigen.
Das Erkennen soll nach Möglichkeit "sofort" erfolgen; spätestens aber im 
1-stelligen Sekundenbereich.

Eine Art Bus-abhören haut nicht hin, da es durchaus mal vorkommen kann, 
dass eine Stunde lang nichts gesendet wird.

Gibts da irgendetwas brauchbares?

mfg

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Pullups vom I2C wie meistens beim Master sitzen, dann reicht 
ein hochohmiger Pulldown an einem der Pins auf Seiten des Slave. Bleibt 
der für längere Zeit unten => Bus offen.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorsicht, könnte jetzt was falsches sagen.

I2C ist doch im Ruhezustand immer High.
Jetzt müsste nur noch ein hochohmiger Pull-Down-Widerstand am SDA 
gehängt werden. Sobald der Eingang für längere Zeit auf Low geht, ist 
der Master weg.

Das setzt natürlich vorraus, dass der Pullup für den Buf am Master hängt 
und der Client selber keinen Pullup einsetzt.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mit einem überbrückten Pin im Stecker? Sobald der Stecker 
gezogen wird, geht ein Pin per Pull-Up auf High und meldet dem Atmega 
den fehlenden Stecker.

Autor: Fledertier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ohne weitere Hardware gehts anscheinend nicht.
Wird sich wohl auf den hochohmigen Widerstand nach Masse rauslaufen. Die 
sind nur am Master bzw. an den Slaves optional zuschaltbar.

Das mit dem Kontakt im Stecker klappt nur bei wenigen Slaves, da zum 
einen die Stecker keinen Kontakt in der Art vorsehen bzw. bei anderen 
Slaves einfach keine Pins mehr frei sind.

Kann man so einfach an SCL bzw SDA von aussen über z.B. PINC den Pegel 
auslesen, ohne den I2C zu stören?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fledertier schrieb:

> Wird sich wohl auf den hochohmigen Widerstand nach Masse rauslaufen. Die
> sind nur am Master bzw. an den Slaves optional zuschaltbar.

Am Master bringt der wohl nix. Oder wo sind die obligatorischen 
I2C-Pullups? Wär schon besser wenn die im Master sitzen, sonst klappt 
das nicht.

> Kann man so einfach an SCL bzw SDA von aussen über z.B. PINC den Pegel
> auslesen, ohne den I2C zu stören?

Natürlich.

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interessante Fragestellung!

Dann würde ich anstatt der nun eingeplanten Widerstände gleich 
Zenerdioden vorschlagen. Die schützen und der Leckstrom sollte mehr als 
groß genug sein.


Gruß -
Abdul

Autor: kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würds ganz anders machen.

- Immer die interen Uhr anzeigen!
- Die interne Uhr mit den Daten über I2C synchronisieren.

Wenn der Master abgezogen wird, so wird halt die interne Uhr nicht mehr 
neu synchronisiert. Nach dem Aufstecken dann wieder schon.

Etwas Intellegenz (z.B. 2 I2C-Telegramme zum erfolgreichen 
Synchronisieren der Uhr) einbauen.

Und fertig.

Autor: Fledertier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Wird sich wohl auf den hochohmigen Widerstand nach Masse rauslaufen. Die
>> sind nur am Master bzw. an den Slaves optional zuschaltbar.

>Am Master bringt der wohl nix. Oder wo sind die obligatorischen
>I2C-Pullups? Wär schon besser wenn die im Master sitzen, sonst klappt
>das nicht.

Äh, des war jetzt Käse von mir.
"Die" im 2. Satz bezog sich auf die üblichen Pull-Ups.
An den Slaves gibts bei manchen noch die Möglichkeit, zusätzliche 
Pull-Ups zu aktivieren, wenn die Leitung recht lang wird.

Das mit der Uhr war hier nur ein Beispiel, da z.B. nicht immer die Zeit 
angezeigt werden soll. Natürlich wird die Zeit auch über den I2C 
gestellt.
Es ist z.B. ein Display, auf dem u.a. eine vom Master übermittelte 
Temperatur angezeigt wird. Wird der Stecker gezogen, soll eben z.B. auf 
ne Uhr umgeschaltet werden, weil so nicht ständig die letzte empfangene 
Zeit angezeigt wird. Ist aber z.B. auch für ne I2C-Motorsteuerung 
geplant, wo die Motoren beim Trennen des Busses gestoppt werden sollen.

Beispiele gäbs dafür genügend.

Prinzip (König = Master, ihr = Slaves):
"Wenn der König befiehlt, habt ihr zu gehorchen.
Gibt der König keinen Befehl, führt den zuletzt erhaltenen aus.
Ist der König tot, macht was ihr wollt."

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.