8 x MCP23017 16 Bit Portexpander mit I2C +128 I/O

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)

Bitte nicht centipede_shield [macetech documentation] , da ich alles auf einer Platine haben möchte und mir 50€ + Versand zu teuer sind.

Allerdings stellt sich die Frage, ob die Lib des verlinkten Shields nehmen kann?!?!

Ansonsten bin ich für jeden Tipp Dankbar.

Die Schaltung:

  • Die 6er "Klötze" sind für die Adressen gedacht

Und hier noch die Pins des Chips:

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

Hi Uwe,

nun, ich glaube du liegst zur Hälfte Falsch.

Denn die Werben ja damit, dass man 2 dieser Shields benutzen kann.

Und aus dem Code Example der ganz oben verlinkten Seite

.digitalWrite([0…127], [LOW…HIGH]) - Acts like normal digitalWrite.

schließe ich, dass die Library doch 128Pins verwalten kann.

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 :open_mouth:

danke fürs Helfen!

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

Jo 2³ Adressen. Ich war vorhin nur etwas verwirrt :smiley:

Don't build the PCB as shown, the MCP23017 is available in skinny (0.3") DIP, not wide (0.6") DIP.

macegr:
Don't build the PCB as shown, the MCP23017 is available in skinny (0.3") DIP, not wide (0.6") DIP.

I've done for demonstration purposes only. But thanks for the tip!

Hallo,

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..... :wink:

Gruß Reinhard

PS.: Da mein Gedankenmodell nur theoretischer Natur ist, wäre ein Praxisbericht mit einem I2C-Switch super!

Hallo,
mir ist noch was eingefallen:

PCA9555
16x I/O

Gruß Reinhard

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.

Hallo,
inzwischen hab ich noch ein bischen gekramt:

PCA9548
-> 8x I2C

Gruß Reinhard

PS.: Falls Du´s in die Praxis umsetzt, laß es uns bitte wissen.
Ich knoble nämlich am ansprechen verschiedener RTCs (Adresse nicht änderbar)

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 .

PS: hab noch einige http://www.conrad.de/ce/de/product/523798/HP-PLATINE-200X300X15MM-1X35M-CU/2512065&ref=list :wink:

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?

bytzmaster:

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 :smiley:

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

Gruesse Uwe

Hm, so hab ich noch garnicht gedacht. Einfach so nen Strang ausstellen und nen andern einlesen. Das ist ja nur ne Programmieraufgabe.

Und dein Tipp mit der SPI-Variante ist auch super. Danke