Forum: Mikrocontroller und Digitale Elektronik I²C pull-ups möglichst elegant abschalten (low power)


von Daniel P. (ppowers)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe hier eine kleine Problemstellung, bei der ich etwas auf dem 
Schlauch stehe:

Zwei ICs sind über einen I²C-Bus verbunden (siehe beigefügte Schema).
IC1 (Slave) hängt dabei direkt an der Batterie.
IC2 (Master) hängt an einer schaltbaren +3V3 Versorgung.

Folgendes Problem:
Die Batterie zur Versorgung von IC1 kann entfernt werden. In diesem Fall 
darf IC1 natürlich nicht parasitär über den I²C-Bus versorgt werden.

Die Versorgungsspannung von IC2 ist schaltbar. Ist die 
Versorgungsspannung von IC2 abgeschaltet, die Batterie von IC1 aber 
vorhanden, dürfen die Pullups natürlich ebenfalls keinen Strom liefern 
(denn sonst würde IC2 parasitär versorgt...)

Frage:
Wie kann ich die Versorgungsspannung für die pullups möglichst elegant 
abschalten?
Wichtig ist dabei, dass die Batterie für das Einschalten der pullups 
möglichst keinen Strom liefern darf!

Die Lösung ist wahrscheinlich ziemlich simpel, aber ich sehe gerade den 
Wald vor Bäumen nicht...

Gruß
Daniel

von Frank (Gast)


Lesenswert?

Werden die ICs denn überhaupt parasitär über die pull ups versorgt? Oder 
machst du dir Gedanken über ein Problem das gar keines ist?

Du könntest ansonsten einen Pin am uC opfern mit dem du die pull ups 
versorgst.

von Daniel P. (ppowers)


Lesenswert?

Hallo!

Frank schrieb:
> Werden die ICs denn überhaupt parasitär über die pull ups versorgt? Oder
> machst du dir Gedanken über ein Problem das gar keines ist?
Naja, davon ist auf Grund interner Schutzdioden wohl auszugehen, oder 
nicht?

> Du könntest ansonsten einen Pin am uC opfern mit dem du die pull ups
> versorgst.
Hm, dann müsste ich aber die Batteriespannung ständig überwachen und die 
pull ups abschalten, wenn die Batteriespannung fehlt. So als reine 
Softwarelösung wäre mir das ehrlich gesagt nicht robust genug...

Gruß
Daniel

von Daniel P. (ppowers)


Lesenswert?

Hm. Kann es sein, dass das Problemchen doch gar nicht so einfach zu 
lösen ist?
Ich habe jetzt auf dem Papier schon dutzende Schaltungen mit 
Transistoren und Mosfets hingekritzelt (z.B. die pullups über ein 
P-Mosfet von den +3V3 trennen, welches durch einen NPN-Transistor - 
Basis an Batteriespannung - geschaltet wird). Aber irgendwie bringt 
jedes Konzept einen nicht unerheblichen Stromfluss aus der Batterie mit 
sich (in obigem Beispiel Basisstrom des NPN), der mir die Batterie auf 
Dauer leernuckelt.

Ich habe auch schon bei Bus-Isolatoren geschaut. Aber die brauchen im 
besten Fall scheinbar auch immer 1-2 mA...

Wäre Euch wirklich für ein paar gute Vorschläge dankbar!

Gruß
Daniel

von Pete K. (pete77)


Lesenswert?

Häng die Pullups doch an die schaltbaren 3V3. Wenn einer der ICs keinen 
Strom hat, dann brauchst Du auch die I2C nicht mehr.

von Daniel P. (ppowers)


Lesenswert?

Pete K. schrieb:
> Häng die Pullups doch an die schaltbaren 3V3. Wenn einer der ICs keinen
> Strom hat, dann brauchst Du auch die I2C nicht mehr.

Naja, aber das löst das Problem ja leider nicht. Wenn keine Batterie 
eingelegt ist, der andere IC (und die pull ups) aber +3V3 bekommt, dann 
wird der "batterielose" IC ja über SCL/SDA versorgt.

Falls es hilft: konkret ist der Kollege mit Batterie (IC1) ein LiPoly 
Gas Gauge IC bq27541-G1 
(http://www.ti.com/lit/ds/symlink/bq27541-g1.pdf) und IC2 ist ein 
PIC24F.

von Pete K. (pete77)


Lesenswert?

Daniel P. schrieb:
> Wenn keine Batterie
> eingelegt ist, der andere IC (und die pull ups) aber +3V3 bekommt, dann
> wird der "batterielose" IC ja über SCL/SDA versorgt.

Woher nimmst Du diese Erkenntnis? Ein uC wird immer noch über VCC 
versorgt.

: Bearbeitet durch User
von Matthias L. (Gast)


Lesenswert?

>Ich habe jetzt auf dem Papier schon dutzende Schaltungen mit
>Transistoren und Mosfets hingekritzelt (z.B. die pullups über ein
>P-Mosfet von den +3V3 trennen, welches durch einen NPN-Transistor -
>Basis an Batteriespannung - geschaltet wird). Aber irgendwie bringt
>jedes Konzept einen nicht unerheblichen Stromfluss aus der Batterie mit
>sich (in obigem Beispiel Basisstrom des NPN), der mir die Batterie auf
>Dauer leernuckelt.


Wie wäre es mit P-FET zum Schalten, und damit die Ansteuerung keinen 
Strom statisch benötigt, ein CMOS InverterGatter, welches aus der 
vorhandenen Batteriespannung (HIGH) ein LOW zur Ansteuerung des P-Fets 
macht?

von Klaus 2. (klaus2m5)


Lesenswert?

Laut Datenblatt hat der bq27541-G1 an SDA & SCL keine Clamp Diode nach 
Vcc, sonst wäre die max voltage in den absolute maximum ratings relativ 
zu Vcc angegeben.

Wenn die Pullups an Vcc von IC2 hängen, dürfte eigentlich nichts 
passieren, egal welche Seite Du ausschaltest.

von Daniel P. (ppowers)


Lesenswert?

Pete K. schrieb:
> Daniel P. schrieb:
>> Wenn keine Batterie
>> eingelegt ist, der andere IC (und die pull ups) aber +3V3 bekommt, dann
>> wird der "batterielose" IC ja über SCL/SDA versorgt.
>
> Woher nimmst Du diese Erkenntnis? Ein uC wird immer noch über VCC
> versorgt.
Jaaaaa, schön wäre es. Aber sollte es nur interne Schutzdioden an den 
Bus-Pins geben, dann würde nunmal ein Strom nach VCC fließen, oder 
nicht?
Allerdings bin ich mir nicht sicher, OB die Bus-Pins tatsächlich diese 
internen Schutzdioden haben. Wenn man sich die Max-Ratings (im Anhang) 
anschaut, dann steht dort maximal 6 V und nicht VCC+x. Könnte darauf 
hindeuten, dass es keien Dioden gibt???


Matthias Lipinsky schrieb:
> Wie wäre es mit P-FET zum Schalten, und damit die Ansteuerung keinen
> Strom statisch benötigt, ein CMOS InverterGatter, welches aus der
> vorhandenen Batteriespannung (HIGH) ein LOW zur Ansteuerung des P-Fets
> macht?
Hm, das könnte gehen... Aber welche Versorgungsspannung verwende ich für 
das Gatter? Batterie oder +3V3? Bringt mich das dort nicht wieder in die 
gleiche Zwickmühle?

von Daniel P. (ppowers)


Lesenswert?

Klaus 2m5 schrieb:
> Laut Datenblatt hat der bq27541-G1 an SDA & SCL keine Clamp Diode nach
> Vcc, sonst wäre die max voltage in den absolute maximum ratings relativ
> zu Vcc angegeben.
>
> Wenn die Pullups an Vcc von IC2 hängen, dürfte eigentlich nichts
> passieren, egal welche Seite Du ausschaltest.

Da warst Du wohl schneller. Danke!
Wenn das so ist, dann hätte ich gar kein Problem. Cool.

Aber jetzt mal rein theoretisch: dieser IC hat eine Stromaufnahme von 
~130 µA. Selbst wenn er an den Bus-Pins Clamp Dioden hätte, könnte 
dieser geringe Strom überhaupt einen Schaden anrichten?

von Matthias L. (Gast)


Lesenswert?

>ber welche Versorgungsspannung verwende ich für
>das Gatter? Batterie oder +3V3?

Die Batteriespannung ist EIngang vom Gatter. Versorgt werden muss es von 
der SPannung, die immer da ist. Aber ein Pulldown parallel zur Batterie 
ist nötig, um das Gatter auf Low zu halten, wenn die Batterie abgeklemmt 
ist.


>Bringt mich das dort nicht wieder in die gleiche Zwickmühle?

War nur so eine Idee. Mal es doch mal auf.

von Daniel P. (ppowers)


Lesenswert?

Matthias Lipinsky schrieb:
> War nur so eine Idee. Mal es doch mal auf.
Hab ich. Klappt leider nicht, weil folgendes nicht gegeben ist:

> Versorgt werden muss es von der SPannung, die immer da ist.
Keine der beiden Spannungen ist garantiert immer da

> Aber ein Pulldown parallel zur Batterie
> ist nötig, um das Gatter auf Low zu halten, wenn die Batterie abgeklemmt
> ist.
Das Problem hatte ich leider auch bei allen meinen Mosfet- und 
Transistorkritzeleien. Und diesen Pulldown möchte ich um jeden Preis 
vermeiden...

Ich schlage vor, ich baue mal einen Prototypen auf und werde dann den 
Fall einfach testen. Sollte doch ein Strom über die Bus-Pins fließen, 
werde ich den am LDO-Ausgang des Gas Gauge ICs messen können.
Dann käme ich auf Deinen Vorschlag noch einmal zurück...

Danke Euch für Eure Beiträge!

Gruß
Daniel

von Weingut P. (weinbauer)


Lesenswert?

über die Buspins läuft normalerweise kein Power, solange die Pullups 
nicht dran sind bei I2C soweit mir geläufig. Das ist ja der Gag am I2C, 
darum ja auch die Pullups, es wird nur nach unten gezogen vom 
Controller.

also was die Verundung angeht da könnteste auch einfach nen n-kanal FET 
Transistor als Source-folger machen ...

Gate an V-IC1, SOurce an V-IC2, Drain an Pullups.

V-IC1 weg, Gate an GND, Transistor zu, V-IC2 weg, auch kein Saft am 
Pullup ... oder?

von ./. (Gast)


Lesenswert?

Mach halt zu den irgendwie schaltbaren Pull-Ups noch 2 hochohmige*
nicht geschaltete Pull-Ups die ueber 2 Schottky-Dioden von beiden
Betriebsspannungen gespeist werden.

Zum Schalten wuerde ich einfach einen Tristatefaehigen GPIO nehmen.


Das wird den I2C-Bus naemlich freuen.

*) Hochohmig := 10 M

von SkyperHH (Gast)


Lesenswert?

Moin,

no so als Idee, wie wäre es mit einem Si8600 - "BIDIRECTIONAL I2C 
ISOLATORS WITH UNIDIRECTIONAL DIGITAL CHANNELS"

Damit trennst Du beide Chips vollständig voneinander...

von Matthias L. (Gast)


Lesenswert?

>Zwei ICs sind über einen I²C-Bus verbunden (siehe beigefügte Schema).
>IC1 (Slave) hängt dabei direkt an der Batterie.
>IC2 (Master) hängt an einer schaltbaren +3V3 Versorgung.

>Folgendes Problem:
>Die Batterie zur Versorgung von IC1 kann entfernt werden. In diesem Fall
>darf IC1 natürlich nicht parasitär über den I²C-Bus versorgt werden.


Was ist mit folgender Lösung:

Die Pullups über einen P-Fet gegen 3V3 vom µC. Ein µC-Pin schaltet den 
Fet. Ein weiterer µC Pin ist mit +3V3 der Batterie verbunden um zu 
erkennen, ob der Slave vorhanden ist. Denn das wäre ja auch eine 
nützliche Info für das Programm...

von Pete K. (pete77)


Lesenswert?

Vielleicht mit einem Reset-IC an IC2 oder Brownout Pin GND an IC2 
schalten.
Dann kann auch kein Strom fließen (VCC und GND weg). Müsste man mal 
genauer "prototypisieren".

von Dr. Best (Gast)


Lesenswert?

UND-Gatter, Eingänge: Batterie und 3v3-Versorgung. Ausgang an Pull-up.

von chris (Gast)


Lesenswert?

Die Lösung ist wirklich simpel.
IC1 ist ein echtes i2c device, also Open Collector Pins.
Das heisst, dass dort gar keine Schutzdioden von diesen Pins zu VCC 
vorhanden sind.
Die Pull-ups werden einfach mit der schaltbaren 3.3V VCC vom uC 
verbunden,
das wars. Zudem ist dieser Slave kein i2c sondern ein smb device.
Das heisst, dass dieser ein Timeout hat und automatisch nach dem Timeout 
ein
Reset macht. Dieser Timeout ist 2Sekunden, und dieser Timeout ist immer 
nach
einem Start condition und er wird nur abgebrochen wenn die Transaktion 
beendet wird. Wenn du aber nur SW i2c machst, dann könntest du die 
internen
Pull-up verwenden, wird auch oft praktiziert.

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.