PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C - Wie mehrere Geräte an einen Anschluss?



Shadow²
03.09.2006, 03:02
Hallo!

Kann sein, dass ich mich gerade total blöd anstelle und den Wald vor lauter Bäumen nicht sehe, aber wie kann ich an einem I2C Anschluss mehrere Geräte anschließen?

Ich habe nun schon mehrere Male gehört, dass dies möglich sei, und auch die I2C Geräte-Adressen lassen einen darauf schließen, aber ich habe keine Ahnung, wie man sowas machen kann.

Kann man die Geräte einfach in Reihe schalten oder wie sieht das ganze aus?

Mit freundlichen Grüßen,
Shadow²

scales
03.09.2006, 04:01
wie genau adressiert wird kann ich dir nicht sagen, aber im grunde funktioniert das so:

es gibt einen Master z.B. ein PC und mehrere Slaves die einfach Module darstellen,
von denen Daten abgefragt werden können

beispielweise gibt es eine RD und eine TD leitung zum senden und empfangen, wie bei RS232
(weis nicht wie das bei I2C ist)

wenn nun der Master von einem bestimmten Modul Daten will, bzw. ihm etwas sagen will,
sendet er erst die Geräte Adresse und dann die Daten,
dadurch wissen die anderen Geräte dass das nichts mit ihnen zu tun hat
und nur das durch die Adresse ausgewählte Modul darf antworten

dann wartet der PC wieder bis das Modul fertig mit senden ist,
bzw. wartet den Timeout ab und kann dann wieder mit einem anderen Modul reden


das ganze hat den Vorteil das nur wenige Leitungen benötigt werden
(in meinem Beispiel ja nur 2)

hat aber auch den Nachteil dass eben nur ein Gerät gleichzeitig angesprochen werden kann


hiersteht das Ganze nochmal genauer erklärt:
http://de.wikipedia.org/wiki/I2C
(nicht böse gemeint, aber mit ein paar Sekunden suchen hättest du das selber rausfinden können ;-) )

shaun
03.09.2006, 10:19
Bis auf den Link leider ziemlich falsch ;)
I2C hat keine getrennten Sende- und Empfangsleitungen, sondern eine Takt- und eine Datenleitung. Über zwei definierte Reihenfolgen der Flankenwechsel an den beiden Leitungen, die während der Datenübertragung nicht auftreten dürfen, wird Start- bzw Stoppbedingung realisiert, dazwischen werden die Informationen mit steigender Flanke der Clock-Leitung (SCL) von der Datenleitung (SDA) gelesen. Jede Übertragung beginnt mit der Adresse und einem Bit, das anzeigt, ob gelesen oder geschrieben werden soll. Danach kommen dann Daten - Steuerbefehle, Nutzdaten, wobei die Richtung der Daten durch das zuvor gesendete Schreib-/Lesebit festgelegt wird. In der Regel wird jedes Byte vom jeweiligen Empfänger mit einem Bestätigungsbit (Acknowledge) quittiert, Ausnahmen bestätigen diese Regel, aber das darfst Du selbst nachlesen. Sämtliche Bausteine hängen parallel am Bus und hören mit, aber nur der, dessen Adresse gesendet wurde, "wacht" auf und hört weiter zu bzw antwortet auch mal.

darwin.nuernberg
03.09.2006, 11:12
I2C Bausteine werden entweder hardwaremässig mit z.B. Jumpern
oder DIP-Switches (Mäuseklavier) adressiert
ein Baustein wäre z.B. der PCF8574 (einfachstes Beispiel),
oder
können auch softwareseitig adressiert werden,
hierzu muss zunächst der Baustein alleine
oder mittels eines spez. Jumpers für die Konfiguration
(Adressierung) vorbereitet werden,
als Beispiel hierfür kann ich den TMC222 nennen.


Die einzelnen Baugruppen können dann entweder auf einer Platine
parallel auf den I2C-Bus geschschaltet werden
oder es kann der I2C Anschluss einfach weiteregführt werden
(wie eine Perlenkette), wie in meinem Foto der
Schrittmotorsteuerung mit TMC222: (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=21730)

Im Bild die bunte Flachbandleitung: (https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=1049)

Welche Adressen möglich sind,
ist immer aus den Datenblättern nachzulesen.


Ganz Wichtig ist dass alle I2C Bausteine eine eindeutige Adresse haben, sonst kann der I2C nicht funktionieren!
Eindeutig ist wörtlich zu nehmen,
jedes Gerät (Slave) MUSS eine eigene Adresse haben.

---
@shaun:
Deine Erklärung ist natürlich wichtig für das Protokoll auf den Leitungen,
und gehört auch zur Kategorie Grundlagen,

jedoch nehemen diverse I2C Routinen/Funktionen
z.B. in Bascom (I2Csend/I2Creceive) einem diese Arbeit ab.

Dann braucht man sich damit nicht unbedingt auseinandersetzten.
Tritt dann ein Problem auf dem Bus auf, kann der Fortgeschrittenen mit
Hilfe diverser Meßgeräte die Signalfolge und deren korrekheit
herausmessen.

Für Einsteiger sage ich nur, nehmt es als gegeben hin,
die Programmiertools nehmen Euch die Arbeit ab.

Seht zu dass Ihr zunächst mit Eurem Programmen zurecht kommt.

Ganz nach dem Motto: "Wir wissen nicht wie, aber es funktioniert"
---

Shadow²
03.09.2006, 12:56
(nicht böse gemeint, aber mit ein paar Sekunden suchen hättest du das selber rausfinden können ;-) )

Hi!

Erstmal danke! Aber die Sachen hatte ich mir schon vorher herausgesucht. Es ging mir nur um die hardwaremäßige Aneinanderschließung mehrerer Geräte, die ich mir nicht ganz vorstellen konnte ;)

An darwin.nuernberg: Ah, genau das meinte ich. Ok, dann kann man die I2C Anschlüsse weiterführen. Ich denke das ist dann quasi sowas wie beim Computer, wo es auch diese Master und Slave Datenkabel gibt für Festplatten, richtig?

scales
03.09.2006, 17:01
Bis auf den Link leider ziemlich falsch

ich sag ja, wie das bei I2C selber funktioniert weis ich nicht,
ich habs am beispiel von RS232 erklärt wie das mit dem adressieren funktionieren könnte



Erstmal danke! Aber die Sachen hatte ich mir schon vorher herausgesucht. Es ging mir nur um die hardwaremäßige Aneinanderschließung mehrerer Geräte, die ich mir nicht ganz vorstellen konnte

achso, dann nehm ich das zurück 8-[

darwin.nuernberg
09.09.2006, 11:42
Ah, genau das meinte ich. Ok, dann kann man die I2C Anschlüsse weiterführen. Ich denke das ist dann quasi sowas wie beim Computer, wo es auch diese Master und Slave Datenkabel gibt für Festplatten, richtig?

Naja fast,
Bei IDE (ATA) Festplatten kann man halt "nur" zwei Geräte an ein BUS-Kabel anschließen,
SCSI (I/II) kann je nach Art 7-15 Geräte pro BUS- Kabel
Naürlich haben diese BUS-Systeme auch mehr Daten und Steuerleitungen, sind aber auch eben BUS-Systeme ähnlich wie der I2C (TWI) nur mit anderen Funktionen und anderen Protokollen.
bei SATA geht wieder nur eine Platte pro Kabel :-b

Aber darüber braucht man sich ja keinen Kopf machen, Das was Du wissen willst ist ja jetzt erklärt oder?

Wichtig ist auch noch zu wissen, dass das Kabel für I2C (TWI) nicht zu lange sein darf also keine 2m Leitung anschließen, sonst könntest Du überagungsprobleme kriegen. Beachte dies bitte. Wie lange genau der I2C - Bus jetzt genau sein darf und welche Möglichkeiten es gibt die Leitungslänge durch Repeater/Booster dennoch zu verlängern kann ich jetzt nicht sagen.

Alles klar?

FriLu
09.09.2006, 14:02
Hallo,
Im Bezug auf IIC-Buspuffer/Extender: bei http://cctools.hs-control.de/home.php gibts die ( und andere IIC) im Bereich Bauteile, auch ein link zum Datenblatt ist vorhanden.
MfG Lutz

Crazy Harry
09.09.2006, 23:23
Wichtig ist auch noch zu wissen, dass das Kabel für I2C (TWI) nicht zu lange sein darf also keine 2m Leitung anschließen, sonst könntest Du überagungsprobleme kriegen. Beachte dies bitte. Wie lange genau der I2C - Bus jetzt genau sein darf und welche Möglichkeiten es gibt die Leitungslänge durch Repeater/Booster dennoch zu verlängern kann ich jetzt nicht sagen.


8-[ ich arbeite seit jahren mit leitungslängen von 1.5-2 m - bisher sind ca. 90 schaltungen im einsatz und noch nie hat es ein problem deswegen gegeben. ich verwende als pull-ups 1 kohm - als kabel 4x0.14mm² geschirmt. darauf liegt +5V, GND, SCL & SDA - schirm auf masse.

.... und es gibt repeater mit denen leitungslängen im km-bereich möglich sind ;)