Arduino Mega mit IO MCP23017 erweitern

Hallo Kollegen!

Ich habe mich vor kurzem entschlossen, mich mit Arduinos zu befassen. Naja. rreicht hab ich nur graue Haare!

Aber zu meiner Frage: Ich habe auf meinem Mega mit

const int Relay_outWeiche1Straight = 47;[/i]
Ausgänge definiert. Alles hat funktioniert wie es soll.
Jetzt will ich aber diese Ausgänge vom Mega auf einen MCP23017 verlegen.
mcp6.const int Relay_outWeiche1Straight = 9;
war ein Versuch. Hat aber nichts gebracht außer Fehlermeldungen.
Kann mir da eimal wer Helfen. Bitte aber nur komplette Grundlagen. Sonst versteht der ZugWilli nur Bahnhof :slight_smile:

mcp6.const

sehr kreativ. Leider sind Compiler ganz schlecht im Raten, was du da eigentlich machen willst.

Was ist mcp6 ?
Was soll der Punkt danach ?

Wenn (nur mal geraten) mcp6 eine Objekt-Instanz einer Klasse irgendeiner Bibliothek ist, müsstest du rauskriegen, welche Methoden und public Eigenschaften diese Klasse zur Verfügung stellt.
Damit kannst du dann eventuell sinnvoller experimentieren.

Wenn du dann Fragen hast, deinen Code-Versuch bitte mit Link zu der von dir gefundenen Library und möglichst auch die genaue Fehlermeldung. (Copy & Paste ist schon sinnvoll, manchmal)


Ich habe auf meinem Mega mit

const int Relay_outWeiche1Straight = 47;

Ausgänge definiert.

Genaugenommen hast du da einer Konstanten Zahl einen Namen gegeben. Mehr nicht. Lässt sich gut für eine Pin-Nummer eines Mega verwenden, das stimmt.

So funktioniert das auch nicht
Sieh dir dazu die Library an.

ok Danke!

Ich hab das Orginal vom Netz kopiert. (Gleisbildstellpult - Weichensteuerung mit Arduino | N-Modellbahn)

Jetzt wollte ich die Relaise Ausgänge vom Mega runternehmen.

So wie ich das verstehe ist das nun doch nicht so einfach. Aber wie kann man es einfach machen??

ZugWilli:
So wie ich das verstehe ist das nun doch nicht so einfach. Aber wie kann man es einfach machen??

Hat ich dir doch geschrieben.

Sorry!

Ja ich hab mir das mal angeschaut aber; ??????

Ich hab schon begriffen, das es nicht so einfach geht, aber kann ich, wie bei meinem Beispiel, einen Ausgang der vorher am MEGA als Ausgang geschaltet war einfach auf den MCP23017 legen?

Ich meine z.b.: Ausgang PIN17 vom Mega auf den PIN0 oder auch einen anderen PIN vom MCP legen?

Nun auch mal zu Michael_X

"mcp6" soll die Adesse vom 23017 sein. Hab das so aus der Seite

rauskopiert. Wobei die "6" aus der Hardwareseitigen Adresse kommt. Der Punkt danach ist nur von mir. Hatte Hoffnung das es so geht. Aber wieder ienige weiße Haare mehr.

ZugWilli:
....
Ich hab schon begriffen, das es nicht so einfach geht, aber kann ich, wie bei meinem Beispiel, einen Ausgang der vorher am MEGA als Ausgang geschaltet war einfach auf den MCP23017 legen?

Ich meine z.b.: Ausgang PIN17 vom Mega auf den PIN0 oder auch einen anderen PIN vom MCP legen?

Nein, da du den Baustein per I2C ansprechen musst.
Das übernimmt dann bei richtiger "Ansprache" die Library.

Ich frage mich allerding, wozu du den MCP23017 brauchst ?
Der Mega hat doch reichlich digitale Pins.

Das Beispiel auf der von dir verlinkten Seite sieht aber etwas anders aus. Du musst die Portexpander Lib erstmal entsprechend einrichten ( wie in dem Beispiel ) und einen Namen vergeben. Der Name ist frei wählbar - z.B. mcpx. Die HW-Adresse definierst Du nicht durch den Namen, sondern beim Einrichten. Dann musst Du in deinem Sketch überall dort wo Du z.B. pinMode oder digitalWrite verwendest, diesen Namen voranstellen.
Also mcpx.pinMode(..) oder mcpx.digitalWrite(..) .
Versuche doch erstmal das Beispiel zum Laufen zubringen. Auch in der Lib selbst gibt es ein Beispiel.

Der Pinnummer dann einen Namen zu geben, das funktioniert genau so wie ohne mcp also z.B.

const int Relay_outWeiche1Straight = 9;

Hallo Kollegen!

Danke für eure Hilfe.

Hab mal rumprobiert. Ich glaub ich bin auf einem guten Weg.

Wenn nochmal Fragen auftauchen werde ich sie wieder hier anhängen.

Danke

ZugWilli

ZugWilli:
Hallo Kollegen!

Danke für eure Hilfe.

Hab mal rumprobiert. Ich glaub ich bin auf einem guten Weg.

Wenn nochmal Fragen auftauchen werde ich sie wieder hier anhängen.

Danke

ZugWilli

Wäre aber schön, wenn du auch unsere Fragen beantwortest.

Ok.

Zu deiner Frage:

Ich frage mich allerding, wozu du den MCP23017 brauchst ?

Ich hab wenig Platz und wollte mit diesen MCP23017 etwas dezentral Arbeiten und mir Kabelverlegungsarbeiten ersparen.

Es sollen Distanzen von ca. 1 Meter überwnden werden. Eine 2 Erweiterung in die andere Richtung ebenfalls ca. 1 Meter. Der MEGA soll an ein Schaltpult angeschlossen werden. Das ganze soll für eine Modellbahnanlage ein Stellpult werden. Diese soll für Ausbildungen verwendet werden. Die Anlage soll vom Stellpult und auch “Nahbedient” (Tatser bei den Weichen) werden können.

mfg ZugWilli

Ok, danke für deine Erklärung.
Für eine Modellbahn kann man nicht genug Schaltpins haben, da macht das dann Sinn.

Hi

1 Meter und I²C, digitalen Wechselstrom überall, elektrische Verbraucher, Die über Radreifen den Strom abnehmen - wie sicher wird Das funktionieren?
Oder anders herum: Wie viele Störungen werden sich hier dann auf den 2x 1 Meter I²C-Bus einschleichen?

Zur Not kannst Du aber den PortExpander näher zum Arduino bringen und der Weg zu Taster/LEDs wird halt länger.

MfG

postmaster-ino:
1 Meter und I²C, digitalen Wechselstrom überall, elektrische Verbraucher, Die über Radreifen den Strom abnehmen - wie sicher wird Das funktionieren?

Das funktioniert bei mir schon seit fast 10 Jahren so. Man kann keine hohen Übertragungsraten einstellen ( max 100kHz ) und wenn es mehrere Äste sind - wie bei mir - kann man einen I2C Hub verwenden um immer nur einen Ast aktiv zu schalten. Meine Leitungen sind allerdings auch deutlich länger als 1m.

Hi

Danke für die prompte Antwort - hatte vor Jahren etwas mit I2C auf Langstrecke # erfolglos # probiert - sollte Version 1 des HausBus werden (ist jetzt CAN).

Gerade an Dich, MicroBahner, dachte ich als Referenz :slight_smile:

MfG