Hallo,
ich habe folgendes Problem: An dem I²C Bus meines ESP32 hängen zwei
Bus-Teilnehmer welche abwechselnd Ein und Aus geschalet werden sollen.
Durch trennen von GND durch einen Mosfet funktioniert das soweit gut.
Jetzt habe ich allerdings festgestellt, dass die Bus-Teilnehmer trotz
getrenntem GND durch den I²C mit Spannung versorgt werden und dabei
anspringen obwohl sie hätten Aus sein sollen. Auf dem Teilnehmer liegt
dann etwa 3,7V durch den I²C an. Das reicht leider aus damit er
funktioniert. Normalspannung bei eingeschaltetem Mosfet liegt bei 5V.
Wie kann ich den Bus-Teilnehmer davon abhalten sich an der I²C Spannung
zu bedienen?
Hallo,
kannst du sie nicht in den SleepMode schicken statt abzuklemmen?
Deine Leitung zum abschalten kannste dann zum aufwecken verwenden.
So als Idee.
Jürgen schrieb:> Ich bin dabei nach folgendem Beispiel
Ist dein I2C Teilnehmer eine ohmsche Last? Davon wird nämlich in dem
verlinkten Bild gesprochen 🤔
Andere Frage: warum möchtest du die Teilnehmer überhaupt abschalten?
Und um was für Teilnehmer handelt es sich im genauen?
Jürgen schrieb:> Wie kann ich den Bus-Teilnehmer davon abhalten sich an der I²C Spannung> zu bedienen?
Gar nicht. IC's bedienen sich oft aller an Ports anliegenden Spannungen
zur Stromversorgung, ob nun GND oder VCC weggeschaltet sind. Das liegt
an den Schutzbeschaltungen der Ports, die für Spannungen oberhalb von
VCC Ströme nach VCC ableiten und fur Spannungen unterhalb von GND nach
GND.
Dazu kommt: Nach Trennung von GND liegen die I2C-Spannungen für die
abgetrennten Bus-Teilnehmer auch nicht mehr in deren legalem
Spannungsbereich (meist von GND bis VCC, siehe deren Datenblatt).
LG, Sebastian
Ja, nur dass die Glühbirne nicht auch noch an irgendwelchen
Signalleitungen hängt. Sonst würde sie sich auch darüber versorgen, wenn
man ihr den GND wegschaltet.
Sebastian W. schrieb:> Das liegt an den Schutzbeschaltungen der Ports, die für Spannungen oberhalb von> VCC Ströme nach VCC ableiten und fur Spannungen unterhalb von GND nach> GND.
Und Achtung, diese Schutzbeschaltungen sind oft nur für sehr geringe
Ströme ausgelegt ...
LG, Sebastian
Jürgen schrieb:> Durch trennen von GND durch einen Mosfet funktioniert das soweit gut.> Jetzt habe ich allerdings festgestellt, dass die Bus-Teilnehmer trotz> getrenntem GND durch den I²C mit Spannung versorgt werden und dabei> anspringen obwohl sie hätten Aus sein sollen.
Du widersprichst dir - eine parasitäre Versorgung über den I²C-Bus mit
zusammenbrechender Versorgungsspannung am Chip ist von vernünftig
funktionieren und Betrieb innerhalb der vom Datenblatt vorgegebenen
Grenzen eher deutlich entfernt.
Eine Spannungsversorgung besteht immer aus zwei Leitungen. Wie sieht
deine Schaltung aus und was genau willst du erreichen.
@ Wolfgang: Das Ausschalten per Mosfet funktioniert gut, solange der I²C
nicht verbunden ist.
Es handelt sich um zwei optische Sensormodule, welche jeweils mit zwei
IR-Led´s ausgestattet sind.
https://www.sparkfun.com/products/13162
Da sich beide Sensoren nebeneinander befinden und die Lichtquellen
jeweils kreuzen, muss ich sie alternierend betreiben. Anonsten stören
die Lichtquellen des einen Sensors den Anderen. Deswegen der ganze
Zirkus mit Aus/Einschalten per MOSFET.
Eine "Schlaf-Funktion" besitzen die kleinen Module leider nicht.
Was könnte ich noch ausprobieren?
Jürgen schrieb:> Es handelt sich um zwei optische Sensormodule, welche jeweils mit zwei> IR-Led´s ausgestattet sind.
Soweit ich der Kurzinfo entnehmen kann, kann dieses Modul seinen Sermon
auch undirektional per UART loswerden. Was I2C obsolet machen würde. Und
da ist es trivial, zwei Tx per Dioden zusammenzuschalten.
Jürgen schrieb:> Es handelt sich um zwei optische Sensormodule, welche jeweils mit zwei> IR-Led´s ausgestattet sind.> https://www.sparkfun.com/products/13162> Was könnte ich noch ausprobieren?
1. Schalten der Versorgungsspannung.
Du solltest die +-Seite schalten. Am einfachsten ist das mit einem Load
Switch wie TPS2052B.
https://www.ti.com/lit/ds/symlink/tps2052b.pdf
2. Schalten des I2C-Busses
Dafür gibt es spezielle Multiplexer, die die einzelnen Bussegmente
voneinander isolieren können. Jedes Segment braucht seine eigenen
Pullup-Widerstände, wobei auf der Sensor-Seite die Pullups natürlich an
die geschaltete Versorgungsspannung drankommen.
https://www.nxp.com/docs/en/data-sheet/PCA9542A.pdf
3. Erzeugen der Signale für den Loadswitch
Der Load Switch braucht zwei Enable-Signale, mit denen er die beiden
Ausgänge ein- und ausschalten kann. Wenn Du die nicht anderweiter
herbekommst, nimmst Du einen kleinen GPIO-Expander:
https://www.nxp.com/docs/en/data-sheet/PCA9536.pdf
So, damit hast Du alle Teile zusammen. Natürlich gelten wie immer die
Grundwegeln der Digitaltechnik wie Bypass-Kondensatoren an jedes VCC-GND
Paar, keine offenen Eingänge usw usw.
fchk
Danke für die zahlreichen Tipps.
Ich denke, als als erstes werde ich mal die Kommunikation über UART und
Dioden probieren. Sind 1N4148 Schalt-Dioden dafür geeignet?
(prx) A. K. schrieb:> Jürgen schrieb:>> Sind 1N4148 Schalt-Dioden dafür geeignet?>> Ja.
Hi,
ich habe jetzt die 1N4148 Schalt-Dioden zwischen TX und RX geklemmt und
es kommt leider gar nichts mehr durch. Sobald ich die Diode entferne
kommt das Signal durch und ich empfange etwas.
Was mache ich falsch?
Jürgen schrieb:> ich habe jetzt die 1N4148 Schalt-Dioden zwischen TX und RX geklemmt und> es kommt leider gar nichts mehr durch. Sobald ich die Diode entferne> kommt das Signal durch und ich empfange etwas.> Was mache ich falsch?
Am I²C Bus gibt es keine Rx und Tx Pins. Zeichne bitte die relevanten
Verbindungen, Dioden und Widerstände auf.
Jürgen schrieb:> Ich spreche von der UART Kommunikation über TX/RX. In meinem letzten> Beitrag hatte ich geschrieben, dass ich jetzt UART ausprobiere mit der> Diode.
Warum nicht jeder der beiden TX an einem eigenen Pin/Uart des ESP32? Und
RX wird ja nicht gebraucht.
LG, Sebastian
Jürgen schrieb:> ich habe jetzt die 1N4148 Schalt-Dioden zwischen TX und RX geklemmt und> es kommt leider gar nichts mehr durch. Sobald ich die Diode entferne> kommt das Signal durch und ich empfange etwas.
Also so: ZX1 TX ->|- ESP RX, ZX2 TX ->|- ESP RX ?
Dann fehlt dir aber noch ein Pull-Down-Widerstand an ESP RX, sonst kann
RX ja nie auf LOW fallen ...
Und ausserdem darf dann wirklich nur einer der ZX mit VCC versorgt sein,
sonst überschreibt ein HIGH von einem ZX ein LOW des anderen.
LG, Sebastian