I2C: Berechnung Pull Up Widerstand sowie Kabelquerschnitt

Guten Morgen,

leider werde ich über die Suche nicht ganz fündig:
Ich möchte an einem ATMEGA328 mehrere ICs über I2C anschließen.
EInmal eine RTC DS und zusätzlich mehrere PCA9685.
Das ganze sieht folgendermaßen aus:
Ich habe eine Platine, auf der der Atmega sowie die RTC und ein PCA9685 aufgelötet sind.
Dann möchte ich weitere Platinen per (Flachband)Kabel verbinden, auf denen jeweils ein PCA9685 aufgelötet ist.
Meine Fragen:

  1. reicht es, wenn ich jeweils (SDA/SCL) einen Widerstand nah am Atmega auflöte?
  2. Wenn ja, wie berechne ich den oder kann ich pauschal 4.7k oder 10k nehmen?
  3. Da das ganze modular sein soll (d.h. ich weiß noch nicht, ob ich 2 oder 20 PCAs dahinterschalte), wäre es sinnvoll, auf jede Einzelplatine einen PullUp Widerstand zu löten?
  4. Kabelquerschnitt: Ich steuer mit dem PCA LEDs oder KSQs per PWM an. Geh ich mal von einem rein theoretischen Strom von 20mA pro Kanal aus, liege ich pro Platine mit PCA bei 1620mA=320mA. Mit welchem Kabelquerschnitt sollte ich hier rechnen, wenn ich max 10 PCAs in Reihe schalten möchte? Spannung liegt bei Arduino typischen 5v. Theoretisch würden doch dann über die erste Verbindung (Hauptplatine=PCA1 zur ersten PCA Platine=PCA2) 9320mA=2.9 A fließen, von PCA2 zu PCA3 nur noch 8*320mA=2.5A und so weiter. Ist mein Verständnis vom Stromfluss korrekt? Sollte ich daher mit Kabelquerschnitten arbeiten, die für 3A ausgelegt sind? Oder kann ich trotzdem mit Flachbandkabel arbeiten?
  5. Länge: Zwischen jeder PCA Platine liegen ca 25-50 cm. Das sollte für einen I2C Bus ausreichen oder?

Jetzt bin ich gespannt!

Beste Grüße
Thorsten

Schau mal hier sehr Infomativ bei einem alten "Bekannten"
Zu 1.) und 2.)

Wenn du dein Flachbandkabel nutzten willst kannst du ja mehrere Adern parallel Schalten um auf den Querschitt zu kommen den du brauchst.

Gruß
Der Dani

Hallo,

SDA/SCL sind Steuersignale, da fließt kein Strom im Amperebereich drüber. Die Pullup Widerstände für SDA/SCL werden nur einmal benötigt. Nicht auf jeder Einzelplatine. Bau die I2C Pullups an den Atmega ran und dann alle Einzelplatinen an den Bus hängen.

der Thread ist auch sehr informativ: I²C-Bus Allgemeine Fragen - Deutsch - Arduino Forum

Mit 20 PCA mit ca 25-50 cm Abstand dazwischen am I2C Bus wird es sicher nicht funktionieren. Da wird die Kabellänge sprich Kapazität und die notwendige Ansteuerleistung zu groß.
Ich weiß nicht ob es mit I2C Bus Extendern funktionieren könnte befürchte aber auch mit denen nicht.
Grüße Uwe

Hallo,
der I2C (3,3v) beim Arduino (Mega) scheint ziemlich Wiederstandsfähig zu sein.
Ich habe vom Mega zu den Widerständen (SDA/SDL 4,7k) 2cm Strecke bis zu den Widerständen.
Dann kommen 20cm bis zu den 3 Sensoren mit Entkoppel-Kondensator, dann ein Entkoppel-Kondensator
mit 7-8m Kabel- an dem hängt auch ein Sensor. Das funktioniert ohne Probleme.
Gruß und Spaß
Andreas

Hi,
vielen Dank für das Feedback.
Ich nehme folgendes mit:

  1. für den kompletten Signalweg benötige ich nur je einen Pullup-Widerstand an SDA und SCL, die ich direkt an den SDA/SCL Ausgang des Atmegas setze. Mit 4.7k fahr ich vermutlich gut.

  2. SIgnalweg: hier list man, dass 2 Meter gut machbar sein sollen. Ich bleib jetzt mal bei 12 Signalwegen mit jeweil 25cm Abstand - dann komm ich auf ca 3 Meter. Könnte das klappen? Mal eben testen kann ich das jetzt leider auch nicht. Spielt die Qualität der verwendeten Kabel hier eine Rolle? Ansonsten könnte ich ja sicherheitsbalber auf halbem Weg einen Extender P82B715 einplanen?

  3. Kabelquerschnitt: Also über SDA, SCL und GND läuft kein größerer Strom. Der Strom läuft aber über die 5V Leitung. Wäre es ggfs. sinnvoll, an jede Platine eine eigene 5V Stromversorgung anzuschließen? Dann würde ich einfach nur drei Adern (SDA SCL GND) über das Flachbandkabel verbinden. Laut diverser Tabellen müsste ich mit 0,5mm² bis 6A klarkommen. ALlerdings sind Flachbandkabel deutlich dünner.

zu 1) Ich würde kleinere Widerstände nehmen 1,5kOhm oder ein IC das die Pullupwiderstände ersetzen kann und ich mich nicht mer Modell oder Namen erinnere. einen I2C Accelerator der den High-Pegel aktiv wieder auf High bringt zB LTC4311.
zu 2) Das Problem ist nicht die Länge der Kabel sondern die Kapaztät von SCL und SDA gegen Masse und die Anzahl der Eingänge die angesteuert werden müssen. Ohne den Kabel zu kennen und zu wissen wie Du ihn belegst bzw wie er verlegt ist bzw zu liegen kommt kann man keine aussagekräftige Antwort geben.
Der P82B715 wirkt nicht als Verstärker sondern der Bus wird zwischen 2 oder mehreren von ihnen verlängert. siehe seite 5 ,7 und 10 von http://www.nxp.com/documents/data_sheet/P82B715.pdf die I2C ICs können nicht zwischen ihnen geschalten werden
3) ja separate Spannungsversorgung ist sinnvoll.
Grüeß Uwe