Gelöst: I2C-Problem - Umstieg von Mega auf Due

Hallo zusammen,

nachdem ich nun lang das Forum durchsucht habe, diverse Beiträge und weiterführende Links gelesen habe, kann ich immer noch nicht mein Problem lösen.

Folgende Ausgangssituation:
Aktuell bastel ich an einen Roboter an welchem ich verschiedene Konzepte teste (z.B: Ordometrie, PID-Regler, Wegfindung etc). Nun will ich mich an "Spielereien" wagen, welche etwas mehr Leistung benötigen als der vorher installierte Arduino Mega liefern kann. Aufgrund dessen habe ich mich entschieden den Mega durch einen Due zu tauschen. Da alle installierten Sensoren sowohl mit 3V wie auch mit 5V laufen, habe ich dort kein Problem gesehen und lasse nun alles auf 3V laufen.

Nun zum Problem:
An der Front befinden sich vier Time-of-Flight-Sensoren (VL53L0X), welche über i2c (Port 20 und 21) ausgelesen werden. Dies war mit dem Arduino Mega auch überhaupt kein Problem und lief tadellos. Beim Umstieg auf den Due habe ich nun aber das Problem, dass sobald ich mehr als zwei dieser Sensoren am I2C Bus habe, mir der ganze I2C-Bus "abschmiert" und mit dem einstecken des dritten Sensors kein Gerät auf dem Bus mehr erkannt wird. Nach weiterer Prüfung habe ich festgestellt, wenn 2 Sensoren angesteckt sind und ich einen i2c-scanner laufen lasse, werden die beiden erkannt, bis ich irgendetwas zusätzlich an die SCL-Leitung hänge. Dies kann auch ein anderer Sensor (kein TOF) oder sogar mein Multimeter (wobei ein Ende offen ist) sein. Das Ganze bringt mich aktuell zur Verzweiflung, weswegen ich hoffe hier jemanden zu finden der den passenden Hinweis für mich hat.

Vielen Dank im voraus und auch generell mal vielen Dank an die Community hier, ihr habt mir in der Vergangenheit schon sehr durch eure Beiträge geholfen!

Hier noch der Link zu meinen TOF-Sensoren: Pololu - VL53L0X Time-of-Flight Distance Sensor Carrier with Voltage Regulator, 200cm Max

Dann solltest du mal prüfen, ob da evtl. zuviele Pullup-Widerstände das Problem sind.

Meist sind auf jedem Sensor bzw. Modul welche vorhanden. Das kann schon zuviel sein.
So wie ich informiert bin, sind auch auf dem DUE welche vorhanden. Das sollte reichen.

Ja in der Tat sind auf den Sensorboards 10k Pullup-Widerstände verbaut und im Due ist auch nochmal ein 4,7k verbaut. Nun ist mein Problem, dass ich die Pullups der Sensoren wohl nicht einfach auslöten kann, aber vielleicht sollte ich das einfach mal wagen...

Vielen Dank erst einmal für die Antwort, wenn es weitere Lösungsvorschläge gibt, immer her damit :slight_smile:

Der DUE hat Wire und Wire1, somit sitzen schon mal 4 Sensoren drin.

Per I2C Multiplexer (TCA9548A ) kannst du noch mehr Geräte anschließen.

Ja die Idee mit Wire und Wire1 wollte ich heute auch noch verfolgen, allerdings hätte ich zukünftig noch mindestens 2 Sensoren mehr auf dem I2C-Bus und dann stoße ich da wieder auf die Grenze.

Ist es bei den I2C Multiplexern egal wenn die einzelnen Sensoren zusätzliche Pullupwiderstände besitzen? Wenn ja, wäre das wohl meine bevorzugte Lösung.

Ist es bei den I2C Multiplexern egal wenn die einzelnen Sensoren zusätzliche Pullupwiderstände besitzen?

Es ist sogar erforderlich, dass jeder Zweig eigene Pullup besitzt.

Das klingt hervorragend und wie eine vernünftige Lösung, dann will ich mal bestellen. Vielen Dank für die Hilfe! :slight_smile:

Nach viel hin und her bin ich nun zu folgendem Ergebnis gekommen:

Da Wire1 im Gegensatz zum Wire auf dem Due kein Pullup besitzt, lassen sich dort bis zu drei VL53L0X (jeweils 10k Pullup) anschließen, den Vierten konnte ich dann auf Wire anschließen (wo theoretisch jetzt auch noch ein Fünfter möglich wäre).
Da die Standard-Libary aber immer nur ein Wire untersützt (vorausgesetzt man schreibt die Libary dahingehend um, wenn man Wire1 benutzen will), habe ich dank Google eine Libary gefunden die gleichzeitig Wire und Wire1 unterstützt: GitHub - wood-walker/wwVL53L0X: using the VL53L0X distance sensor with the SPI "Wire" or "Wire1" line - derived from the pololu library

An dieser Stelle nochmals vielen Dank, ihr wart mir eine riesen Hilfe!

Hi

Die PullUPs sind PRO BUS nötig - nicht pro Slave! (dort aber an beiden Drähten)

MfG

Die PullUPs sind PRO BUS nötig - nicht pro Slave!

Das stimmt.
Aber sowohl die Sensormodule, als auch der DUE haben welche drauf.
Zu viele Pullup machen den Braten nicht fett, sondern den Stock in die Speichen.

Hi

Mir ging's um

lassen sich dort bis zu drei VL53L0X (jeweils 10k Pullup) anschließen,

  • Das klang in meinen Ohren nach 'pro Slave'.
    Wo schon ein PullUp ist, braucht's wohl Keinen mehr.

MfG

VL53L0X (jeweils 10k Pullup)

Ich habe daraus gelesen, dass jedes VL53L0X Modul 2*10k Pullup, also ‘pro Slave’, on Board hat.

Die Sensoren haben jeweils 2*10k Pullups.

Am Due hat der Wire (SDA/SCL) bereits 4,7k Pullups verbaut, der Wire1 (SDA1/SCL1) ist auf dem Due ohne Pullup.

Mir ist inzwischen klar, dass ich eigentlich pro Bus nur einen Pullup pro Leitung brauche, allerdings wollte ich das Problem umschiffen die SMD Widerstände der Sensoren auslöten zu müssen. Deshalb habe ich nun die Sensoren auf beide Busse aufgeteilt.

Ich hoffe ich konnte etwas Klarheit schaffen, für weitere Fragen gerne per PN.