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!
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
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.
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!
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.
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.