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.
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
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
@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
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
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
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
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.
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.
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.