RieJue
Posts: 5
Joined: Thu Jul 14, 2016 9:49 pm

Pullupwiderstände I2C-Bus

Wed Jan 31, 2018 11:14 pm

Hallo ...,
Beim Anschluss einer 4 zeiligen Text-Anzeige an den I2C-Bus des Raspberry Pi habe ich die Pullupwiderstände R23 und R24 auf der Platine von 1K8 auf 10K ändern müssen, damit die Anzeige funktioniert. Mit dem Oszilloskop habe ich bei Pullup-Widerstandswerten 1K8 beim low-Level ACK-Signal der Anzeige 1V5 gemessen. Nach Spezifikation muss eine Low-Signal (bei VDD=3V3) eines am Bus angeschlossenen Devices < 1V sein. Warum sind die Pullupwiderstände auf dem Raspberry Pi so niederohmig?
Grüße Jürgen

smartifahrer
Posts: 576
Joined: Sat Feb 13, 2016 8:10 am

Re: Pullupwiderstände I2C-Bus

Thu Feb 01, 2018 5:49 am

im SoC des pi sind auch welche drin. Ob Pullup oder Pulldown ist Konfigurierbar.
Ich habe in den Tutorials zum I2C noch nicht gesehen das Pullup Widerstände am Bus angeschlossen waren. Hat wohl was mir der Länge zu tun.
Die Pullupwiderstände die du geändert hast sind auf Display-Platine? Ist das Display vielleicht für 5 Volt Pegel auf dem Bus ausgelegt statt 3,3 Volt.

User avatar
mline
Posts: 1112
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pullupwiderstände I2C-Bus

Thu Feb 01, 2018 6:26 pm

smartifahrer wrote:
Thu Feb 01, 2018 5:49 am
...Hat wohl was mir der Länge zu tun....
Nein, es geht nur darum, die höchstmögliche Geschwindigkeit (400 kbit/s Fast mode) zu erreichen. Je höher man die Pullups festlegt, desto länger braucht man um den Pin auf ein bestimmtes Niveau zu ziehen.
Das zu erklären würde den Rahmen dieses Forums sprengen, darum empfehle ich euch hiermit die "Wissenschaftlerthreads" auf mikrocontroller.net oder allgemein die Suchmaschine eures Vertrauens.
<~~>

RieJue
Posts: 5
Joined: Thu Jul 14, 2016 9:49 pm

Re: Pullupwiderstände I2C-Bus

Sun Feb 11, 2018 10:23 pm

Das Display hat keine Pullup-Widerstände. Ich habe die Widerstände auf der Raspberry Pi Platine geändert. Die verwendeten Widerstände haben auch keinen Einfluss auf den Bustakt.
Grüße Jürgen

smartifahrer
Posts: 576
Joined: Sat Feb 13, 2016 8:10 am

Re: Pullupwiderstände I2C-Bus

Mon Feb 12, 2018 6:57 am

Die Widerstände sollen den Einsatz eines höheren Taktes erst ermöglichen, nicht ihn erzeugen. Es geht hierbei nicht um die Geschwindigkeit des Taktes sondern um die Signalübertragung bzw. wie stark das Signal verändert wird, z.B durch Leitungskapazitäten. Wird das Signal zu sehr verfälscht erkennt der Empfänger es nicht mehr und es ist keine Übertragung mehr möglich. Die Widerstände dienen dazu, dass erst bei einer höheren Frequenz das Signal nicht mehr erkannt wird als ohne. Mehr hierzu in den erwähnten "Wissenschaftlerthreads".

User avatar
mline
Posts: 1112
Joined: Sun Jan 27, 2013 1:47 pm
Location: Austria, Vienna

Re: Pullupwiderstände I2C-Bus

Mon Feb 12, 2018 7:40 am

smartifahrer wrote:
Mon Feb 12, 2018 6:57 am
Die Widerstände dienen dazu, dass erst bei einer höheren Frequenz das Signal nicht mehr erkannt wird als ohne.
Das ist Unsinn.

I2C arbeitet mit Open-Collector-Ausgängen. Haben also ohne Pullups immer LOW-Level. Durch den Pullup zieht man das Level auf HIGH und der Open-Collector-Ausgang zieht es dann, wenn Daten übertragen werden, wieder auf LOW.
Ist der Widerstand allerdings zu groß, braucht der Ausgang zu lange um auf LOW zu ziehen -> geringere Geschwindigkeit. Das Signal ist dann auch kein Rechtecksignal mehr sondern mehr ein Sägezahnsignal.
Darum muss je nachdem wieviele I2C-Geräte am Bus hängen bzw wie lange die Leitungen sind, der Widerstand angepasst werden.

Mehrere Pullups an RPi und I2C-Geräten sind eine Parallelschaltung. Siehe erste Kirchhoffsche Regel

Die Widerstände auf der Pi sind für die meisten Geräte geeignet. Allerdings sollten diese selbst auch Pullups mitbringen. Tun sie das nicht, muss man die selbst einbauen.


In den Manuals der Chiphersteller findet man meist auch ein Timingdiagram. Sind die Werte ausserhalb der Toleranzen, wird der Chip nicht mehr funktionieren.
Beispiel: https://datasheets.maximintegrated.com/en/ds/DS1307.pdf Seite 3 und 4
<~~>

RieJue
Posts: 5
Joined: Thu Jul 14, 2016 9:49 pm

Re: Pullupwiderstände I2C-Bus

Wed Feb 28, 2018 8:05 pm

Ohne Pullup-Widerstand hat der I2C-BUS weder high noch low-Pegel, er hängt in der Luft. Lediglich die Eingangstreiber der angeschlossenen Teilnehmer mit ihrem Eingangswiderstand bewirken irgendeinen Pegel.

Die maximale Frequenz die man auf dem I2C-Bus erreichen kann ist nur indirekt abhängig vom Pullup-Widerstand. Als schaltendes Element das den Takt vorgibt fungiert ein Transistor, Mosfet oder FET der Teilnehmer am BUS. Diese Bauteile haben eine begrenzte Transitfrequenz fT und bis zu dieser Frequenz könnte der Bus getaktet werden, soweit nicht noch andere Kriterien wie die Bus-Leitungskapazität die Taktrate begrenzen.
Eine weitere Frequenzverschlechternde Eigenschaft ist, dass die Transistoren oder MOSFETs im Sätigungsbereich betrieben werden.

Die Transitfrequenz hängt vom Arbeitspunkt ab (I2C, pullup-Widerstand). Ähnlich wie die Stromverstärkung, steigt auch die Transitfrequenz mit steigender Last (höherer Kollektorstrom) zunächst an, erreicht ein Maximum und sinkt dann ab. Direkte Einflussgrößen der Transitfrequenz sind die Sperrschichtkapazitäten und der Bahnwiderstand. (Wikipedia)

Ich hatte keine Probleme mit dem Takt, sondern mit dem Einstellen des Arbeitspunkts vom Pullup-Widerstand (open Collecter oder open Drain Widerstand). Der Mosfet oder Transistor des Slaves den ich an den I2C Bus des Raspberry Pi angeschlossen habe, hat im durchgeschalteten Zustand nach Masse einen so hohen „On-Widerstand“ (Drain Source- bzw. Collector Emitterwiderstand), dass ein "low" auf dem I2C-Bus bei durchgeschaltetem Halbleiterbauteil nicht erreicht wurde.
Grüße Jürgen Rieger
Attachments
I2C-Bus.jpg
I2C-Bus.jpg (42.4 KiB) Viewed 419 times

Return to “Deutsch”

Who is online

Users browsing this forum: No registered users and 2 guests