PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Bus Mehrere Teilnehmer unter der gleichen Adresse



infosystems
10.03.2006, 06:13
Hallo,

ich möchte über den I2C Bus mehrere ( 4 ) Teilnehmer (Slaves) unter der gleichen Adresse adressieren. Diese befinden sich auf verschiedenen Platinen, sollen aber die gleiche Funktion haben. Es handelt sich um LED's die über PCF8574 angesprochen werden.

Ist dies eigentlich möglich, oder kommen die sich hier in die Quere?

Für eure Hilfe wäre ich sehr dankbar.

Viele Grüße

Rici

Suggarman
10.03.2006, 12:53
Mehrere I2C-Bausteine mit einer Adresse lassen sich nicht betreiben. Der PCF8574 läßt sich aber doch auf 8 verschiedene Adressen setzen.

mfg

Stefan

patti16
10.03.2006, 12:58
da musst du auf jeden fall andere Adressen nehmen wie du schon gemerkt hast.

sonst klappt nichts

gruß
patrick

infosystems
10.03.2006, 13:24
Danke für Eure Antwort.

An einem AVR mehrere I2C Buse anschließen, ist das ein Problem?
An dem ATMEGA32 hab ich ja auf PC0 und PC1 einen, aber eigentlich kann ich mir doch noch welche per SW machen, oder?

Für jeden Bus brauch ich doch eigentlich nur 2 freie Ports oder?

Da kann ich mir doch 4 I2C Busse stricken. Sind da Probleme zu befürchten?

Gruß

Rici

Ratber
10.03.2006, 13:25
Nicht so schnell Leute,beim 8574 geht das schon aber nur eingeschränkt.:



@Infosystems


Elektrisch gibt es da jedenfalls keine Probleme da der Bus komplett auf Offene Kollektoren aufgebaut ist.

Rein Logisch geht das natürlich nur beim Schreiben aber das dürfte dir ja sicher klar sein.

Der Master sendet "Start" + "Adresse" und alle angesprochenen Slaves geben ein "ACK" zurück.
Wegen der Bindung am Takt ist das Synchron.

Was dir passieren kann ist das ein Slave kein "ACK" gibt.
Das würde der Master nicht mitbekommen.
Du hast also keine Kontrollmöglichkeit mehr.
Im Ernstfall kommen auf diesem Slave die Daten nicht an oder nur Müll.

Dagegen hilft nur die Daten doppelt oder dreifach zu schicken aber wenn du das eh mehrfach schickst dann kannste auch gleich einzeln adressieren.
Macht also wenig Sinn.

Eine reduzierung des Taktes würde zusätzliche Sicherheit (Naja,so in etwa) geben.


Ich hab das mal mit 2 PCF8574 an nem M16 gemacht.
Der M16 hat auf 2 gleichadressierte Portexpander die gleichen Daten geschickt und die 2x8 Bit hab ich dann wieder am M16 eingelesen.
Das ganze mit unterschiedlichen Taktraten und Leitungslängen.(Jeweils 10'000 Durchgänge bei 100-1 Khz Takt mit 0.1 bis 5m Leitungslänge)
Der M16 hat die Daten gespeichert und am Ende über die Serielle ausgeworfen.
Bei 100Khz gabs einige fehler aber unterhalb von 30Khz keine mehr.
Die Leitungslängen sind unabhängig davon eine Frage der Kapazitäten und dienten nur dem Hintergrund unterschiedliche Längen und Kabelsorten zu testen.

Is also mit Einschränkungen machbar.



PS:
Am Ende hab ich mich aber dann doch für unterschiedliche Adressen entschieden weil es Zeitlich kein Problem war und ich so "jeden" Portexpander Individuell beschicken konnte.

patti16
10.03.2006, 13:27
hallo

du musste doch alle nur mit den zwei leitungen anschliessen und dann mit zwei Widerständen mit 10 k an die 5Votl mehr nicht.
5Volt<---10kOhm-----Scl-------Slave1------Slave2----usw.
5Volt<---10kOhm-----Sda------Slave1------Slave2----usw.


gruß
patrick

Ratber
10.03.2006, 13:28
Danke für Eure Antwort.

An einem AVR mehrere I2C Buse anschließen, ist das ein Problem?
An dem ATMEGA32 hab ich ja auf PC0 und PC1 einen, aber eigentlich kann ich mir doch noch welche per SW machen, oder?

Für jeden Bus brauch ich doch eigentlich nur 2 freie Ports oder?

Da kann ich mir doch 4 I2C Busse stricken. Sind da Probleme zu befürchten?

Gruß

Rici

Also wenn du ganz ausgefuchst programierst dann könntest du die 4 busse ineinander Verschachteln um Zeitlich was zu gewinnen aber wenn du das vorhhast was ich vermute dann hast du am Ende nix gewonnen weil dir dann daurch Prozesszeit fehlt.

Was soll es denn konkret werden ?

infosystems
10.03.2006, 13:59
Ich werde das anders machen. Eigentlich brauche ich genau 16 Slaves. Die sollen ja irgendwie ansprechbar sein. Muß mich mal reinlesen. Die Idee mit mehreren Busen nebeneinander, das ist nichts, die Verdrahtung wird mir auch zu aufwendig.

Danke für Eure Hilfe.

Rici

Suggarman
10.03.2006, 15:22
Ich werde das anders machen. Eigentlich brauche ich genau 16 Slaves. Die sollen ja irgendwie ansprechbar sein. Muß mich mal reinlesen. Die Idee mit mehreren Busen nebeneinander, das ist nichts, die Verdrahtung wird mir auch zu aufwendig.

Danke für Eure Hilfe.

Rici


Das geht auch einfach so 8x PCF8574 und 8xPCF8574A.

Schon hast Du 16 Stück mit verschiedenen Adressen.

mfg

Stefan

infosystems
10.03.2006, 15:29
Danke, genau so hab ich es gemacht.

Viele Grüße

Richard

Ratber
10.03.2006, 18:37
also ist Zeit kein Kriterium wie ich vermutete.

Hätteste eher sagen können. :wink: