Forum: Mikrocontroller und Digitale Elektronik I2C Bus Vcc mit übergeben?


von Marten (Gast)


Lesenswert?

Hallo,


bitte nicht gleich shitstormen, aber mir ist das noch nicht zu 100% 
klar:

Wenn ich einen I2C-Bus mit einem Master und mehreren Slaves dran habe, 
wo auch ein Pullup sitzt beim Master (auf Vcc) - wie muss das Kabel 
zwischen den Slaves aussehen bzw. vom Master zum ersten Slave?

SDA - SCL - GND - VCC??? Muss Vcc mitgeführt werden über das Kabel?

Zur Info - die Slaves sind alle auf unterschiedlichen Platinen, 
generieren alle ihre eigene 5V-Spannung über einen LDO. Diese LDOs 
hängen jedoch am selben Netzteil.


Danke schonmal!
Marten

von Dennis (Gast)


Lesenswert?

Vcc musst du nicht übergeben, da alle I2C-Teilnehmer nur Richtung GND 
schalten (wired-and).

von Joachim B. (jar)


Lesenswert?

Dennis schrieb:
> Vcc musst du nicht übergeben, da alle I2C-Teilnehmer nur Richtung GND
> schalten (wired-and).

dem pullup sollte man VCC übergeben weil echtes I2C OC ist, wenn weder 
auf der einen Seite der pullup vorhanden ist und kein VCC dann siehts 
halt schlecht aus mit pullup!

von Uff Basse (Gast)


Lesenswert?

Dennis schrieb:
> (wired-and).

So so.

von Joachim B. (jar)


Lesenswert?

ich tippe auf wired or

egal wer den runter zieht, einer oder beide, das Ergebnis ist immer 
unten also OR

von Walter T. (nicolas)


Lesenswert?

Joachim B. schrieb:
> ich tippe auf wired or
>
> egal wer den runter zieht, einer oder beide, das Ergebnis ist immer
> unten also OR

Also müssen beide high sein, damit der Bus high ist -> Wired AND

von Joachim B. (jar)


Lesenswert?

sehe ich anders, nicht die inaktiven Signale gelten sondern die aktiven 
Signale, aktiv ist LOW und wenn es egal ist welcher LOW ist dann ist es 
ODER

von Mario M. (thelonging)


Lesenswert?

"Sämtliche daran angeschlossene Geräte haben Open-Collector-Ausgänge, 
was zusammen mit den Pull-up-Widerständen eine Wired-AND-Schaltung 
ergibt."

https://de.wikipedia.org/wiki/I%C2%B2C#Elektrische_Definition

von my2ct (Gast)


Lesenswert?

Joachim B. schrieb:
> ich tippe auf wired or

Wenn du dich da mal nicht täuscht - ist aber natürlich eine Frage der 
Betrachtungsweise.

Nur wenn alle Teilnehmer ihren Ausgang auf High Z setzen, ist der Bus 
auf High.

Sobald ein Teilnehmer seinen Ausgang auf Low legt, liegt der Bus auf 
Low.

Je nach Zuordnung der Pegel zu TRUE oder FALSE, läuft es dann auf wired 
OR oder wired AND hinaus.

von Fremder (Gast)


Lesenswert?

Verstehe ich das richtig? Ihr beschäftigt euch mit den R vom Bus zu Vcc. 
So wie ich das verstehe, hat jeder Slave sein eigenes Netzteil. Muss 
nicht auf jeden Fall GND gleich sein? egal wo die Spannung herkommt?

von Joachim B. (jar)


Lesenswert?

Mario M. schrieb:
> https://de.wikipedia.org/wiki/I%C2%B2C#Elektrische_Definition

auch Wiki soll nicht immer fehlerfrei sein.

Definieren wir doch mal,

2 Signale und stellen eine Wahrheitstabelle auf

0 & 0 = 0
0 & 1 = 1
1 & 0 = 1
1 & 1 = 1

das wäre für mich ein OR

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

das wäre für mich ein AND

Es werden immer die aktiven Zustände betrachtet, nur aktiv ist ja bei 
I2C invertiert

my2ct schrieb:
> Wenn du dich da mal nicht täuscht - ist aber natürlich eine Frage der
> Betrachtungsweise.
my2ct schrieb:
> Sobald ein Teilnehmer seinen Ausgang auf Low legt, liegt der Bus auf
> Low.

also OR, egal ob einer oder beide

also Ruhepegel = high
aktiver Pegel = low
und AND mit invertierten Eingängen wird OR

da war doch mal was:
https://de.wikipedia.org/wiki/Kommutativgesetz

man muss bei Wiki auch mal quer und mehr lesen!

Fremder schrieb:
> Muss
> nicht auf jeden Fall GND gleich sein? egal wo die Spannung herkommt?

ach und wenn auf beiden Seiten OC ist, wo kommt dann VCC her?

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Die Signale heißen SDA und SCL, wo ist da was negiert.

Joachim B. schrieb:
> auch Wiki soll nicht immer fehlerfrei sein.

Dann lies es beim Erfinder von I²C:
https://www.nxp.com/docs/en/user-guide/UM10204.pdf
"The output stages of devices connected to the bus must have an 
open-drain or open-collector to perform the wired-AND function."

von Marten (Gast)


Lesenswert?

Walter T. schrieb:
> ired AND

Es liebt überall "der selbe" GND an, egal ob Master oder die Slaves.

von Marten (Gast)


Lesenswert?

Joachim B. schrieb:
> Dennis schrieb:
>> Vcc musst du nicht übergeben, da alle I2C-Teilnehmer nur Richtung GND
>> schalten (wired-and).
>
> dem pullup sollte man VCC übergeben weil echtes I2C OC ist, wenn weder
> auf der einen Seite der pullup vorhanden ist und kein VCC dann siehts
> halt schlecht aus mit pullup!

Ja der Pullup ist nur beim Master dran, auf sein Vcc. Damit willst du 
sagen, dass der Vcc auf die anderen Slaves mitgegeben werden muss?

Vcc_master, Vcc_slave1. Vcc_slave2 = 5V, aber alle hängen an 
Vcc_overall=9V. Der LDO isoliert ja nicht die 5V zu 9V, muss dann evtl. 
vielleicht doch nicht die 5V mitgegeben werden?

von Joachim B. (jar)


Lesenswert?

Fremder schrieb:
> hat jeder Slave sein eigenes Netzteil. Muss
> nicht auf jeden Fall GND gleich sein? egal wo die Spannung herkommt?

Marten schrieb:
> Es liebt überall "der selbe" GND an, egal ob Master oder die Slaves.

denkt doch was ihr wollt, bei 2 Netzteilen muss es eben nicht überall 
den selben GND geben!
Gestritten wird wo anders, macht euch die Welt wie sie EUCH gefällt!

Mario M. schrieb:
> Dann lies es beim Erfinder von I²C:
> https://www.nxp.com/docs/en/user-guide/UM10204.pdf

blabla, es gilt immer noch wie beim alten Funkverkehr "PTT push to talk"

Es kann nur einer Quatschen, der EINE ODER der Andere
wenn beide PTT quatschen kommt keine Kommunikation zustande, also 
entweder oder, also wired OR, wenn beide quatschen AND klappts nicht.

von Walter T. (nicolas)


Lesenswert?

Okay, einigen wir uns auf das folgende: Im offiziellen Standard wird 
nichts invertiert, und bei Joachim zuhause ist alles andersherum und 
dort gibt es wired OR. Vermutlich gibt es für Joachim auch spezielle 
Datenblätter für jeden I2C-tauglichen IC, bei dem die Datentelegramme 
invertiert sind.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

ich weiss ja wer es schreibt!
von Walter T. (nicolas)

ein echter Fachmann, der darf es wired AND nennen und alles an der I2C 
Kommunikation funktioniert bei dem nur wenn BEIDE quatschen also AND.

Ich nenne es weiterhin wired OR weil die Kommunikation nur funktioniert 
wenn der Eine ODER der Andere quatscht, bzw. nichts klappt wenn beide 
AND still sind.

Das Verständnis von positiver und negativer Logik sowie Kommutativgesetz
https://de.wikipedia.org/wiki/Kommutativgesetz

ist halt nicht jedem einsichtig.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Ist OK. Ich habe gelernt, das Logik nicht nur verUNDet und verODERt, 
sondern auch verNICHTet werden kann.

von Joachim B. (jar)


Lesenswert?

Walter T. schrieb:
> Ich habe gelernt

fein dann erkläre mir dein Gelerntes

Du meinst wired AND, also klappt I2C deiner meinung nach wenn beide 
zugleich die Leitungen aktiv auf low ziehen, also AND, wenn nur einer 
das macht gehts ja nicht wegen AND.

von Dennis (Gast)


Lesenswert?

Lol, da schreibt man kurz die Antwort und dann kommt das hier raus :-)

Hier haben aber einige auch zuviel Freizeit, oder?

von Joachim B. (jar)


Lesenswert?

Dennis schrieb:
> Lol, da schreibt man kurz die Antwort und dann kommt das hier raus :-)

Dennis schrieb:
> (wired-and)

wenn so ein Unfug kommt

egal wer low schaltet, EINER genügt kommt low raus also ODER und nicht 
AND das alle low schalten müssen AND das low rauskommt!

von Frank B. (frank501)


Lesenswert?

Marten schrieb:
> muss dann evtl.
> vielleicht doch nicht die 5V mitgegeben werden?

Nein, wo willst du denn die 5V verbinden? Damit würdest du alle 
beteiligten Spannungsquellen parallel schalten. Ich denke nicht, daß das 
in deinem Sinne wäre.

Es ist (eigentlich) egal, wo die PullUp-Widerstände sitzen, solange der 
Bus bei deaktivierten Ausgangsstufen der beteiligten I2C-Teilnehmer auf 
high (also +5V) gezogen wird.
Du musst nur die Masse untereinander verbinden.



Zu dem ganzen OT-Gequatsche:
Beim I2C-Bus gilt: High = +5V
Also erst wenn alle Teilnehmer den Bus auf High (+5V) lassen, also high 
ausgeben, ist auch der Bus high. Wenn nur einer der Teilnehmer ein low 
(GND) ausgibt, ist der Bus low.
Dabei ist es vollkommen egal, ob ein High aktiv ausgegeben wird oder 
sich durch einen offenen (nicht angesteuerten Transitor) selbst 
einstellt.
Demzufolge ist der Bus ein wired and. Das heißt, erst wenn ALLE 
Teilnehmer high ausgeben, ist auch der Ausgang (Bus) high.

Also hat NXP wohl doch Recht.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Frank B. schrieb:
> Beim I2C-Bus gilt: High = +5V

nicht beim ESP32 oder anderen mit 3,3V VCC
Ich wüsste nun nicht wo bei I2C eine bestimmete Spannung vorgegeben 
wird, es muss allen schmecken und bei gemischter Versorgung geht nur OC.

Frank B. schrieb:
> Demzufolge ist der Bus ein wired and. Das heißt, erst wenn ALLE
> Teilnehmer high ausgeben, ist auch der Ausgang (Bus) high.

sehe ich immer noch anders
high ist inaktiv und inaktiv ist keine Verknüpfung
am I2C ist aktiv low und nur damit gelten Verknüpfungen überhaupt!

Ist als wenn man in die Runde fragt hat einer Hunger und keiner meldet 
sich und dann zufrieden feststellt, keiner hat Durst!

Das war aber nicht gefragt!
Die Antworten müssen schon zur Frage passen!

Bei PTT schrieb ich ja schon darf auch nur einer antworten also ODER, 
bei Licht an muss die ganze Kette aktiv werden also AND

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Dennis schrieb:
> Lol, da schreibt man kurz die Antwort und dann kommt das hier raus :-)
>
> Hier haben aber einige auch zuviel Freizeit, oder?

Ja, das habe ich mir auch gedacht. Du hättest deine Klammer weglassen 
sollen :-).
Da ist die erste Antwort ausreichend und es wird endlos off-topic weiter 
diskutiert.

Wenn ich eine logische Verknüpfung brauche, kaufe ich kein 'low-aktives' 
oder 'high-aktives' Gatter, sondern dasjenige, das meine gewünschte 
Verknüpfung realisiert! Ich bin also verantwortlich, ob das AND oder OR 
werden muss!

von Joachim B. (jar)


Lesenswert?

HildeK schrieb:
> Ich bin also verantwortlich, ob das AND oder OR
> werden muss!

und was ist sinnvoll bei I2C?

das beide aktiv zur selben Zeit die Leitungen belegen müssen?

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Joachim B. schrieb:
> und was ist sinnvoll bei I2C?
>
> das beide aktiv zur selben Zeit die Leitungen belegen müssen?

Mich interessiert dabei doch gar nicht, ob die Logik low- oder 
high-aktiv ist. Deshalb AND! Wenn das keine wired-Verbindung sein 
müsste, dann würde ich ein AND-Gatter einsetzen.
War früher schon so, z.B. bei der Dekodierung der Adress- und 
Steuersignale von RAMs. Da kamen NORs zum Einsatz - soweit ich mich 
erinnere ...

von mws (Gast)


Lesenswert?

Invertierte Logik, weil:

Ruhezustand der beiden Leitungen = 1
Aktiv = 0

Und mit dem Namen hat das nichts zu tun, SDA muss nicht #SDA, /SDA oder 
nSDA benannt werden...

von Joachim B. (jar)


Lesenswert?

mws schrieb:
> Invertierte Logik, weil:
>
> Ruhezustand der beiden Leitungen = 1
> Aktiv = 0

versuchte ich lange zu erklären, aber egal........
Durch die Invertierung ist es wired OR, es wird low wenn 1 oder mehr 
aktiv low werden.

: Bearbeitet durch User
von Walter T. (nicolas)


Lesenswert?

Joachim B. schrieb:
> Durch die Invertierung ist es wired OR, es wird low wenn 1 oder mehr
> aktiv low werden.

Das Fachwort dafür ist NICHT-Logik.

von Frank B. (frank501)


Lesenswert?

Joachim B. schrieb:
> nicht beim ESP32 oder anderen mit 3,3V VCC
> Ich wüsste nun nicht wo bei I2C eine bestimmete Spannung vorgegeben
> wird

Nein, eine bestimmte Spannung ist nicht vorgegeben, man kann einen 
I2C-Bus auch mit Devices aufbauen, die alle 1,8V Vcc haben.
Aber der TO arbeitet in diesem Fall mit 5V, weshalb ich mich auf diese 
bezogen habe.


Joachim B. schrieb:
> high ist inaktiv und inaktiv ist keine Verknüpfung
> am I2C ist aktiv low und nur damit gelten Verknüpfungen überhaupt!

Ob aktiv oder inaktiv ist vollkommen egal. Solange eine 1 / ein high 
durch (in diesem Fall!) 5V und eine 0 / ein low 0V oder GND ist, ist es 
positive logik. Also ist es ein and, ganz egal welcher Zustand dominant 
ist


Joachim B. schrieb:
> Durch die Invertierung ist es wired OR, es wird low wenn 1 oder mehr
> aktiv low werden.

Beim I2C ist aber nichts invertiert.
high = 1 = 5V
low  = 0 = 0V
invertiert wäre es anders herum

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Frank B. schrieb:
> Also ist es ein and

nö
bei /Reset oder /IRQ wird es auch wired OR genannt, ich wüsste nun nicht 
warum ausgerechnet hier andere Regeln gelten sollen!

aber jeder wie er will!

mws schrieb:
> Invertierte Logik, weil:
>
> Ruhezustand der beiden Leitungen = 1
> Aktiv = 0

dafür

von Klaus R. (klara)


Lesenswert?

Marten schrieb:
> SDA - SCL - GND - VCC??? Muss Vcc mitgeführt werden über das Kabel?
>
> Zur Info - die Slaves sind alle auf unterschiedlichen Platinen,
> generieren alle ihre eigene 5V-Spannung über einen LDO.

OK.

> Diese LDOs hängen jedoch am selben Netzteil.

Aha! Die Platinen werden also noch einmal extra vom zentralen Netzteil 
versorgt. Dafür gibt es sicher Gründe die wir nicht kennen.

Ich nutze für die externen I2C - Busse: SDA # SCL # GND # +8V.
Auf jeder Slave - Platine sitzt ein 7805 und gut ist es.
mfg klaus

: Bearbeitet durch User
von Arno (Gast)


Lesenswert?

Marten schrieb:
> Wenn ich einen I2C-Bus mit einem Master und mehreren Slaves dran habe,
> wo auch ein Pullup sitzt beim Master (auf Vcc) - wie muss das Kabel
> zwischen den Slaves aussehen bzw. vom Master zum ersten Slave?
>
> SDA - SCL - GND - VCC??? Muss Vcc mitgeführt werden über das Kabel?

Nein, muss es nicht. Wozu sollte es?

Nehmen wir mal an, auf Teilnehmer A und B sitzen Pull-Ups, auf C nicht. 
Dann fließt (sobald C den Bus auf Low zieht) Strom von VCC-A durch den 
Pull-Up, die SDA-Leitung, den OC-Transistor von Teilnehmer C und die 
GND-Leitung zurück zu GND-A. Dazu brauchst du keine VCC-Verbindung.

MfG, Arno

von Axel S. (a-za-z0-9)


Lesenswert?

Marten schrieb:
>
> Ja der Pullup ist nur beim Master dran, auf sein Vcc. Damit willst du
> sagen, dass der Vcc auf die anderen Slaves mitgegeben werden muss?

Nein. Warum auch? Elektrisch reicht jeweils ein Pullup-Widerstand an 
SCL und SDA. Und es ist in erster Näherung auch egal, wo am Bus der 
sitzt. Wenn man nur einen Master hat, dann ist es sinnvoll, die beiden 
Pullups auch am Master anzuschließen. Denn ohne den Master geht ja 
sowieso nichts. Falls der Master vom Bus getrennt wird, dann ist es auch 
egal ob die Pullups mit weg sind.

> Vcc_master, Vcc_slave1. Vcc_slave2 = 5V, aber alle hängen an
> Vcc_overall=9V. Der LDO isoliert ja nicht die 5V zu 9V, muss dann evtl.
> vielleicht doch nicht die 5V mitgegeben werden?

Aha. Du hast also eine gemeinsame Rohspannung für alle Baugruppen. Die 
wirst du dann ja wohl auf dem Bus mitführen wollen, oder? Es gibt genau 
gar keinen Grund, außerdem noch Vcc irgendeiner der Baugruppen (sei es 
der Master oder ein Slave) auf dem Bus mit herumreichen zu wollen. 
Selbst dann nicht, wenn man dem Bus mehrere Pullups spendieren wollen 
würde.

Denn auch das ist erlaubt. I²C erlaubt eine recht große Spannweite für 
den Pullup-Widerstand. Bei 5V dürfen es minimal 1.5kΩ sein, der 
Maximalwert hängt von der Buskapazität (Leitungslänge) und 
Geschwindigkeit ab. Bei 100kHz und den üblichen Leitungslängen von 
einigen Dutzend Zentimetern ist man auch mit 10kΩ noch auf der sicheren 
Seite. Man könnte sich z.B. auf 2kΩ festlegen.

Aber ob man nun 5x 10KΩ Pullups oder 1x 2KΩ Pullup verwendet, ist für 
die Funktion egal. Bei Hispeed-Bussen kann es sinnvoll sein, an jedem 
Ende der Leitung jeweils einen Pullup vorzusehen. Der wirkt dann wie 
eine HF-Terminierung. Und wenn die 5V für die Pullups dann aus 
verschiedenen 5V Netzteilen kommen, ist auch egal. Beim statischen 
H-Pegel wird dann das Netzteil mit der höheren Spannung "gewinnen", aber 
das ist erlaubt.

von J. S. (engineer) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> sehe ich anders, nicht die inaktiven Signale gelten sondern die aktiven
> Signale, aktiv ist LOW und wenn es egal ist welcher LOW ist dann ist es
> ODER

Hier kommt wieder die Dualität der invertierten Logik und der physischen 
Inversion durch activ low zum Tragen, womit manche ihre Probleme zu 
haben scheinen.

Hier ist es so, dass die invertierten Signale physikalisch verodert 
sind, was indirekt aber zu einer Verundung in der Logik führt. Das 
schlägt sich mithin auch in den Gleichungen nieder, denn:

(NOT A) AND (NOT B) ist equivalent zu NOT ( A OR B)

Um sich das zu vergegenwärtigen, lohnt ein Blick auf die 
CMOS-Architektur. Dort hat man nämlich stets beides parallel aufgebaut:

1) einen "high side"-Pfad mit negierender Physik (p-Kanal) in 
normalisierter Logik und

2) einen "low side"-Pfad mit nicht-negierende Physik (n-Kanal) in dazu 
passend invertierter Logik

D.h. einmal sind die Transistoren in UND-Methodik verschaltet, also in 
Serie, auf der anderen Seite sind sie in ODER-Methodik verdrahtet, also 
parallel. Durch einmal die Inversion in Logik (Verschaltung) und einmal 
in Physik (Ausgangspegel des Gates zum Eingangspegel) hebt sich das weg 
und ist praktisch zweimal exakt die gleiche logische Schaltfunktion. Nur 
physikalisch ist etwas anderen und sie ergänzen sich.

Bei pullups ist es im Grunde exakt das Gleiche, nur dass man sich bei 
der Realisierung auf jeweils einen aktiven Pfad beschränkt.

: Bearbeitet durch User
von mIstA (Gast)


Lesenswert?

Joachim B. schrieb:
> Ich nenne es weiterhin wired OR weil die Kommunikation nur funktioniert
> wenn der Eine ODER der Andere quatscht

Na dann müßtest es aber konsequenter Weise wired-XOR nennen. ;)

von Joachim B. (jar)


Lesenswert?

mIstA schrieb:
> Na dann müßtest es aber konsequenter Weise wired-XOR nennen

ich muss ja nun mal gar nichts, aber egal, alle die es AND nennen haben 
eh Logikprobleme, denn wenn beide AND schweigen also SCL SDA high würde 
ich das nicht Kommunikation nennen!

von Andi B. (andi_b2)


Lesenswert?

Axel S. schrieb:
> Aber ob man nun 5x 10KΩ Pullups oder 1x 2KΩ Pullup verwendet, ist für
> die Funktion egal. Bei Hispeed-Bussen kann es sinnvoll sein, an jedem
> Ende der Leitung jeweils einen Pullup vorzusehen. Der wirkt dann wie
> eine HF-Terminierung. Und wenn die 5V für die Pullups dann aus
> verschiedenen 5V Netzteilen kommen, ist auch egal.

Vorsicht. Wenn du auf mehreren Prints Pullups zu verschiedenen 
Spannungen einbaust, dann überlege dir was passiert, wenn eine dieser 
Spannungsversorgungen ausfällt. Wenn du da die Pullups nicht mit z.B. 
Dioden entkoppelst, wird sich dieser Print über die Pullups versorgen 
und deinen restlichen Bus stören.

In diesem Zusammenhang auch der Hinweis, I²C Bausteine dürfen auch ohne 
Versorgung den Bus nicht stören. Früher Allgemeinwissen, aber als dann 
andere Hersteller als Philips angefangen haben I²C Interfaces einzubauen 
und "vergessen" haben die interne Schutzbeschaltung entsprechend 
anzupassen, hat man das dann auch explizit in die Spec reingeschrieben. 
Ich meine es war so bei FAST.

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.