PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie realisiere ich meine I2C-Bus Verbindungen



Hellmut
30.03.2011, 07:06
Hallo Freunde

Ich setze in meinem Modell eine größere Anzahl von Sensoren mit einem I2C-Bus ein. Das Problem, diese Sensoren haben alle die gleiche Adresse! Ich plane also den Einsatz eines mega8L Controllers im SMD-Gehäuse wegen der zusätzlichen I/Os und möchte in BASCOM in Software für diese Kommunikation 16x den I2C-Bus realisieren.

Nun habe ich mir die Beschaltung wie folgt überlegt:

http://farm6.static.flickr.com/5266/5573594382_f6c69b9375_z.jpg

Wie auf der Skizze zu erkennen gehen von jeder sensorplatine 4 Leitungen ab. Gnd und Vcc (3.0V), werden an die entsprechenden Versorgungsleitungen angeklemmt. Nun meine Fragen:

1. Kann man auch die SCL-Leitung des I2C-Busses (eigentlich kein Bus, da nur eine Adresse möglich) ebenfalls an eine "Clock-Bus-Leitung anschliessen?meine Frage begründet sich darin, das ja alle 16 Sensoren dann ihre Clock-Leitungen parallel angeschlossen hätten, außerden könnte ich dann nicht bei jedem Sensor die Pull-Ups an der Clockleitung anbringen!

2. Was ist für die Signalqualität der Verbindung am I2C-Bus besser? Den Pull-Up direkt am Sensor anzubringen oder beim Controller? Die Leitung kann bis zu 1 Meter lang werden und es verlaufen viele Leitungen in einem Kabelbaum parallel! Mein Gedanke den Pull-Up direkt am Sensor anzubringen geht von der Überlegung aus am Ursprung die best mögliche Wirkung des Pull-Ups zu haben.

3. Ich dachte daran die Leitungen im Kabelbaum mit Klingeldraht zu realisieren, oder wäre ein Flachbandkabel geeigneter? Ich möchte bei der Auslegung für möglichst hochwertige Datenverbindungen sorgen, um die durch die Vielzahl der Elektronik und einiger Motoren im Rumpf zu erwartenden Störungen möglichst gering zu halten!

Gruß Hellmut

lokirobotics
30.03.2011, 09:43
Hallo Hellmut,

erstens sollte gehen, da die Slaves nur die Datenleitung manipulieren.
Zu zweitens und drittens will ich nichts sagen, weil ich mir da nicht sicher bin.

Im Hinblick auf mögliche zukünftige Erweiterungen und die angesprochenen elektromagnetischen Bedingungen in deinem Modell, würde ich dir dazu raten, RS485 als Bus einzusetzen. Ich würde dann jeden Sensorknoten mit einer MCU ausrüsten. Dann kann dein Hauptcontroller über ein einheitliches Interface auf alle Sensoren zugreifen und Änderungen im System sind jederzeit möglich.

Richard
30.03.2011, 12:10
Erst einmal, nur EINMAL Pull-UP's in der Schaltung! Setzt Du mehrere ein liegen diese Parallel und der gesamt Widerstand wird zu klein! 2. Denke Daran das I²C ein Bus für Platinen = kurze Wege ist. Die Leitungen sollten verdrillt werden.

Um einzelne Sensoren mit gleicher Adresse anzusprechen würde (ich) versuchen die Takt Leitung jedes einzelnen Sensors über einen Analogmultiplexer mit dem Master zu verbinden. Die Sensoren ohne Takt halten dann (hoffentlich) ihr Maul. Aber man wird wahrscheinlich während des Umschaltens die Versorgungsspannung der Sensoren unterbrechen damit sie nach dem Umschalten einen Reset machen. Ob Softwaremäßig ein I²C stop/start ausreicht?

http://lh3.ggpht.com/_BGvgroHHiOU/Sw8H2FkjxOI/AAAAAAAAD80/IFKP_-2pY64/analog-mux-8-to-1-ic.jpg

Gruß Richard

Hellmut
30.03.2011, 23:38
Hallo Freunde

Erstmal Danke für die Antworten, sie sind über die hier gestellte Frage hinaus für mich wertvoll. ich habe mich entschlossen das problem mit einem PCA9518A zu lösen. Der Hub kann mit weiteren parallel geschaltet werden. Jeder Hub kann 4 I2C-Busse mit jedem anderen über alle ICs verbinden und wirkt nur wie ein Repeater, beim "Master PCA9518A" kann ich dann den Controller an den 5. Port anschliessen. Für meine 16 Sensoren komme ich also mit 4 PCA9518A aus, werde aber zusätzliche vorsehen, da die STS21-Sensoren, nur Temperatur- und keine Feuchtemessung und billig, genauso funktionieren. Das Gehäuse ist sehr klein, wodurch ich viele auf kleinem Raum unterbringen kann und gleichzeitig setze ich die Hardware I2C schnittstelle im mega8L ein.

Der Hinweis auf die Analogmultiplexer war sehr wertvoll. Ich werde in meinem Segler, nicht lachen, es ist eine wahre Technologieplatform, den LT6802-1 als BMS (Battery Monitoring system) und als Balancer einsetzen. Da es bei Akkumatik.de eine Karte mit diesem IC gibt, der interne Balancer für den aktuellen Akkumatik-Lader, werde oich diesen in doppelter Funktion einsetzen. Der Vorteil, neben der Balancer- und BMS-Funktionalität, ist die Möglichkeit vom Ladegerär zum Modell nicht die 13 Leitungen für einen balancer anschluß führen zu müssen und so am Modell einen entsprechenden Anschluss vorzusehen der wasserdicht abgeschlossen werden muss, sondern nur die Leitung für den Controller im Akkumatik an seinen internen Balancer, der ja damit identisch ist. Nun möchte ich, je nachdem ob der Lader angeschlossen und aktiv ist, oder nicht, die Balancer-Leitungen von 12S1P LiFePo4 Selbstbau Akkupack wahlweise an die im Modell eingebaute Balancerkarte führen, oder an den im Akkumatik intern eingebauten. Bei TI nach analogen Multiplexern/Demultiplexern recherchiert sieht man den Wald vor lauter Bäumen nicht. Ich habe also eine Support-Anfrage initiert, welcher der geignetste wäre.

Gruß Hellmut

Klebwax
31.03.2011, 04:22
Hallo

3. Ich dachte daran die Leitungen im Kabelbaum mit Klingeldraht zu realisieren, oder wäre ein Flachbandkabel geeigneter? Ich möchte bei der Auslegung für möglichst hochwertige Datenverbindungen sorgen, um die durch die Vielzahl der Elektronik und einiger Motoren im Rumpf zu erwartenden Störungen möglichst gering zu halten!

Geeignet sind beide Kabel. Bei Klingeldraht sollte man jeweils ein Signal (SDA, SCL) mit einer Versorgung (Vcc, GND) verdrillen, bei Flachkabel die Signale nicht nebeneinander legen. Wenn du gerne mit Flachkabel und gequetschten Steckern arbeitest, kannst du auch Flachkabel bekommen, bei dem immer zwei verdrillt sind. Das Kabel hat dann so alle 20 cm eine flache Stelle, wo man die Stecker quetschen kann.

Ich hab mal gelesen, daß jemand Probleme mit der Übertragung hatte, weil er SCL und SDA als Paar verwendet hat. Die verschwanden, nachdem er jeweils Daten und Versorgung als Paar geführt hat.

Ich denke, einen I2C-Hub einzusetzen, ist die richtige Lösung.

MfG Klebwax

Richard
31.03.2011, 06:30
wann kommen neue Bilder?

Gruß Richard

Hellmut
31.03.2011, 23:57
Hallo Richard

Ich berichte über den Bau meines Seglers wo das alles rein kommt z. B. hier (http://www.schiffsmodell.net/showthread.php?t=33996) oder hier (http://igminisail.de/them-07cs.htm). Da werden dann auch die Bilder zu den realisierten Dingen stehen. Da an diesem Modell, ich habe in in diesem Forum mal als "schwimmenden Roboter" bezeichnet, ich viele Fronten habe wo ich arbeite, so kann ich je nach Laune aktiv sein. Gerade baue ich meine erste Schrittmotorschaltung mit dem mega8, dem L297 und L298 auf, da ich im Segler 2 Spindeln mit 2 aus Druckern gewonnenen Schrittmotoren betreiben möchte. In diesem Forum werde ich bei Fragen zum Thema Elektronik und Robotik-verwandeten Themen aktiv, darf und sollte ja nicht zu sehr Off-Topic sein!

Gruß Hellmut

Richard
01.04.2011, 07:50
Hallo Richard

Ich berichte über den Bau meines Seglers wo das alles rein kommt z. B. hier (http://www.schiffsmodell.net/showthread.php?t=33996) oder hier (http://igminisail.de/them-07cs.htm). Da werden dann auch die Bilder zu den realisierten Dingen stehen.


Den Bericht kenne ich natürlich. :-) Respekt! Aber solltest Du einmal etwas zeit übrig haben, "darfst" Du den ruhig ergänzen/weiterführen. Z.B. wie ist es mit dem Gießharz weiter gegangen, hat es mit den Blei Accuhaltern geklappt?

Gruß Richard

Hellmut
01.04.2011, 08:14
Der Bericht beim 1. "hier" enthält die Daten. Allerdings bin ich noch nicht beim Bleigiessen, aber bald!

Richard
01.04.2011, 08:40
Es gibt I²C Slaves bei denen die Adresse per Software ( Bestimmte Befehls Sequenz ) geändert werden kann. Ob das auch bei Deinen Sensoren der Fall ist, sollte im Datenblatt zu finden sein. Wenn nicht hat der Hersteller sich eigentlich selber ein Bein gestellt.....

Gruß Richard

Hellmut
01.04.2011, 10:40
Hier hat sich der Hersteller selber ein Bein gestellt.