Ich versuche, die Kabel in meinem System von 6 IMU Sensoreinheiten(BNO055, Datenblatt: https://cdn-shop.adafruit.com/datasheets/BST_BNO055_DS000_12.pdf) über 2 Meter auf ein Minimum zu reduzieren (idealerweise 4 Kabel: VCC, GND + 2 Kommunikationskabel) und würde daher gerne die 6 Adafruit BNO055 per daisy chain verbinden.
Mein Problem ist, dass die Sensoren normalerweise über I2C kommunizieren, aber leider haben sie nur 2 verschiedene Adressen, so dass ein direktes Daisy Chaining mit nur 4 Kabeln (Vcc, GND, SDA, SCL) nicht möglich ist und ich möchte wirklich vermeiden, dass ich zusätzliche Kabel für die Auswahl der Sensoren benötige.
Eine interessante Option, die ich im Internet gefunden habe, ist die Verwendung einer zusätzlichen MCU (siehe Bild), die das I2C-Signal in SPI umwandelt.
Sieht das für euch nach einer praktischen Lösung aus? Falls ja Habt ihr eine Empfehlung für einen geeigneten Chip, der billig, klein und gut für diesen Zweck geeignet ist?
Danke Combie! Der sieht top aus um das Schema aus dem Bild nachzubauen.
Über andere kreative Lösungsansätze, die mir vielleicht doch den Einsatz eines extra Mikrocontrollers ersparen, freue ich mich trotzdem weiterhin
ich kann mir nicht helfen. "Kabel" auf einem I2C Bus das kann doch nicht ein Argument sein. Für mich ist I2C ohnehin nur ein Bus innerhalb einer PCB bzw. wirklich nur kürzeste Kabel um vieleicht ein Display an die Frontplatte zu bringen. Du hast da doch hoffentlich nicht mehrere Meter I2C Leitungen.
Warum setzt du nicht auf ein Bus-System das für lange Kabel ausgelegt ist? RS485, CAN?
Noch besser, zeig mal eine schematische Zeichnung von deinem Aufbau aus dem man grobe Entfernungen ableiten kann.
Verstehe nicht wieso Du 6 Positionssensoren in Deinem System brauchst.
Erklähr das mal. Vieleicht kannst Du einige durch andere Sensoren ersetzen.
Grüße Uwe
Mit den IMUs wird die Bewegung des Arms, der Hand und eines Daumengelenks getrackt, folglich ergeben sich dafür menschenübliche Abmessungen der Leitungen von bis zu maximal 1m.
Ein anderes Bus-System ist natürlich eine Option, allerdings sind die Sensoren die ich verwenden muss nur mit i2c ausgestattet (und nur zwei Adressen) weshalb ich das ganze natrülich am liebsten irgendwie per i2c lösen würde. bzw. wie oben geschrieben mit möglichst wenig Aufwand auf ein anderes Bussystem umsteigen wollen würde.
Der Controller muß nicht auf der Schulter oder am Gürtel plaziert sein sondern kann am Unterarm nahe dem Ellebogen plaziert werden und somit verkürzen sich die Kabel auf ca 50cm.
Leider muss der Controller noch mehrere andere Sensoren und Aktoren am Rücken and der Schulter und am Arm ansteuern, deswegen ist die ungünstige Position da oben, eigentlich recht fix aber villeicht sollte ich das doch nochmal überdenken...
Danke, dass du gleich ein Beispielprojekt verlinkt hast. Aus der Notwendigkeit des Multiplexers schließe ich aber, dass mir das wohl wirklich nicht viel übrig bleibt als 4 Leitungen (GND,Vcc, SCL, SDA) pro Sensor (bzw. pro zwei Sensoren wenn ich wenigstens die zwei existierenden Adressen verwende) zu akzeptieren.
.. oder eben einen ATTiny an jede Sensoreinheit dranbaue der I2C in ein anderes Bussystem wandelt.
Danke euch beiden auf jeden Fall für die Hilfe.
Beste Grüße,
Paul
Bist Du Dir da ganz sicher?
Die Sensoren können auch UART 115200 8N1. Steht in dem von Dir verlinkten Datenblatt.
Damit umgehst Du mögliche Probleme des I2C bei gleicher Leitungslänge. Wenn der Controller eh auf'm Rücken ist, dann kann der auch mehrere UART bedienen....
Das mit dem UART habe ich verschwiegen weil ich dachte, dass man UART nicht als BUS verwenden kann, somit würde das die Anzahl meiner Kabel (mein Grundproblem) also auch nicht veringern, oder liege ich da falsch?
Du kannst das schon als Bus benutzen...
Die Verwendung eines kleinen µC bleibt Dir da aber auch nicht erspart.
Mir ging es nur darum das diese Verbindung längere Leitungen besser wegsteckt, als ein I2C, der evtl. gänzlich blockiert.
Wenn Du jeden Sensor separat verkabelst ist das eine Option.
Wenn Du das als Bus machen willst mit 4 Leitungen, kannst Du Dir ein eigenes Protokoll schreiben. Jeder Sensor bekäme dann einen Attiny der lauscht und antwortet.
Auch wäre RS485 oder CAN eine Variante. Dann bekäme jeder Sensor einen µC mit entsprechender Schnittstelle. Aber vielleicht fällt ja jemandem noch was anderes ein....
wenn das Ding UART TTL hat fein. Weis nur noch nicht wie man 5 Sensoren gut auslesen könnte.
Auch am Mega müsste man da vermutlich Leitungen umschalten.
Aber meine bevorzugte Variante wäre vermutlich ein RS485 Bus
je dezentrale Auswertung:
ein ATTiny (?) / ProMini/was auch immer klein und billig zu bekommen ist
ein MAX485
jeweils für maximal zwei Sensoren (zwei I2C Adressen).
Also z.B. die Hand ein Controller für zwei Sensoren.
Dort wo man nur einen Sensor braucht (im Ellbogen) halt nur mit einem Sensor.
Der Pro Mini ist ein kleiner UNO ohne USB. Da laufen alle Bibliotheken wie beim UNO, also eine Alternative zum ATtiny. Zusätzlich benötigt man einen USB TTL Adapter.
Die Bibliothek SoftwareWire bietet mehrere I²C-Schnittstellen an beliebigen Pins. Mit zwei I²C-Schnittstellen und zwei Adressen kannst Du vier Sensoren ansprechen.
Den µC auf dem Unterarm plazieren und mittels RS485 mit dem Haupt-µC verbinden. Eventuell SoftwareSerial verwenden.