Forum: Mikrocontroller und Digitale Elektronik I2C müsste doch theoretisch Kurzschlüsse verursachen


von Pascal (Gast)


Lesenswert?

Hi,

ich habe mich schon seit längerer Zeit damit beschäftigt, statt SPI mit 
I2C eine EEPROM, die hier bei mir noch rumliegt, anzusteuern.
Allerdings möchte ich verstehen, wie über zwei Drähte Daten gesendet und 
empfangen werden.
So, wie ich das verstehe, wird bei I2C bei einer Flanke (z.B. High-Low) 
gesendet und bei Low-High dann empfangen.
Aber müssten dann nicht dauernd Kurzschlüsse entstehen?
Wenn der sendende IC High ausgibt, dann kann dieser zwar, bevor der 
angesteuerte IC einen Takt erhält, auf Low gehen, aber wenn dann der 
andere IC High ausgibt, dann entsteht ein Kurzschluss.

Sind intern Widerstände bzw. spezielle I2C-Empfangsschaltungen 
enthalten?

Mikrocontroller können nur High oder Low oder PWM ausgeben, aber nicht 
den Pin von High UND Low trennen..

ich bin dankbar für jede gute Erklärung.
i2c eeprom: 24LC16B

Pascal

P.S. das Prinzip an sich verstehe ich gut.
Da ich in SPI viel erfahrener bin, gibt es vielleicht SPI-> I2C-Wandler?
Die wären sicher sehr hilfreich. Am besten im dip 8 package.

von THOR (Gast)


Lesenswert?

Da entsteht kein Kurzschluss weil der Bus nur nen Pull-Up hat, keiner 
der angeschlossenen Geräte gibt aktiv HIGH aus. Es fließt immer nur 
Strom in den SDA/SCL Pin, er liefert nie welchen.

Der 10k Pullup wird allerdings tatsächlich kurzgeschlossen wenn man so 
will.

von Peter II (Gast)


Lesenswert?

Pascal schrieb:
> P.S. das Prinzip an sich verstehe ich gut.

scheinbar nicht.

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

[...]
Im Diagramm rechts sind drei Geräte eingezeichnet. I²C benötigt zwei 
Signalleitungen: Takt- (SCL = Signal Clock) und Datenleitung (SDA = 
Signal Data). Beide liegen mit den Pull-up-Widerständen RP an der 
Versorgungsspannung VDD. Sämtliche daran angeschlossenen Geräte haben 
Open-Collector-Ausgänge, was zusammen mit den Pull-up-Widerständen eine 
Wired-AND-Schaltung ergibt.
[...]

Es wird keine High ausgegeben.

von Einer K. (Gast)


Lesenswert?

Pascal schrieb:
> Wenn der sendende IC High ausgibt,

Tut er nicht!
Der Ausgang wird im Openkollektor (Open Drain) Betrieb genutzt.

von g457 (Gast)


Lesenswert?

> P.S. das Prinzip an sich verstehe ich gut.

Nein. Das Prinzip nennt sich 'open collector' bzw. 'open drain' [0].

HTH

[0] https://en.wikipedia.org/wiki/Open_collector

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Pascal schrieb:
> Mikrocontroller können nur High oder Low oder PWM ausgeben, aber nicht
> den Pin von High UND Low trennen..

Falsch.

> P.S. das Prinzip an sich verstehe ich gut.

Nein, Du hast offenbar so wirklich gar keine Ahnung davon. Zunächst 
solltest Du Dich mit den Grundlagen der Digitalelektronik 
auseinandersetzen, und dazu gehören eben auch die "analogen" 
Eigenschaften der Signale.

von Cyborg (Gast)


Lesenswert?

Andreas S. schrieb:
> Nein, Du hast offenbar so wirklich gar keine Ahnung davon. Zunächst
> solltest Du Dich mit den Grundlagen der Digitalelektronik
> auseinandersetzen, und dazu gehören eben auch die "analogen"
> Eigenschaften der Signale.

Das wäre doch schon zu hoch für den TO. Mit dem ohmschen Gesetz
würde ich mal anfangen.

Beitrag #4931766 wurde von einem Moderator gelöscht.
Beitrag #4931777 wurde von einem Moderator gelöscht.
von Klaus R. (klara)


Lesenswert?

THOR schrieb:
> Da entsteht kein Kurzschluss weil der Bus nur nen Pull-Up hat, keiner
> der angeschlossenen Geräte gibt aktiv HIGH aus. Es fließt immer nur
> Strom in den SDA/SCL Pin, er liefert nie welchen.
>
> Der 10k Pullup wird allerdings tatsächlich kurzgeschlossen wenn man so
> will.

Hallo Pascal,
THOR hat so weit recht. Aber der Pullup wird nicht kurzgeschlossen, 
sondern die Spannung an SDA bzw. SCL. Dann fliesst maximal I = U / R 
Strom über den Pullup gegen Masse.
mfg klaus

Beitrag #4932387 wurde von einem Moderator gelöscht.
Beitrag #4932412 wurde von einem Moderator gelöscht.
von S. R. (svenska)


Lesenswert?

Pascal schrieb:
> Mikrocontroller können nur High oder Low oder PWM ausgeben, aber nicht
> den Pin von High UND Low trennen..

Doch können sie, das Stichwort nennt sich "Tristate" oder 
"High-Impedance".

von Wolfgang (Gast)


Lesenswert?

Pascal schrieb:
> Aber müssten dann nicht dauernd Kurzschlüsse entstehen?

Nein, die Ausgänge von I2C Master und Slave sind über wirred OR (in 
negativer Logik) zusammengeschaltet. Sobald einer die SDA-Leitung mit 
seinem Open-Kollektor Ausgang nach 0V zieht, liegt (etwas) 0V auf der 
Leitung. Der Strom, der immer versucht, den Bus auf VDD zieht, kommt von 
dem bei I2C immer erforderlichen Pull-Up Widerstand, aber nicht von 
Master oder Slave.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Nein, die Ausgänge von I2C Master und Slave sind über wirred OR (in
> negativer Logik)
Oder gleich ein "Wired And": nur wenn alle Teilnehmer ein High (= kein 
Low) ausgeben kommt auf dem Bus ein High zustande.

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Nein, die Ausgänge von I2C Master und Slave sind über wirred OR (in
> negativer Logik) zusammengeschaltet. Sobald einer die SDA-Leitung mit
> seinem Open-Kollektor Ausgang nach 0V zieht, liegt (etwas) 0V auf der
> Leitung. Der Strom, der immer versucht, den Bus auf VDD zieht, kommt von
> dem bei I2C immer erforderlichen Pull-Up Widerstand, aber nicht von
> Master oder Slave.

dummerweise sind nicht alle 5V Teile ohne pullups, doof halt wenn die 
auf 5V ziehen RTC DS3231 aber einer nicht 5V tolerant ist Raspi.

Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind, das muss man 
dann genau wissen oder untersuchen, sicherer ist man immer wenn I2C 
devices mit der passenden Spannung laufen und laufen können, also

alle 5V oder alle 3,3V das ist optimal, Mischbetrieb kann Probleme 
machen oder Nebenwirkungen haben.

von anti (Gast)


Lesenswert?

Klaus R. schrieb:
> Dann fliesst maximal I = U / R
> Strom über den Pullup gegen Masse.

Hoffentlich schafft es der Strom gegen die Masse.

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> dummerweise sind nicht alle 5V Teile ohne pullups, doof halt wenn die
> auf 5V ziehen RTC DS3231 aber einer nicht 5V tolerant ist Raspi.

Dann muss man vielleicht mal mit zwei Bussegmenten arbeiten (5V bzw. 
3.3V) und einen Pegelkonverter dazwischen setzen.
http://www.nxp.com/documents/application_note/AN10441.pdf

Lothar M. schrieb:
> Oder gleich ein "Wired And": nur wenn alle Teilnehmer ein High (= kein
> Low) ausgeben kommt auf dem Bus ein High zustande.

Ich finde es logischer, sich auf den aktiven Zustand zu beziehen (i.e. 
sobald ein Teilnehmer aktiv ist) und das drückt sich besser durch ODER 
aus.

von D'oh! (Gast)


Lesenswert?

Joachim B. schrieb:
> dummerweise sind nicht alle 5V Teile ohne pullups, doof halt wenn die
> auf 5V ziehen RTC DS3231 aber einer nicht 5V tolerant ist Raspi.

Der DS3231 ist da aber nicht schuld, weil im Datenblatt steht eindeutig
"This open-drain pin requires an external pullup resistor".

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind,

Beispiele?

Für den Standard I2C-Bus ist das nicht zugelassen und funktioniert 
nicht. In der Spezifikation von Philips/NXP steht ganz klar "The output 
stages ... must have an open-drain or open-collector ..." (Kap.3.1.1)
http://www.nxp.com/documents/user_manual/UM10204.pdf

Und der UFm-I2C-Bus ist unidirektional.

von Christian M. (Gast)


Lesenswert?

D'oh! schrieb:
> Der DS3231 ist da aber nicht schuld, weil im Datenblatt steht eindeutig
> "This open-drain pin requires an external pullup resistor".

Nur die China-Module haben an ALLEN Eingängen Pull-Ups drauf!

Gruss Chregu

von Joachim B. (jar)


Lesenswert?

D'oh! schrieb:
> Der DS3231 ist da aber nicht schuld, weil im Datenblatt steht eindeutig
> "This open-drain pin requires an external pullup resistor".

stimmt, da habe ich zu wenig geschrieben es ist das China Modul, beim 
DS1307 Modul (einzelne R) ist es halt leichter als beim DS3231 Modul 
(Array sehr winzig) die R auszulöten.

Wolfgang schrieb:
> Joachim B. schrieb:
>> Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind,
>
> Beispiele?
>
> Für den Standard I2C-Bus ist das nicht zugelassen und funktioniert
> nicht. In der Spezifikation von Philips/NXP steht ganz klar

und das weisst du für alle I2C devices?
Es soll ja auch Module geben die nur I2C ähnlich sind aus Lizensgründen 
und dann sind da noch I2C ähnliche Implementierungen ohne echte OC.

Christian M. schrieb:
> Nur die China-Module haben an ALLEN Eingängen Pull-Ups drauf!
> Gruss Chregu

stimmt und beim DS3231 Modul habe ich die R noch nie abgeklemmt, ist mir 
zu fummelig.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Wolfgang schrieb:
>> Joachim B. schrieb:
>>> Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind,
>>
>> Beispiele?
>>
>> Für den Standard I2C-Bus ist das nicht zugelassen und funktioniert
>> nicht. In der Spezifikation von Philips/NXP steht ganz klar
>
> und das weisst du für alle I2C devices?

Ja, alles andere ist nicht I2C und kann auch nicht wie I2C 
funktionieren.

Bei welchen Bausteinen ist dir begegnet, dass die keinen Open-Drain oder 
Open-Kollektor als Ausgangsstufe haben?

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Ja, alles andere ist nicht I2C und kann auch nicht wie I2C
> funktionieren.
>
> Bei welchen Bausteinen ist dir begegnet, dass die keinen Open-Drain oder
> Open-Kollektor als Ausgangsstufe haben?

was genau hast du an

Joachim B. schrieb:
> Es soll ja auch Module geben die nur I2C ähnlich sind aus Lizensgründen
> und dann sind da noch I2C ähnliche Implementierungen ohne echte OC.

nicht verstanden?

es gibt z.B. I2C ähnlich versteckt im µC ohne OC Ports.

Wolfgang schrieb:
> Bei welchen Bausteinen ist dir begegnet, dass die keinen Open-Drain oder
> Open-Kollektor als Ausgangsstufe haben?

z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching 
und wo sind seine OC Ports?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching
> und wo sind seine OC Ports?

Hinter dem DDR-Register ;-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching
> und wo sind seine OC Ports?
Es reicht aus, wenn man den Pin zwischen Ausgang und Eingang 
umschalten kann, denn ein Eingang ist hochohmig...

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Joachim B. schrieb:
>> z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching
>> und wo sind seine OC Ports?
>
> Hinter dem DDR-Register ;-)

das ist gemogelt und das solltest du wissen!

Lothar M. schrieb:
> Joachim B. schrieb:
>> z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching
>> und wo sind seine OC Ports?
> Es reicht aus, wenn man den Pin zwischen Ausgang und Eingang
> umschalten kann, denn ein Eingang ist hochohmig...

ach was und hochohmig ist OC, ich weiss das du das selbst nicht glaubst, 
auch der hochohmige Port ist nicht OC und würde kaum auf 30V gehieft 
werden können wegen der Bodydioden.

Ein Mix aus 3,3V und 5V I2C ist so nicht möglich

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Joachim B. schrieb:
> Ein Mix aus 3,3V und 5V I2C ist so nicht möglich

Warum soll ein Mix aus 3V3 und 5V nicht möglich sein, wenn man die 
Leitung nicht auf 30V gehoben bekommt? Was hat das eine mit dem anderen 
zu tun?

Oder sind deine Probleme eher irrelevant?

von Joachim B. (jar)


Lesenswert?

S. R. schrieb:
> Warum soll ein Mix aus 3V3 und 5V nicht möglich sein

nehmen wir einen µC mit Bodydioden auf 3,3V ohne OC, dort wird sich auf 
high auf kaum viel mehr als 3,8V auch mit pullups an 5V einstellen was 
bei einigen Chips mit 5V + 5%Tol. sagen wir 5,25V nicht für eine sichere 
high Erkennung reicht.

Den Fall gab es so ähnlich schon bei RGBPixel Stripes am PI

Data und Clock maximal 3,3V - Toleranz high ab 80% VCC welches bei 
5Vsoll 4V wären und bei 70% sogar 3,5V, wie auch immer es reicht 
manchmal nicht.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Joachim B. schrieb:
> Data und Clock maximal 3,3V - Toleranz high ab 80% VCC welches bei
> 5Vsoll 4V wären und bei 70% sogar 3,5V, wie auch immer es reicht
> manchmal nicht.

 Doch.
 Atmel garantiert ein sicheres Erkennen bei 60% der VCC, was
 normalerweise bedeutet, dass alles über 3V als HIGH erkannt wird.

 In der Praxis wird in 99% der Fälle alles über 2,8V sicher erkannt.

 P.S.
 Der Vorteil ist, dass es nach oben bis 2,8V auf Log.0 bleibt und erst
 bei etwa 1,6V wieder von Log.1 auf Log.0 umschaltet - es gibt also kein
 ständiges Umschalten zwischen 0 und 1 oder zufällige Werte, ausser
 beim Einschalten.

: Bearbeitet durch User
von Chris F. (chfreund) Benutzerseite


Lesenswert?

Pascal schrieb:
> Da ich in SPI viel erfahrener bin, gibt es vielleicht SPI-> I2C-Wandler?
> Die wären sicher sehr hilfreich. Am besten im dip 8 package.

Du willst ein weiteres Bauteil plus Peripherie (kaufen+)einsetzen weil 
Du keine Lust hast das Protokoll zu lernen? Da ist es günstiger direkt 
das SPI-EEPROM zu beschaffen.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Andreas S. schrieb:
> Nein, Du hast offenbar so wirklich gar keine Ahnung davon.
Etwas weniger verbale Konfrontationssprache wäre besser, finde Ich. Wir 
sind hier ja nicht im Erdoganland. Noch nicht, wenigstens :-)

> Zunächst solltest Du Dich mit den Grundlagen der Digitalelektronik
> auseinandersetzen,
Man merkt, dass Du ein ITler bist :-)  Du unterschlägst bei deiner 
Kritik den Sachverhalt der Stromstärke! Viele Mikrocontroller sind nicht 
in der Lage, den SPEC-gemäss zu treiben. Egal ob Tri-Ste oder nicht.

Zum thread:

>  I2C müsste doch theoretisch Kurzschlüsse verursachen
Tut es ja auch, wenn man z.B. das ACK zu früh kommen lässt oder es keine 
intelligente Steuerung gibt, die verhindert, dass jeder anfängt zu 
funken, z.B. bei Multimaster. I2C ist aber auf Kollision ausgelegt! Das 
muss man eben managen.

Ein elektrisches Busproblem durch Überlast etc gibt es dann nicht, wenn 
man einen I2C-Treiber dazwischen schaltet. Auch bei FPGAs, die ja ein 
Tristate kennen, ist es vom Pegel her sinnvoller, das mit einem 
Bustreiber zu machen. Der wird dann nur mit logischen Pegeln getrieben, 
braucht also auch keine Tristate.

von Joachim B. (jar)


Lesenswert?

Marc V. schrieb:
>  In der Praxis wird in 99% der Fälle alles über 2,8V sicher erkannt.

och du willst nur wieder spielen, nach deiner eigenen Aussage gibt es 
also 1% Unsicherheit, das reicht wohl für viele Probleme bei der 
schieren Menge von Atmels und noch mehr bei anderen Herstellern!

Ausserdem stellten wir ja fest das vieles als "I2C" verkauft wird was es 
nicht ist.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #4933299:
>>  I2C müsste doch theoretisch Kurzschlüsse verursachen
> Tut es ja auch, wenn man z.B. das ACK zu früh kommen lässt oder es keine
> intelligente Steuerung gibt, die verhindert, dass jeder anfängt zu
> funken, z.B. bei Multimaster. I2C ist aber auf Kollision ausgelegt! Das
> muss man eben managen.

 Tut es nicht.
 Ein PullUp ist kein Kurzschluss.

 SDA ist immer open-drain.
 Und da es auch so etwas wie Clockstretching gibt, sollte auch die
 SCL-Leitung über PullUp gefahren werden.
 Dass nicht alle ATMEL Clockstretching unterstützen, heisst noch lange
 nicht, dass die SCL-Leitung aktiv gesteuert wird.

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Ein Mix aus 3,3V und 5V I2C ist so nicht möglich

Das Problem ist doch schon seit fast 10h gelöst.

Wolfgang schrieb:
> Dann muss man vielleicht mal ...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Joachim B. schrieb:
> Marc V. schrieb:
>>  In der Praxis wird in 99% der Fälle alles über 2,8V sicher erkannt.
>
> och du willst nur wieder spielen, nach deiner eigenen Aussage gibt es
> also 1% Unsicherheit, das reicht wohl für viele Probleme bei der
> schieren Menge von Atmels und noch mehr bei anderen Herstellern!

 Nein, ich will nicht spielen.
 Die meisten Hersteller garantieren 90% der VCC bis zu 5mA an einem
 I/O Pin.
 Bei 3V3 sind es 3V und das reicht vollkommen.

 Ein IC, welches mit 3V (und dann noch -10%) an einem 5V Bus hängt,
 ist von vornherein falsch eingesetzt.

von Wolfgang (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #4933299:
>>  I2C müsste doch theoretisch Kurzschlüsse verursachen
> Tut es ja auch, wenn man z.B. das ACK zu früh kommen lässt oder ...

Einen Widerstand im kΩ-Bereich würde ich jetzt nicht als "Kurzschluss" 
bezeichnen - zumindest wenn man über Spannungen von wenigen Volt redet.

von Ralf D. (doeblitz)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #4933299:
> Man merkt, dass Du ein ITler bist :-)  Du unterschlägst bei deiner
> Kritik den Sachverhalt der Stromstärke! Viele Mikrocontroller sind nicht
> in der Lage, den SPEC-gemäss zu treiben. Egal ob Tri-Ste oder nicht.

Welche sind das denn? Die I2C-Spec verlangt 3mA Sink-Current für 
Standard-Mode, 6mA für Fast-Mode und 20mA für Fast-Mode Plus. Ein µC, 
der noch nicht einmal die 3mA schafft, dürfte wohl eher für 
Nischenanwendungen gedacht sein.

von Joachim B. (jar)


Lesenswert?

Marc V. schrieb:
>  Ein IC, welches mit 3V (und dann noch -10%) an einem 5V Bus hängt,
>  ist von vornherein falsch eingesetzt.

ich weiss das, was denkst du wieviel Teile gleichzeitig mit Arduino & PI 
beworben werden trotz der (üblichen) Spannungsunterschiede?

OK und nur weil Bauteile falsch eingesetzt werden ist mein Schrieb lange 
noch nicht falsch.

Ach ne hier sind ja nur Profis die nie munter falsch und mit falschen 
Komponenten mixen würden.....

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Joachim B. schrieb:
> OK und nur weil Bauteile falsch eingesetzt werden ist mein Schrieb lange
> noch nicht falsch.

 Habe ich auch nicht behauptet.


> Ach ne hier sind ja nur Profis die nie munter falsch und mit falschen
> Komponenten mixen würden.....

 Falsch ist und bleibt immer falsch.
 3V3 mit 5V ist, solange es um logische Zustände geht, nicht falsch
 und funktioniert fast immer.

 3V ist schon kritisch und meistens falsch.

 3V - 10% ist von vornherein falsch.

: Bearbeitet durch User
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.