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
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
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
tina schrieb: > Ich müsste doch im Code alle möglichen Erweiterungen berücksichtigen. Kannst du nicht eine Benutzerkonfiguration vorsehen?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.