Forum: Mikrocontroller und Digitale Elektronik Fragen zum I2C Bus


von Stefan S. (dipsy)


Lesenswert?

Guten Tag

Ich habe einen ganzen Haufen Fragen zum I2C Bus.
Da ich ein PCB anfertigen lassen muss (€€) will ich unbedingt sicher 
sein dass der I2C optimal fukntioniert, zumals dass er stark belastet 
sein wird.


1. Ich habe in der offizielle Dokumentation gelesen dass ein Rs 
Widerstand in Serie mit dem SDA und SCL Eingänge der I2C Chips gut wäre.
(Kann nicht schaden oder?)
http://www.nxp.com/documents/user_manual/UM10204.pdf

Aber sie geben nicht die mathematische Formel um den Maximalwert zu 
berechnen:
http://img15.hostingpics.net/pics/224900721.png
Wie ist es mit dem 3.3V???


2. Die Bus Kapazität ist wichtig mit I2C. Wie brechnet man es?
"input capacitance" einzelner Chips + Kabel Kapazität? Richtig?
Wie berechnet man (ungefähr) die Kabelkapazität???? Es hängt vom Design 
vom PCB nehme ich an. Kann Eagle das berechnen?


3. In der Dokumentation eines Philips LED Driver habe ich gelesen dass 
es ratsam wäre ein Widerstand in Serie mit den Adress-Pins zu schalten 
(wenn an Vcc angechlossen natürlich)
"A standard 10 kOhm pull-up resistor is required to obtain the best 
system level ESD performance."

Wichtig oder nicht?


4. Ich nehme an dass die SDA und SCL Leiterbahnen die gleiche Länge 
haben müssen. Wie hoch ist da die Toleranz bei 1MHz (ist es im mm oder 
cm Bereich)???


5. Ich habe I2C Kontakte pin am Ende der Kette, um später 
Erweiterungen anzuschliessen. Wenn unbenutzt, muss ich sie in Serie mit 
einen starken Widerstand anschliessen (um Echo im Signal zu vermeiden)?


6. Muss man ein 0.10μF zwischen Vcc und Masse der I2C Chips 
anschliessen???
Sehe keine in der Schaltung in den Datenblätter.



Danke :-)

von Stefan (Gast)


Lesenswert?

1)
Der SPI Bus wird durch im Open-Collector Modus angesteuert. Die Ausgänge 
aller Bus-Teilnehmer können daher parallel geschaltet werden. Weger der 
Open-Collector Betriebsart sind Pull-Up Widerstände zwingend nötig. Was 
Open-Collector ist, weisst Du aber, oder? Wenn nicht, schau mal bei 
Wikipedia.

In der Regel benutzt man 10k Ohm Widerstände. Bei Lego Mindstorm muss 
man 82k Ohm nehmen.

2)
Die Kapazität ist die Summe der Eingangskapazitäten der Busteilnehmer 
(siehe Datenblatt) plus Kabel. Wobei die Kapazitäten der Chips 
typischerweise viel höher sind, als die der Kabel.

3)
Manche Chips arbeiten besser, wenn man die Eingänge direkt auf VCC/GND 
legt, andere wiederum arbeiten besser, wenn man VCC nicht direkt sondern 
über einen Widerstand anschließt. Hier würde ich dem Ratschlag des 
jeweiligen datenblattes folgen. Falls da nichts relevantes drin steht, 
dann bei TTL Technologie über 1k Ohm Widerstand, bei MOS direkt an VCC 
anschließen.

4)
Ich denke, dass die SDA Leitung nicht zwingend die gleiche Länge haben 
muss, wie die SCL Leitung. Es werden immer zuerst das Datenbit angelegt, 
und danach ein Taktimpuls gesendet. Dazwischen muss genügend Zeit 
verstreichen, um die Kapazitäten umzuladen und die vom jeweiligen Slave 
verlangten Vorlaufzeiten zu erfüllen. Solange das Timing passt, spricht 
nichts gegen unterschiedliche Leitungslängen.
Wir reden hier doch von Zentimetern, nicht Kilometern.

5)
Der I2C Bus wird NICHT terminiert, so wie Du das vermutlich von Ethernet 
oder FBAS Leitungen gewohnt bist. Der I2C Bus ist so kurz, dass 
entsprechende Schwingungen gar nicht entstehen bzw so schnell abklingen, 
dass sie keine Rolle spielen. Deswegen ist die maximal erlaubte Bitrate 
auch gering.

6) Jeder Chip benötigt einen (persönlichen) Kondensator zwischen VCC und 
Masse. Wenn im Datenblatt keine Enpfehlung steht, dann nimm 100nF, sonst 
den Wert, den das Datenblatt empfiehlt. Mit I2C hat dieser Punkt nichts 
zu tun, er gilt immer.

von 6A66 (Gast)


Lesenswert?

Stephan S. schrieb:
> Ich habe einen ganzen Haufen Fragen zum I2C Bus.
> Da ich ein PCB anfertigen lassen muss (€€) will ich unbedingt sicher
> sein

Hallo Stephan,

auch I2C kann ein bischen fricklig sein. Wenn Du auf den ersten Schuss 
das PCB hinbekommen musst dann wäre ein Prototyp auf 
Lochraster/SMD-Raster ratsam.

rgds

von Falk B. (falk)


Lesenswert?

@  Stephan S. (dipsy)

>Widerstand in Serie mit dem SDA und SCL Eingänge der I2C Chips gut wäre.
>(Kann nicht schaden oder?)
>http://www.nxp.com/documents/user_manual/UM10204.pdf

Naja, ein Angstwiderstand. Ist nicht wirklich wichtig.

>Aber sie geben nicht die mathematische Formel um den Maximalwert zu
>berechnen:
>http://img15.hostingpics.net/pics/224900721.png
>Wie ist es mit dem 3.3V???

Liegt irgendwo zwischen 2,5 und 5V.

>2. Die Bus Kapazität ist wichtig mit I2C. Wie brechnet man es?
>"input capacitance" einzelner Chips + Kabel Kapazität? Richtig?

Ja.

>Wie berechnet man (ungefähr) die Kabelkapazität???? Es hängt vom Design
>vom PCB nehme ich an.

Ja.

> Kann Eagle das berechnen?

Nein. Pi mal Daumen vielleicht 1pF/cm.

>3. In der Dokumentation eines Philips LED Driver habe ich gelesen dass
>es ratsam wäre ein Widerstand in Serie mit den Adress-Pins zu schalten
>(wenn an Vcc angechlossen natürlich)
>"A standard 10 kOhm pull-up resistor is required to obtain the best
>system level ESD performance."

>Wichtig oder nicht?

Nein.

>4. Ich nehme an dass die SDA und SCL Leiterbahnen die gleiche Länge
>haben müssen.

Nein, das ist vollkommen unkritisch, selbst 1m Differenz würde 
funktionieren.

>Wie hoch ist da die Toleranz bei 1MHz (ist es im mm oder
>cm Bereich)???

;-)

>5. Ich habe I2C Kontakte pin am Ende der Kette, um später
>Erweiterungen anzuschliessen. Wenn unbenutzt, muss ich sie in Serie mit
>einen starken Widerstand anschliessen (um Echo im Signal zu vermeiden)?

Nein, I2C ist viel zu langsam und im Normalfall die Leitungen viel zu 
kurz, damit das Thema Wellenwiderstand greift. Ausserdem ist I2C 
hochohmig, das kann gar keine Terminierung treiben.

>6. Muss man ein 0.10μF zwischen Vcc und Masse der I2C Chips
>anschliessen???

IMMER!

http://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

von Stefan S. (dipsy)


Lesenswert?

@ Stefan
@ Falk Brunner

Vielen Dank für Ihre Antworten. Ist sehr Lehrreich.


"Naja, ein Angstwiderstand. Ist nicht wirklich wichtig."/
Diser Vorfall (überspannung an dem I2C-Bus), kann nur vorkommen wenn man 
den I2C bus über Kontaktstifte bei laufendem Betrieb anschliesst (funken 
am Kontakt....)?

Richtig?



"1pF/cm"

Das ist recht wenig, bin erleichtert. Ich werde maximal 50cm 
Leiterbahnlänge haben.


@ 6A66
Naja das Problem ist dass auf dem I2C Bus folgendes angeschlossen sein 
wird:
1x I2C Switch
12x Led Driver
4x Temperatursensoren
1x ADC
1x I/O
1X eeprom

Müsste ich es vorerst auf einer Lochraster/SMD-Raster ausprobieren würde 
es sehr kompliziert sein.


(Ist nicht für eine Serienproduktion)

von Falk B. (falk)


Lesenswert?

@  Stephan S. (dipsy)

>Diser Vorfall (überspannung an dem I2C-Bus), kann nur vorkommen wenn man
>den I2C bus über Kontaktstifte bei laufendem Betrieb anschliesst (funken
>am Kontakt....)?

>Richtig?

Ja. Aber dann macht man nur EINMAL diese Längswiderstände rein, nämlich 
direkt am Steckverbindern. Dazu noch Klemmdioden an SDA und SCL und gut.

>"1pF/cm"

>Das ist recht wenig, bin erleichtert. Ich werde maximal 50cm
>Leiterbahnlänge haben.

Das ist stark abhängig, wie nah andere Signale, vor allem Masse(flächen) 
sind. Aber bei 50cm passt das schon, du bist nicht der Erste, der sowas 
baut.

von Eckhard (Gast)


Lesenswert?

Hallo,

ich finde es lustig, dass Du Dir so viele Gedanken um die 
Spezifikationen machst, das ganze aber dann mit einem Takt betreiben 
willst der weit außerhalb der Spezifikation liegt. 1 MHz ist deutlich 
höher als die max 400 kHz. Sollte aber trotzdem funktionieren.

Eckhard

von Stefan S. (dipsy)


Lesenswert?

@ Eckhard

I2C gibts in 4 Varianten (Alle abwertskompatibel):

Standard-mode 100kHz
Fast-mode 400kHz
Fast-mode+ 1MHz
High-speed mode 3,4MHz

Alle Chips die ich verwenden werde unterstützen mindestens den 
Fast-mode+.

(Ausser den I2C Switch, habe noch keinen gefunden der mehr als 400kHz 
unterstützt, muss noch weiter suchen.)


EDIT:
Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz).

von Falk B. (falk)


Lesenswert?

@  Stephan S. (dipsy)

>Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz).

Man kann alles übertreiben. I2C ist mit 400kHz schon OK, mehr ist IMO 
ein Krampf, den nachträglich drangefrickelt wurde. Wenn es schnell sein 
soll, nimmt man SPI.

von Malte S. (maltest)


Lesenswert?

Stephan S. schrieb:
> Standard-mode 100kHz
> Fast-mode 400kHz
> Fast-mode+ 1MHz
> High-speed mode 3,4MHz

> Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz).

OMG können die das nicht einfach xxx-k/MHz-mode nennen? Ist ja schlimmer 
als USB... Aber danke fürs Zusammentragen, dachte bis eben auch bei 
400kHz ist Schicht.

von Stefan S. (dipsy)


Lesenswert?

Falk Brunner schrieb:
> @  Stephan S. (dipsy)
>
>>Und seit kurzem gibt es auch den Ultra Fast-mode (5MHz).
>
> Man kann alles übertreiben. I2C ist mit 400kHz schon OK, mehr ist IMO
> ein Krampf, den nachträglich drangefrickelt wurde. Wenn es schnell sein
> soll, nimmt man SPI.

Ja also ich kann mir schon gut vorstellen dass so viele IC (20) am I2C 
Bus es schwerig machen werden den Bus mit 1MHz zu betreiben.

An SPI hatte ich auch schon gedacht, aber der braucht zu viele I/O.

von Falk B. (falk)


Lesenswert?

@  Stephan S. (dipsy)

>An SPI hatte ich auch schon gedacht, aber der braucht zu viele I/O.

Für dein paar ICs reicht I2C mit 400kHz locker aus.
Was soll das Ding denn machen? Themometer mti Anzeige?

von Stefan S. (dipsy)


Lesenswert?

Pro I2C Bus ~50 RGB MulitLED Led antreiben.

Die Thermometer dienen nur als Schutz, sie schalten den Spannungsregler 
der LEDs aus wenn der PCB zu warm werden sollte.

von Falk B. (falk)


Lesenswert?

@Stephan S. (dipsy)

>Pro I2C Bus ~50 RGB MulitLED Led antreiben.

Naja, wenn man damit schnelle Bildwechsel/Animationen machen will, würde 
ich das mit TLC5922 & Co und SPI machen. Den lahmarschigen Kram dann per 
I2C.

von Stefan S. (dipsy)


Lesenswert?

Es sind 3 PCB, mit je:
- 50 RGB MultiLeds (150 Leds) (11 Driver)
- 30 RGB MultiLeds (90 Leds) (7 Driver)
- 50 RGB MultiLeds (150 Leds) (11 Driver)

Die 3 PCBs sind an einem I2C Switch angeschlossen, das heisst sie teilen 
sich die Bandbreite eines einziges I2C Master (USB Adapter, 400kHz 
limitiert, momentant)


Der refresh-rate würde ich gerne bei 4Hz-5Hz halten.
Ich würde sagen 50% der MultiLeds werden meistens statisch sein und nur 
selten ihr Status ändern. Zusätzlich werde ich meistens die Primärfarben 
benutzen, d.h ich werde selten die 3 LEDS der RGB MultiLeds gleichzeiten 
ansteuern.

Glauben Sie dass der I2C Bus damit überlastet wird (nehmen wir an er 
würde mit 400kHz funktionieren)?


Ich glaube ich werde mal mit der PC Steuerung Software anfanken, und mal 
schauen wieviel Bandbreite ich tatsächlich brauchen werde.

von Falk B. (falk)


Lesenswert?

@  Stephan S. (dipsy)

>- 50 RGB MultiLeds (150 Leds) (11 Driver)
>- 30 RGB MultiLeds (90 Leds) (7 Driver)
>- 50 RGB MultiLeds (150 Leds) (11 Driver)

>Die 3 PCBs sind an einem I2C Switch angeschlossen, das heisst sie teilen
>sich die Bandbreite eines einziges I2C Master (USB Adapter, 400kHz
>limitiert, momentant)

Aua.

>Der refresh-rate würde ich gerne bei 4Hz-5Hz halten.

Naja.

>Glauben Sie dass der I2C Bus damit überlastet wird (nehmen wir an er
>würde mit 400kHz funktionieren)?

Mal gerechnet? Wieviel Bytes müssen für einen Update übertragen weren, 
incl. I2C Adresse ?

>Ich glaube ich werde mal mit der PC Steuerung Software anfanken, und mal
>schauen wieviel Bandbreite ich tatsächlich brauchen werde.

Nö, man macht erstmal eine Überschlagsrechnung, alles andere ist 
Bastelmurks.

von Stefan S. (dipsy)


Lesenswert?

Autsch, im schlimmsten Fall brächte ich 2000kbit/s, wenn ich mit dem 
PWM/Lichtstärke rumspielen :-S.
Wenn ich aber nur die LEDs an/aus mache bin ich um die 800kbit/s.


Ok, sowieso war die zweite Phase vom Project, PIC Controller zu 
benutzten um du PC-Software zu entlasten.
Es scheint als hätte ich keine andere Wahl als diese von vornherein zu 
integrieren (um mehrere I2C Master zu haben).

SPI, gefällt mir nicht so sehr.

von Falk B. (falk)


Lesenswert?

@Stephan S. (dipsy)

>SPI, gefällt mir nicht so sehr.

Warum? Zu einfach und zu schnell?

von Stefan S. (dipsy)


Lesenswert?

Oups, habe bit/s und kBit/s verwechselt :D
Wird schon gehen dann.

Zum SPI, es gefällt mir nicht so sehr wegen die zusälichen Leitungen die 
es benötigt (mein PCB ist schon überfüllt). Zusätzlich habe ich gelesen 
dass mehr als 1.5Mhz wäre nicht drin ab einer bestimmte länge (relativ 
kurz).

Der SPI daisy-chaining scheint interessant zu sein, habe aber nicht 
heraus finden können ob der AS1112 LED Driver kompatibel wäre (In der 
Datenblatt steht nichts davon)

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Stephan S. schrieb:
> Zusätzlich habe ich gelesen
> dass mehr als 1.5Mhz wäre nicht drin ab einer bestimmte länge (relativ
> kurz).

Quelle?

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.