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