Hi Leute, ich beschäftige mich grad damit, wie ich mehr Ports für mein Arduino bekommen kann.
Dabei habe ich mich an den MCP23017 erinnert.
Meine Frage ist nun, brauch ich bei jedem Chip eigene Pullups? Muss ich die Datenleitungen mit Kapazitäten auf GND ziehen? Die Chips sind ja I²C Chips. Deswegen frag ich.
Und kann man das wie im Bild zu erkennen so machen? ( Leider habe ich grade kein SPLAN zur Hand, des wegen haben ich es mit SPRINT-LAYPUT erstellt)
Pullupwiderstände brauchst du nur einmal im Bus.
Wenn Du Deine Platine so wie das Centipede Shield verdratest kannst Du auch die Bibiothek benutzen.
Grüße Uwe
Hi Uwe, das Problem ist ich hab keinen Schaltplan entdecken können bei denen. Aber viel großartig anders als ich können die´s ja auch nicht gemacht haben.
Nein, der Schaltplan ist nicht oeffenlich.
Du kannst die Bibliothek analysieren und dadurch die Adressen herausfinden.
Wenn Du aber 8 I2C Expander verwendest hast Du den ganzen Adressbereich abgedeckt.
Das Centipede Shield hat aber nur die Haelfte davon. Du wirst um alle Aus/Eingaenge ansprechen zu koennen die Bibliothek modifizieren muessen.
Gruesse Uwe
Ok Du hast Recht, hab ich nicht gut gelesen.
Also wenn Du 8 MCP23017 nimmst dann sind alle Adressen abgedeckt. Das einzige was Du noch entdecken musst ist welcher Ausgang welcher Zahl entspricht.
Gruesse Uwe
Wie meinst du das, dass alle Adressen weg sind? Alle von dem Chipmodell? Das wäre klar. Ich habe nemlich einen kurzen Augenblick gedacht, dass du meinst, dass alle I²C Adressen weg sind verwirrt ...das wäre ja Blödsinn.
Aber mir fällt grad ein das ich ja noch die PCF8574P habe, die ja wieder andere Adressen haben...so hätte ich ja noch ma 64 Pins mehr.
Dann wäre ich bei nen MEGA bei 54+128+64= 246 Pins
Der MCP23017 hat 3 Adress-Pins die in die I2C-Adresse eingehen. 3Bit sind 8 Moeglichkeiten und darum kannst du 8 MCP23017 in einem I2C Bus verwenden.
Gruesse Uwe
uwefed:
Das einzige was Du noch entdecken musst ist welcher Ausgang welcher Zahl entspricht.
Gruesse Uwe
Nun ich glaube das muss ich wohl durch aufbauen ausprobieren. Ich kann das aus der Lib nicht herauslesen.
Keine Ahnung wo/wie er da die 8 möglichen Chips mit I²C-Adressen versieht, oder wie er Bsp. NUR den 6ten Chip anspricht.
Vielleicht kann mir ja jmd nen Tipp geben wo die Chips ihre Adresse herbekommen, immherhin gibts ja die Funktion .portWrite([0...7], was darauf schließen lässt,
dass er so die einzelnen Chips anspricht. Hab aber keine Funktion endecken können die ne Adresse zuweisst.
uwefed:
Der MCP23017 hat 3 Adress-Pins die in die I2C-Adresse eingehen. 3Bit sind 8 Moeglichkeiten und darum kannst du 8 MCP23017 in einem I2C Bus verwenden.
Gruesse Uwe
ich bin vor kurzem auf den I2C Switch PCA9546 gestossen.
Da Du ja bei 3 variablen Adress-Bits nur 8 I2C-Chips mit derselben Grundadresse ansprechen kannst, könnte dieser Chip die Lösung für noch mehr I2C Chips sein.
So, wie ich die Beschreibung verstanden habe, kann man damit die Arduino I2C Leitung in 4 I2C Leitungen aufsplitten und diese sogar gezielt ab/anschalten.
Dann kann man also jeweils eine Leitung á 8 Chips öffnen und die anderen 3 schliessen.
Damit sollten 4x8 Chips x 8 Ausgänge funktionieren.
Da der Switch auch 2 Adressbits hat, kannst Du sogar 4x4x8 Chips ansprechen.....
oder wenn Du an einen Switch einen anderen Switch hängst, der wiederum an einem anderen Switch hängt.....
Gruß Reinhard
PS.: Da mein Gedankenmodell nur theoretischer Natur ist, wäre ein Praxisbericht mit einem I2C-Switch super!
Hey das ist ja ne coole Sache, danke für den Hinweis. Den Chip kannte ich noch garnicht. Das macht ja Dimensionen möglich, die nur noch vom kleinen Speicher begrenzt werden.
Ich werde mal bis Sonntag einige Layouts hochladen. Muss ich mal mein sPlan wieder rauskramen. Wobei ich finde für so ne einfache Schaltung reicht schon fast Sprintlayout ums grafisch darzustellenm:D .
Also so wie ich das verstanden habe(in nen anderen Forum gelesen) kann man mit so nen Switch zwar auf 8 aufteilen, aber hat man mehrere von den 8 aktiv, und an jeder Leitung das selbe hängen(und damit auch die
selben Adressen der "Endverbraucher", so würde man befehle an mehrere Endverbacher mit gleicher Adresse gleichzeit schicken udn somit schalten. OT. omg was in der deutschen Sprache für Schachtelsätze möglich sind.
Man kann also nur einen Strang gleichzeig aktiv haben, sollte man an jedem Strang das selbe haben. Wenn man aber an den andern Strängen was anderes hat, gehts wieder.
Was willst du denn machen? Ne Kaskade von 1000 Uhrenchips?
uwefed:
Der MCP23017 hat 3 Adress-Pins die in die I2C-Adresse eingehen. 3Bit sind 8 Moeglichkeiten und darum kannst du 8 MCP23017 in einem I2C Bus verwenden.
Gruesse Uwe
Jo 2³ Adressen. Ich war vorhin nur etwas verwirrt
Die I2C Adresse setzt sich aus einem fixen Teil ( oberste 4 Bit, beim MCP23017 ist das 0100 ) und 3 Bit die mit 3 Anschluessen eingestellt werden koennen. Zusammen 7 Bit. Siehe Seite 8 von http://ww1.microchip.com/downloads/en/devicedoc/21952b.pdf
Moegliche Adressen von 32 bis 39 dezimal.
So kannst Du 8 Adressen an 8 MCP23017 vergeben.
Falls Du noch mehr Aus/Eingaenge brauchst kannst Du die MCP23S17 Variante nehmen (SPI Interface) und den CS ueber einen Demultiplexer zb einen 74HC138 (8 Ausgaenge) oder 74HC154 (16 Ausgaenge) oder mehrere Kaskadieren.
Alternative ist auch wie Spaceball sagt den PCA9548 zu verwenden um 8 I2C-Busse zu erzeugen die einzeln angesteuert werden (durch 3 Adressbit) und wo in jedem SubBus die gleichen Adressen vorhanden sein koennen: also 8 x 8 MCP23017 mit 16 Ein/Ausgaengen, also zusammen 1024 Ein/Ausgaengen