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


von Fledertier (Gast)


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

von (prx) A. K. (prx)


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.

von Christian H. (netzwanze) Benutzerseite


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.

von Gast (Gast)


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.

von Fledertier (Gast)


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?

von (prx) A. K. (prx)


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.

von Abdul K. (ehydra) Benutzerseite


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

von kurz (Gast)


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.

von Fledertier (Gast)


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."

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.