Forum: Mikrocontroller und Digitale Elektronik I2C Devieces mit gleicher Adresse ansprechen


von tina (Gast)


Lesenswert?

Hallo zusammen,

ich würde gerne eine Schaltung mit jeweils 2 PCF8574 kaskadieren, also 
parallel Schalten.

Jetzt sind die beiden Chips aber auf jeder Platine gleich adressiert.

Funktioniert das ?


Danke euch.

von avrGerd (Gast)


Lesenswert?

Hallo tina,

unter kaskadieren verstehe ich erstmal in Reihe schalten und nicht 
parallel.
Und damit ist die Antwort auf Deine Frage NEIN.

Was genau hast Du vor?
Vielleicht willst Du ja auch was anderes bezwecken ...


Gruss,
avrGerd

von John B. (johnbauer)


Lesenswert?

Hallo Tina,
Du könntest einen Multiplexer davor schalten:
http://www.reichelt.de/PCF-I-C-Bus-Controller/PCA-9545-AD/index.html?ACTION=3&GROUPID=2942&ARTICLE=70050&SHOW=1&START=0&OFFSET=16&;PROVID=2402

Damit kannst Du per I2C-Befehl zwischen den Chips umschalten.

Gruß
John

von hans (Gast)


Lesenswert?

Jeder PCF will (muß) mit seiner Adresse angesprochen werden.
Durch die Pins A0-2 kannst du 8 Stück an einen Bus hängen.

Wenn du PCF8574 und PCF8574A verwendest gehen 16 Stück, da
die Grundadresse unterschiedlich ist.

hans

von avrGerd (Gast)


Lesenswert?

@John:
Das ist ja mit Kanonen auf Spatezen schießen.

@Tina:
Einfach den 2ten IC auf eine andere Adresse legen und fertig.
Kostet nix und funktioniert zuverlässig.

Oder gibt es Gründe, warum Du das nicht machen kannst?


Gruß,
avrGerd

von tina (Gast)


Lesenswert?

Hallo,

danke für eure Antworten!
Es ist bei der Schaltung nicht von vorn herein klar wie viele Platinen 
kaskadiert werden.
Letzendlich übernehmen aber alle PCF Ausgänge die gleiche Funktion.

Ich müsste doch im Code alle möglichen Erweiterungen berücksichtigen. 
Was ist denn, wenn ein Slave / PCF nicht gefunden werden kann ?

Liebe Grüße

von avrGerd (Gast)


Lesenswert?

Hallo tina,

was dann zu tun ist, kann Dir Niemand sagen.

Es sei denn, Du erzählst uns, was das Ding machen soll, d.h. was wird 
denn angesteuert, ist es wichtig, das alle I/O´s gleichzeitig geschaltet 
werden oder ... usw.

Grundsätzlich sollte man natürlich evtl. Fehler (wie einen nicht 
angeschlossenen Slave) abfangen und entsprechend reagieren.


Gruß,
avrGerd

von Karl H. (kbuchegg)


Lesenswert?

tina schrieb:

> Ich müsste doch im Code alle möglichen Erweiterungen berücksichtigen.

Kannst du nicht eine Benutzerkonfiguration vorsehen?

von tina (Gast)


Lesenswert?

Hi,

Benutzerkonfiguration geht nicht.
Alle Ausgänge an den parallel geschalteten I2C Portexpander müssen 
gleich schalten.

Ob jetzt zwei, oder vier Platinen parallel geschaltet werden, sollte 
egal sein.

Kann ich in der Initialisierung nicht abfangen, wie viele Slaves ich 
finde und später im Programm entsprechend ansteuern?

Danke

von Guido Körber (Gast)


Lesenswert?

Da die Slaves alle auf die gleiche Adresse reagieren werden die auch 
immer alle gleichzeitig angesprochen.

So lange nur geschrieben wird geht das sogar gut, alle Slaves die da 
sind antworten dann ja nur mit dem ACK-Bit und dafür ist es egal ob das 
von einem oder mehreren Slaves getrieben wird. Selbst ein 
clock-stretching Handshake funktioniert damit, da der langsamste Slave 
dann die Geschwindigkeit bestimmt. Natürlich bekommen dann alle Slaves 
die gleichen Daten.

Lesen geht nicht, da möglicherweise unterschiedliche Daten von den 
einzelnen Slaves kommen würden und das gibt dann Datensalat.

Wenn die Dinger kaskadiert werden sollen, also irgend eine 
Steckverbindung von einem zum nächsten gelegt wird, dann gäbe es die 
Möglichkeit der geografischen Adressierung, also durch geschickte 
Verkabelung dem einzelnen Modul eine Adresse zuzuweisen (der alte Apple 
II Bus und der NuBus sind Beispiele für geografische Adressierung wo 
eine Karte ihre Adresse durch den Steckplatz zugewiesen bekommt). Die 
Adressbits eines Modules würden dann über das Kabel vom vorhergehenden 
Modul mitgeführt werden, man muss sich dann nur eine Logik ausdenken mit 
der man die Bits entsprechend durchschleift, so dass jedes Modul eine 
eigene Adresse bekommt. Wären halt ein paar Leitungen und ggf. 
Logikgatter zusätzlich.

von xcdark (Gast)


Lesenswert?

Guido Körber schrieb:
> So lange nur geschrieben wird geht das sogar gut, alle Slaves die da
> sind antworten dann ja nur mit dem ACK-Bit und dafür ist es egal ob das
> von einem oder mehreren Slaves getrieben wird. Selbst ein
> clock-stretching Handshake funktioniert damit, da der langsamste Slave
> dann die Geschwindigkeit bestimmt. Natürlich bekommen dann alle Slaves
> die gleichen Daten.

Wobei genau genommen, obwohl durchaus funktionierend, damit die 
Spezifikationen arg an ihre Grenzen getrieben werden, da es nicht 
auffallen würde, wenn ein Slave kein ACK senden würde (defekter IC 
z.B.). Also nur für Applikationen zu empfehlen, wo der unerkannte 
Ausfall einiger Slaves eher unkritisch ist.

von Sven H. (dsb_sven)


Lesenswert?

Bedenke dabei auch, dass ein I²C Bus auch nur eine begrenze Anzahl an 
Busteilnehmern hat, weil irgendwann die Pegel, die als '0' erkannt 
werden, vom treibenden Baustein nicht mehr erreicht werden können.

von Guido Körber (Gast)


Lesenswert?

Unterm Strich kommen wir immer wieder an den Punkt, dass ein sauberes 
Design weniger Ärger macht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.