Probleme mit seriellen Port und I2C

Für ein Projekt habe ich folgende Bauteile zu verbinden:

  • 1x Uno oder Nano als Master
    -Mehrere Nano/Attiny am Master über I2C als Slave
  • 1 Nextion Display zur Anzeige und visuelle Steuerung der einzelnen Slave über den Master. Anschluß über RX/TX am Master (Alternativ D2/D3 über SoftwareSerial)

Er funktioniert soweit die Kommunikation Master zu Nextion. Jedoch sobald ich die Widerstände (1MOhm) der SDA und SDL am Master auf Masse gezogen habe. Hängt sich der Master auf. Ohne Widerstände geht alles.

Wie kann ich das Problem umgehen?

Warum tust du das auch?
Natürlich bleibt der Master stehen, wenn du den Bus blockierst

Weil Widerstände für eine stabile I2C Verbindung empfohlen wird. Gerade, wenn ich viele Slaves an den Master hänge. Zumindest habe ich das in vielen Beispielen gesehen....

Aber doch keine Pulldown
Und keine 1M

1 Like

Dann aber auf Versorgungsspannung schalten und die Widerstände sollten schon geeignete Werte haben. 1MOhm hilft nichts.

Grüße Uwe

Die Widerstände sind direkt an der Versorgungsspannung (-) an den SCL und SDA. Bisher kam ich mit dem 1M gut zu Recht. (1 Master+1 Slave zum Testen) Aktuell hängt kein Slave dran, weil ich erstmal Stabil die Kommunikation Master/Nextion sicherstellen wollte.

Allerdings gebe ich dir Recht. Ich habe auch 4M und 10M bereit liegen falls das bei der Summe an Slave nicht reicht.

Ok. Guter Hinweis. Mein Denkfehler Pullup und nicht pulldown... Irgendwann wird man betriebsblind.
Danke.

Ein schönes Bild wie die Pullups an die I2C-Leitungen angeschlossen werden, habe ich hier gefunden.
Auch bei Adafruit findet sich ein Bild und die Erklärung dazu.

Wenn schon dann auf + (VCC, 5V)und nicht auf GND, Und als Pull UP sind 4M auch zu viell 4K sollen reichen wen die Dinger nicht weiter als 20cm Ligen, I²C ist ein "Kurzstrecken " Bus, nur als Info damit du nicht versuchst lange Strecken bauen.

Wie hoch sollte ich die Widerstände dimensionieren?

Voll die falsche Richtung.

4K Ohm

Such nach "2c bus funktionsweise":wink:

Bei 1M als Pull-Up würde ich mal behaupten, dass man die auch genau so gut weglassen kann.

1 Like

Da hast Du vollkommen Recht.

Gruß Tommy

Hier ein kleines Rechenbeispiel:

Hier ist das Ganze noch etwas ausführlicher beschrieben:

Auf jeden Fall wenn noch ein anderer Pullup parallel dran hängt.

Falls nicht, wird der Pegel immerhin nach HIGH gezogen, wenn auch wohl viel zu langsam. Und anfällig für Störungen. Aber 1M ist weniger als unendlich. :wink:

Aber immer noch Unsinn, wenn man brauchbare Signale will.

Gruß Tommy

1 Like

Die MCU intern hat auch keinen unendlichen Widerstand :wink:

Stimmt.

Ich habe dir (bzw. @Kai-R) nicht widersprochen, dass 1M zu viel ist.

Ich möchte jetzt und hier auch weder ausprobieren noch wetten, ob man in einem praktischen Test tatsächlich überhaupt keinen Unterschied zwischen 1M und gar kein Pullup merkt.

Erstmal ist es "hier" ein Pulldown und kein Pullup.

Aber davon mal abgesehen....
Bei einem Mega wird/kann ein I2C Bus mit 1M externem Pullup sogar funktionieren, bzw. wird der R weder stören, noch groß helfen.

Aber bei einem Nano und vielen weiteren, ist er nicht ausreichend klein genug.