Hallo,
da das LCD-Display nicht immer benötigt wird, soll dieses komplett
ausgeschaltet werden.
Damit das ausgeschaltete LCD-Display die anderen Teilnehmer auf dem
I2C-Bus nicht stören soll, muss der I2C Bus und VCC vom OLED getrennt
werden.
Hat jemand eine Idee, wie man dies am besten in Hardware umsetzen kann?
Gruß Stefan
Stefan D. schrieb:> Damit das ausgeschaltete LCD-Display die anderen Teilnehmer auf dem> I2C-Bus nicht stören soll, muss der I2C Bus und VCC vom OLED getrennt> werden.
Wie soll das Trennen des OLEDs Störungen vom LCD verhindern?
Ich wollte ein „Bidirectional level shifter“ verwenden. Wenn die 5V
deaktiviert werden, trennt der Mosfet SDA und SCL vom restlichen Bus.
Was mir noch nicht klar ist, ob diese „Bidirectional level shifter“ auch
mit 5V auf beiden „Seiten“ funktioniert?!
Stefan D. schrieb:> Ich wollte ein „Bidirectional level shifter“ verwenden.
Meinst du diese teile, die aus einem MOSFET pro Leitung bestehen? Dann
beachte die parasitäre Diode im Transistor und wie sie sich auswirkt.
Hier kommt es darauf an, sie richtig herum zu drehen.
Was denn nun, LCD oder OLED?
OLEDs haben oft einen Power-Down-Mode und beim LCD kann man das
Backlight abschalten, um Strom zu sparen.
Um den I2C-Bus zu trennen, kann man Analogschalter benutzen, z.B.
74HC4066.
Stefan D. schrieb:> muss der I2C Bus und VCC vom OLED getrennt> werden.
Von wem kommt denn das "muss"?
Spontan würde ich sagen, dass ein ausgeschaltetes Gerät auf einem
I2C-Bus keine Probleme bereiten kann. Die CLK- und Daten-Anschlüsse
sollten im ausgeschalteten Zustand hochohmig sein (so wie im normalen
Betrieb auch).
Klingt für mich ein bisschen nach "Lösung sucht Problem"
Sebastian R. schrieb:> Spontan würde ich sagen, dass ein ausgeschaltetes Gerät auf einem> I2C-Bus keine Probleme bereiten kann. Die CLK- und Daten-Anschlüsse> sollten im ausgeschalteten Zustand hochohmig sein
Sind sie aber möglicherweise nicht.
> (so wie im normalen Betrieb auch).
Im normalen Betrieb liegt die Betriebsspannung am I²C Slave an. Die
vermutlich vorhandenen Schutzdioden an den Eingängen sind dann für alle
erlaubten Pegel auf SCL/SDA immer gesperrt.
Ohne Betriebsspannung führt ein H-Pegel auf einer dieser Leitungen aber
dazu, daß die Schutzdiode in Richtung Vcc leitet und dann wird der I²C
Slave über die Schutzdiode versorgt. Bzw. im Fall des TE das ganze
Display. Und weil der H-Pegel nur von einem Pullup kommt, kann es gut
sein, daß der Bus dadurch gestört wird.
Nun kann man die SDA/SCL Leitungen natürlich so implementieren, daß
sie keine solche Schutzdiode nach Vcc haben. Das würde man dann aus dem
Datenblatt des Displays entnehmen können. Aber nachdem der TE den
genauen Typ seines Displays geheim halten will, ja sich noch nicht mal
entscheiden kann ob es ein LCD oder OLED ist - da kann man gar nichts
sagen. Ist aber auch gut. Wer keine gescheite Frage stellt, kriegt halt
keine Antwort.
Dazu kommt noch, daß praktisch alle Displays sich per Software so weit
abschalten lassen, daß sie nur noch Strom im sub-µA Bereich brauchen.
Das harte Abschalten der Versorgungsspannung ist vermutlich gar nicht
nötig.
Sebastian R. schrieb:> Die CLK- und Daten-Anschlüsse> sollten im ausgeschalteten Zustand hochohmig sein (so wie im normalen> Betrieb auch).
Und genau daran scheitert es oft, denn wenn ein Slave keine
Spannungsversorgung hat, dann ist der High Pegel in der Regel außerhalb
seiner maximum ratings und wird durch die ESD Schutzdioden (falls
vorhanden) abgeleitet. Ergo: High Pegel funktionieren nicht mehr.
Stefan D. schrieb:> da das LCD-Display nicht immer benötigt wird, soll dieses komplett> ausgeschaltet werden.
Was hast du denn für ein I2C Display? Eines mit SSD1306 oder SH1106
Controller? Da gib es Befehle für einen Standby des Displays, genügt dir
vielleicht schon ;)
Axel S. schrieb:> Die> vermutlich vorhandenen Schutzdioden an den Eingängen sind dann für alle> erlaubten Pegel auf SCL/SDA immer gesperrt.
Es sei denn der Chipentwickler hat vorher mal die I²C Spec gelesen.
Dann sind nämlich keine einfachen Dioden an den I²C Busleitungen, und im
Dabla steht bei "Absolute Maximum Ratings" nicht was von VCC+0,3 Volt
sondern eine feste Spannung wie 5,5V unabhängig von VCC.
Der Fall "unversorgter Chip am I²C Bus" war von Phillips nämlich
durchaus vorgesehen in der Spec.
Die einfachen ESD Dioden nach VCC man übrigens mit 'nem Multimeter
nachmessen. Sind sie vorhanden, bräuchte man sowas wie Analogschalter
als Bustrenner.
Stefan D. schrieb:> Hat jemand eine Idee, wie man dies am besten in Hardware umsetzen kann?
Dazu 3 Analogschalter wie z.B. NC7SZ66 o.ä. Je einer für SDA, SCL und
VCC des abzuschaltenden Chips. Mit etwa 5 Ohm sind die Dinger eben auch
für VCC geeignet.
W.S.
Jim M. schrieb:> Axel S. schrieb:>> Die>> vermutlich vorhandenen Schutzdioden an den Eingängen>> Es sei denn der Chipentwickler hat vorher mal die I²C Spec gelesen.
...
> Der Fall "unversorgter Chip am I²C Bus" war von Phillips nämlich> durchaus vorgesehen in der Spec.
Aha. Dieses Detail war mir bisher entgangen. Gut zu wissen.
Darauf verlassen würde ich mich trotzdem nicht unbedingt.
Hallo zusammen,
ich schalte nun den I2C Bus über ein Level Shifter.
An LV (vom LevelShifter) hängt das LCD-Display und HV der restliche I2C
Bus (beide 5V). VCC vom LCD schalte ich über zwei Transistoren, siehe
Anhang.
Nach dem einschalten muss ich das LCD wieder initialisieren. Das ganze
funktioniert hier sehr gut. :)
Vielen Dank, für die vielen Antworten.
Stefan D.
Ich hätte zu diesem Thema auch eine Frage:
Ich habe einen Mega2560, bei dessen Start ich kurz über I2C auf eine
DS3231 zugreife. Danach würde ich gerne I2C deaktivieren, da ich die
externen Interrupts nutzen würde, die ebenfalls an sda und scl sind. Für
sda und scl gibt es ja am Mega Alternativpins, an denen ich die DS3231
auch angeschlossen habe. Sobald ich aber die die externen Iterrupts
aktiviere, stürzt der Mega ab bzw. geht in Dauerreset. Auch ein
Zurücksetzten der I2C-Register bringt nichts. Hat hierfür jemand eine
Idee? Würde der Sleepmode für I2C vielleicht was bringen? Achja, ich
benutze die Fleury-Lib.
Grüße
Markus
Auf welche Flanken oder Pegel reagieren denn die Interrupt-Leitungen und
welchen Pegel haben sie tatsächlich im Moment der Störung?
Stürzt er auch ab, wenn du I²C in der Software gar nicht nutzt?
Die Interrupts habe ich auf steigende Flanke konfiguriert.
Der controller stürzt bereits ab, wenn an den ExtInt noch gar nichts
hängt.
Wenn ich I2C gar nicht aktiviere, funktionieren natürlich die ExtInt wie
gewünscht.
mw73 schrieb:> Der controller stürzt bereits ab, wenn an den ExtInt noch gar nichts> hängt.
Offene Pins haben zufällige Signale. Eventuell arbeitet der µC dann nur
noch die ISR ab und bekommt keine Zeit für andere Aufgaben. Hast du das
bedacht?
Hmm, ja, aber an den Alternativpins hängt ja immer noch die RTC über die
Bussleitungen.
Wahrscheinlich wird mein Vorhaben nicht funktionieren, I2C und EXTINT
gleichzeitig zu betreiben
mw73 schrieb:> Ich hätte zu diesem Thema auch eine Frage:
Es ist ne saublöde Idee, sich an ein Thread anzuhängen. Du wirst so
viele Antworten auf die Ursprungsfrage provozieren.
mw73 schrieb:> Sobald ich aber die die externen Iterrupts> aktiviere, stürzt der Mega ab bzw. geht in Dauerreset.
Ein AVR kann nicht abstürzen. Selbst bei hoher Interruptlast führt er
immer noch das Main aus, nur langsamer.
Einen scheinbaren Rest gibt es, wenn man Interruptquellen freigibt, zu
denen kein Handler installiert ist. Diesen Scheinreset macht der
default-Handler, den man auch umbiegen kann.
mw73 schrieb:> Der controller stürzt bereits ab, wenn an den ExtInt noch gar nichts> hängt.
Interrupts auf floatende Pins freigeben, fällt unter die Rubrik "Garbage
In, Garbage Out".